From f555908cef580106a50c53e096ec12bf4d2bb2e2 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Wed, 7 Mar 2007 11:01:14 +0100 Subject: [PATCH] attempt to grab the keyboard only 1000 times, not forever. --- config.mk | 2 +- main.c | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/config.mk b/config.mk index 07b323b..75cc46d 100644 --- 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 index 0f07773..fa03ec8 100644 --- 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 */