attempt to grab the keyboard only 1000 times, not forever.
f555908c
2 file(s) · +12 −6
| 1 | 1 | # dmenu version |
|
| 2 | - | VERSION = 2.7 |
|
| 2 | + | VERSION = 2.8 |
|
| 3 | 3 | ||
| 4 | 4 | # Customize below to fit your system |
|
| 5 | 5 |
| 108 | 108 | XFlush(dpy); |
|
| 109 | 109 | } |
|
| 110 | 110 | ||
| 111 | - | static void |
|
| 111 | + | static Bool |
|
| 112 | 112 | grabkeyboard(void) { |
|
| 113 | - | while(XGrabKeyboard(dpy, root, True, GrabModeAsync, |
|
| 114 | - | GrabModeAsync, CurrentTime) != GrabSuccess) |
|
| 113 | + | unsigned int len; |
|
| 114 | + | ||
| 115 | + | for(len = 1000; len; len--) { |
|
| 116 | + | if(XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime) |
|
| 117 | + | == GrabSuccess) |
|
| 118 | + | break; |
|
| 115 | 119 | usleep(1000); |
|
| 120 | + | } |
|
| 121 | + | return len > 0; |
|
| 116 | 122 | } |
|
| 117 | 123 | ||
| 118 | 124 | static unsigned long |
|
| 456 | 462 | root = RootWindow(dpy, screen); |
|
| 457 | 463 | if(isatty(STDIN_FILENO)) { |
|
| 458 | 464 | maxname = readstdin(); |
|
| 459 | - | grabkeyboard(); |
|
| 465 | + | running = grabkeyboard(); |
|
| 460 | 466 | } |
|
| 461 | 467 | else { /* prevent keypress loss */ |
|
| 462 | - | grabkeyboard(); |
|
| 468 | + | running = grabkeyboard(); |
|
| 463 | 469 | maxname = readstdin(); |
|
| 464 | 470 | } |
|
| 465 | 471 | /* init modifier map */ |
|