attempt to grab the keyboard only 1000 times, not forever.
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
				
			|||||||
# dmenu version
 | 
					# dmenu version
 | 
				
			||||||
VERSION = 2.7
 | 
					VERSION = 2.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Customize below to fit your system
 | 
					# Customize below to fit your system
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								main.c
									
									
									
									
									
								
							@@ -108,11 +108,17 @@ drawmenu(void) {
 | 
				
			|||||||
	XFlush(dpy);
 | 
						XFlush(dpy);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static Bool
 | 
				
			||||||
grabkeyboard(void) {
 | 
					grabkeyboard(void) {
 | 
				
			||||||
	while(XGrabKeyboard(dpy, root, True, GrabModeAsync,
 | 
						unsigned int len;
 | 
				
			||||||
			 GrabModeAsync, CurrentTime) != GrabSuccess)
 | 
					
 | 
				
			||||||
 | 
						for(len = 1000; len; len--) {
 | 
				
			||||||
 | 
							if(XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime)
 | 
				
			||||||
 | 
								== GrabSuccess)
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
		usleep(1000);
 | 
							usleep(1000);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return len > 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned long
 | 
					static unsigned long
 | 
				
			||||||
@@ -456,10 +462,10 @@ main(int argc, char *argv[]) {
 | 
				
			|||||||
	root = RootWindow(dpy, screen);
 | 
						root = RootWindow(dpy, screen);
 | 
				
			||||||
	if(isatty(STDIN_FILENO)) {
 | 
						if(isatty(STDIN_FILENO)) {
 | 
				
			||||||
		maxname = readstdin();
 | 
							maxname = readstdin();
 | 
				
			||||||
		grabkeyboard();
 | 
							running = grabkeyboard();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else { /* prevent keypress loss */
 | 
						else { /* prevent keypress loss */
 | 
				
			||||||
		grabkeyboard();
 | 
							running = grabkeyboard();
 | 
				
			||||||
		maxname = readstdin();
 | 
							maxname = readstdin();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/* init modifier map */
 | 
						/* init modifier map */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user