diff options
| author | Anselm R.Garbe <arg@10ksloc.org> | 2006-08-15 07:31:42 +0200 | 
|---|---|---|
| committer | Anselm R.Garbe <arg@10ksloc.org> | 2006-08-15 07:31:42 +0200 | 
| commit | b6ad663f87b195b1494798030f826cb2fbc71a23 (patch) | |
| tree | ff6cc4878eba5d2abaf0f10d318effd99acb16ce | |
| parent | ee31e38dc75832a66cb0fc01bcf2f419ac96a20b (diff) | |
changed main event loop
| -rw-r--r-- | dwm.h | 1 | ||||
| -rw-r--r-- | event.c | 13 | ||||
| -rw-r--r-- | main.c | 17 | 
3 files changed, 21 insertions, 10 deletions
| @@ -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); @@ -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 */ +	} +} + @@ -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(); | 
