changed main event loop
This commit is contained in:
		
							parent
							
								
									ee31e38dc7
								
							
						
					
					
						commit
						b6ad663f87
					
				
							
								
								
									
										1
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								dwm.h
									
									
									
									
									
								
							| @ -108,6 +108,7 @@ extern unsigned int textw(const char *text); | ||||
| 
 | ||||
| /* event.c */ | ||||
| extern void grabkeys(); | ||||
| extern void procevent(); | ||||
| 
 | ||||
| /* main.c */ | ||||
| extern int getproto(Window w); | ||||
|  | ||||
							
								
								
									
										13
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								event.c
									
									
									
									
									
								
							| @ -384,3 +384,16 @@ grabkeys() | ||||
| 				GrabModeAsync, GrabModeAsync); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void | ||||
| procevent() | ||||
| { | ||||
| 	XEvent ev; | ||||
| 
 | ||||
| 	while(XPending(dpy)) { | ||||
| 		XNextEvent(dpy, &ev); | ||||
| 		if(handler[ev.type]) | ||||
| 			(handler[ev.type])(&ev); /* call handler */ | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										17
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								main.c
									
									
									
									
									
								
							| @ -27,7 +27,9 @@ cleanup() | ||||
| 		resize(sel, True, TopLeft); | ||||
| 		unmanage(sel); | ||||
| 	} | ||||
| 	XUngrabKey(dpy, AnyKey, AnyModifier, root); | ||||
| 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); | ||||
| 	XSync(dpy, False); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| @ -37,6 +39,7 @@ scan() | ||||
| 	Window *wins, d1, d2; | ||||
| 	XWindowAttributes wa; | ||||
| 
 | ||||
| 	wins = NULL; | ||||
| 	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { | ||||
| 		for(i = 0; i < num; i++) { | ||||
| 			if(!XGetWindowAttributes(dpy, wins[i], &wa)) | ||||
| @ -168,7 +171,6 @@ main(int argc, char *argv[]) | ||||
| 	fd_set rd; | ||||
| 	Bool readin = True; | ||||
| 	Window w; | ||||
| 	XEvent ev; | ||||
| 	XModifierKeymap *modmap; | ||||
| 	XSetWindowAttributes wa; | ||||
| 
 | ||||
| @ -196,6 +198,7 @@ main(int argc, char *argv[]) | ||||
| 	if(otherwm) | ||||
| 		eprint("dwm: another window manager is already running\n"); | ||||
| 
 | ||||
| 	XSync(dpy, False); | ||||
| 	XSetErrorHandler(NULL); | ||||
| 	xerrorxlib = XSetErrorHandler(xerror); | ||||
| 	XSync(dpy, False); | ||||
| @ -268,7 +271,7 @@ main(int argc, char *argv[]) | ||||
| 
 | ||||
| 	/* main event loop, also reads status text from stdin */ | ||||
| 	XSync(dpy, False); | ||||
| 	goto XLoop; | ||||
| 	procevent(); | ||||
| 	while(running) { | ||||
| 		FD_ZERO(&rd); | ||||
| 		if(readin) | ||||
| @ -288,14 +291,8 @@ main(int argc, char *argv[]) | ||||
| 					strcpy(stext, "broken pipe"); | ||||
| 				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(); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R.Garbe
						Anselm R.Garbe