attempt to grab the keyboard only 1000 times, not forever. f555908c
Anselm R. Garbe · 2007-03-07 11:01 2 file(s) · +12 −6
config.mk +1 −1
1 1
# dmenu version
2 -
VERSION = 2.7
2 +
VERSION = 2.8
3 3
4 4
# Customize below to fit your system
5 5
main.c +11 −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 */