|  | @@ -27,7 +27,9 @@ cleanup()
 | 
											
												
													
														|  |  		resize(sel, True, TopLeft);
 |  |  		resize(sel, True, TopLeft);
 | 
											
												
													
														|  |  		unmanage(sel);
 |  |  		unmanage(sel);
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  | 
 |  | +	XUngrabKey(dpy, AnyKey, AnyModifier, root);
 | 
											
												
													
														|  |  	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 |  |  	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 | 
											
												
													
														|  | 
 |  | +	XSync(dpy, False);
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  static void
 |  |  static void
 | 
											
										
											
												
													
														|  | @@ -37,6 +39,7 @@ scan()
 | 
											
												
													
														|  |  	Window *wins, d1, d2;
 |  |  	Window *wins, d1, d2;
 | 
											
												
													
														|  |  	XWindowAttributes wa;
 |  |  	XWindowAttributes wa;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +	wins = NULL;
 | 
											
												
													
														|  |  	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
 |  |  	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
 | 
											
												
													
														|  |  		for(i = 0; i < num; i++) {
 |  |  		for(i = 0; i < num; i++) {
 | 
											
												
													
														|  |  			if(!XGetWindowAttributes(dpy, wins[i], &wa))
 |  |  			if(!XGetWindowAttributes(dpy, wins[i], &wa))
 | 
											
										
											
												
													
														|  | @@ -168,7 +171,6 @@ main(int argc, char *argv[])
 | 
											
												
													
														|  |  	fd_set rd;
 |  |  	fd_set rd;
 | 
											
												
													
														|  |  	Bool readin = True;
 |  |  	Bool readin = True;
 | 
											
												
													
														|  |  	Window w;
 |  |  	Window w;
 | 
											
												
													
														|  | -	XEvent ev;
 |  | 
 | 
											
												
													
														|  |  	XModifierKeymap *modmap;
 |  |  	XModifierKeymap *modmap;
 | 
											
												
													
														|  |  	XSetWindowAttributes wa;
 |  |  	XSetWindowAttributes wa;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -196,6 +198,7 @@ main(int argc, char *argv[])
 | 
											
												
													
														|  |  	if(otherwm)
 |  |  	if(otherwm)
 | 
											
												
													
														|  |  		eprint("dwm: another window manager is already running\n");
 |  |  		eprint("dwm: another window manager is already running\n");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +	XSync(dpy, False);
 | 
											
												
													
														|  |  	XSetErrorHandler(NULL);
 |  |  	XSetErrorHandler(NULL);
 | 
											
												
													
														|  |  	xerrorxlib = XSetErrorHandler(xerror);
 |  |  	xerrorxlib = XSetErrorHandler(xerror);
 | 
											
												
													
														|  |  	XSync(dpy, False);
 |  |  	XSync(dpy, False);
 | 
											
										
											
												
													
														|  | @@ -268,7 +271,7 @@ main(int argc, char *argv[])
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	/* main event loop, also reads status text from stdin */
 |  |  	/* main event loop, also reads status text from stdin */
 | 
											
												
													
														|  |  	XSync(dpy, False);
 |  |  	XSync(dpy, False);
 | 
											
												
													
														|  | -	goto XLoop;
 |  | 
 | 
											
												
													
														|  | 
 |  | +	procevent();
 | 
											
												
													
														|  |  	while(running) {
 |  |  	while(running) {
 | 
											
												
													
														|  |  		FD_ZERO(&rd);
 |  |  		FD_ZERO(&rd);
 | 
											
												
													
														|  |  		if(readin)
 |  |  		if(readin)
 | 
											
										
											
												
													
														|  | @@ -288,14 +291,8 @@ main(int argc, char *argv[])
 | 
											
												
													
														|  |  					strcpy(stext, "broken pipe");
 |  |  					strcpy(stext, "broken pipe");
 | 
											
												
													
														|  |  				drawstatus();
 |  |  				drawstatus();
 | 
											
												
													
														|  |  			}
 |  |  			}
 | 
											
												
													
														|  | -			if(FD_ISSET(xfd, &rd)) {
 |  | 
 | 
											
												
													
														|  | -XLoop:
 |  | 
 | 
											
												
													
														|  | -				while(XPending(dpy)) {
 |  | 
 | 
											
												
													
														|  | -					XNextEvent(dpy, &ev);
 |  | 
 | 
											
												
													
														|  | -					if(handler[ev.type])
 |  | 
 | 
											
												
													
														|  | -						(handler[ev.type])(&ev); /* call handler */
 |  | 
 | 
											
												
													
														|  | -				}
 |  | 
 | 
											
												
													
														|  | -			}
 |  | 
 | 
											
												
													
														|  | 
 |  | +			if(FD_ISSET(xfd, &rd))
 | 
											
												
													
														|  | 
 |  | +				procevent();
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	cleanup();
 |  |  	cleanup();
 |