dwm-meillo

diff main.c @ 292:4aa632b6ba66

changed main event loop
author Anselm R.Garbe <arg@10ksloc.org>
date Tue, 15 Aug 2006 07:31:42 +0200
parents 8e6e0aa5e2ae
children 093744cc5353
line diff
     1.1 --- a/main.c	Mon Aug 14 19:18:02 2006 +0200
     1.2 +++ b/main.c	Tue Aug 15 07:31:42 2006 +0200
     1.3 @@ -27,7 +27,9 @@
     1.4  		resize(sel, True, TopLeft);
     1.5  		unmanage(sel);
     1.6  	}
     1.7 +	XUngrabKey(dpy, AnyKey, AnyModifier, root);
     1.8  	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
     1.9 +	XSync(dpy, False);
    1.10  }
    1.11  
    1.12  static void
    1.13 @@ -37,6 +39,7 @@
    1.14  	Window *wins, d1, d2;
    1.15  	XWindowAttributes wa;
    1.16  
    1.17 +	wins = NULL;
    1.18  	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
    1.19  		for(i = 0; i < num; i++) {
    1.20  			if(!XGetWindowAttributes(dpy, wins[i], &wa))
    1.21 @@ -168,7 +171,6 @@
    1.22  	fd_set rd;
    1.23  	Bool readin = True;
    1.24  	Window w;
    1.25 -	XEvent ev;
    1.26  	XModifierKeymap *modmap;
    1.27  	XSetWindowAttributes wa;
    1.28  
    1.29 @@ -196,6 +198,7 @@
    1.30  	if(otherwm)
    1.31  		eprint("dwm: another window manager is already running\n");
    1.32  
    1.33 +	XSync(dpy, False);
    1.34  	XSetErrorHandler(NULL);
    1.35  	xerrorxlib = XSetErrorHandler(xerror);
    1.36  	XSync(dpy, False);
    1.37 @@ -268,7 +271,7 @@
    1.38  
    1.39  	/* main event loop, also reads status text from stdin */
    1.40  	XSync(dpy, False);
    1.41 -	goto XLoop;
    1.42 +	procevent();
    1.43  	while(running) {
    1.44  		FD_ZERO(&rd);
    1.45  		if(readin)
    1.46 @@ -288,14 +291,8 @@
    1.47  					strcpy(stext, "broken pipe");
    1.48  				drawstatus();
    1.49  			}
    1.50 -			if(FD_ISSET(xfd, &rd)) {
    1.51 -XLoop:
    1.52 -				while(XPending(dpy)) {
    1.53 -					XNextEvent(dpy, &ev);
    1.54 -					if(handler[ev.type])
    1.55 -						(handler[ev.type])(&ev); /* call handler */
    1.56 -				}
    1.57 -			}
    1.58 +			if(FD_ISSET(xfd, &rd))
    1.59 +				procevent();
    1.60  		}
    1.61  	}
    1.62  	cleanup();