tattempt to grab the keyboard only 1000 times, not forever. - dmenu - Dmenu fork with xft fonts.
 (HTM) git clone git://r-36.net/dmenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f555908cef580106a50c53e096ec12bf4d2bb2e2
 (DIR) parent 73120414e2e4a3a8031b243fb0d893506d4a0dc1
 (HTM) 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:
         config.mk                           |       2 +-
         main.c                              |      16 +++++++++++-----
       
       2 files changed, 12 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/config.mk b/config.mk
       t@@ -1,5 +1,5 @@
        # dmenu version
       -VERSION = 2.7
       +VERSION = 2.8
        
        # Customize below to fit your system
        
 (DIR) diff --git a/main.c b/main.c
       t@@ -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
       t@@ -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 */