dmenu

my fork of dmenu
Index Commits Files Refs README LICENSE
commit f555908cef580106a50c53e096ec12bf4d2bb2e2
parent 73120414e2e4a3a8031b243fb0d893506d4a0dc1
Author: Anselm R. Garbe <arg@suckless.org>
Date:   Wed,  7 Mar 2007 11:01:14 +0100

attempt to grab the keyboard only 1000 times, not forever.
Diffstat:
Mconfig.mk | 2+-
Mmain.c | 16+++++++++++-----
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/config.mk b/config.mk
@@ -1,5 +1,5 @@
 # dmenu version
-VERSION = 2.7
+VERSION = 2.8
 
 # Customize below to fit your system
 
diff --git a/main.c b/main.c
@@ -108,11 +108,17 @@ drawmenu(void) {
     XFlush(dpy);
 }
 
-static void
+static Bool
 grabkeyboard(void) {
-    while(XGrabKeyboard(dpy, root, True, GrabModeAsync,
-             GrabModeAsync, CurrentTime) != GrabSuccess)
+    unsigned int len;
+
+    for(len = 1000; len; len--) {
+        if(XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime)
+            == GrabSuccess)
+            break;
         usleep(1000);
+    }
+    return len > 0;
 }
 
 static unsigned long
@@ -456,10 +462,10 @@ main(int argc, char *argv[]) {
     root = RootWindow(dpy, screen);
     if(isatty(STDIN_FILENO)) {
         maxname = readstdin();
-        grabkeyboard();
+        running = grabkeyboard();
     }
     else { /* prevent keypress loss */
-        grabkeyboard();
+        running = grabkeyboard();
         maxname = readstdin();
     }
     /* init modifier map */