aewl
changeset 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 |
files | dwm.h event.c main.c |
diffstat | 3 files changed, 21 insertions(+), 10 deletions(-) [+] |
line diff
1.1 --- a/dwm.h Mon Aug 14 19:18:02 2006 +0200 1.2 +++ b/dwm.h Tue Aug 15 07:31:42 2006 +0200 1.3 @@ -108,6 +108,7 @@ 1.4 1.5 /* event.c */ 1.6 extern void grabkeys(); 1.7 +extern void procevent(); 1.8 1.9 /* main.c */ 1.10 extern int getproto(Window w);
2.1 --- a/event.c Mon Aug 14 19:18:02 2006 +0200 2.2 +++ b/event.c Tue Aug 15 07:31:42 2006 +0200 2.3 @@ -384,3 +384,16 @@ 2.4 GrabModeAsync, GrabModeAsync); 2.5 } 2.6 } 2.7 + 2.8 +void 2.9 +procevent() 2.10 +{ 2.11 + XEvent ev; 2.12 + 2.13 + while(XPending(dpy)) { 2.14 + XNextEvent(dpy, &ev); 2.15 + if(handler[ev.type]) 2.16 + (handler[ev.type])(&ev); /* call handler */ 2.17 + } 2.18 +} 2.19 +
3.1 --- a/main.c Mon Aug 14 19:18:02 2006 +0200 3.2 +++ b/main.c Tue Aug 15 07:31:42 2006 +0200 3.3 @@ -27,7 +27,9 @@ 3.4 resize(sel, True, TopLeft); 3.5 unmanage(sel); 3.6 } 3.7 + XUngrabKey(dpy, AnyKey, AnyModifier, root); 3.8 XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); 3.9 + XSync(dpy, False); 3.10 } 3.11 3.12 static void 3.13 @@ -37,6 +39,7 @@ 3.14 Window *wins, d1, d2; 3.15 XWindowAttributes wa; 3.16 3.17 + wins = NULL; 3.18 if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { 3.19 for(i = 0; i < num; i++) { 3.20 if(!XGetWindowAttributes(dpy, wins[i], &wa)) 3.21 @@ -168,7 +171,6 @@ 3.22 fd_set rd; 3.23 Bool readin = True; 3.24 Window w; 3.25 - XEvent ev; 3.26 XModifierKeymap *modmap; 3.27 XSetWindowAttributes wa; 3.28 3.29 @@ -196,6 +198,7 @@ 3.30 if(otherwm) 3.31 eprint("dwm: another window manager is already running\n"); 3.32 3.33 + XSync(dpy, False); 3.34 XSetErrorHandler(NULL); 3.35 xerrorxlib = XSetErrorHandler(xerror); 3.36 XSync(dpy, False); 3.37 @@ -268,7 +271,7 @@ 3.38 3.39 /* main event loop, also reads status text from stdin */ 3.40 XSync(dpy, False); 3.41 - goto XLoop; 3.42 + procevent(); 3.43 while(running) { 3.44 FD_ZERO(&rd); 3.45 if(readin) 3.46 @@ -288,14 +291,8 @@ 3.47 strcpy(stext, "broken pipe"); 3.48 drawstatus(); 3.49 } 3.50 - if(FD_ISSET(xfd, &rd)) { 3.51 -XLoop: 3.52 - while(XPending(dpy)) { 3.53 - XNextEvent(dpy, &ev); 3.54 - if(handler[ev.type]) 3.55 - (handler[ev.type])(&ev); /* call handler */ 3.56 - } 3.57 - } 3.58 + if(FD_ISSET(xfd, &rd)) 3.59 + procevent(); 3.60 } 3.61 } 3.62 cleanup();