tchanged main event loop - dwm - [fork] customized build of dwm, the dynamic wi… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit b6ad663f87b195b1494798030f826cb2fbc71a23 | |
parent ee31e38dc75832a66cb0fc01bcf2f419ac96a20b | |
Author: Anselm R.Garbe <[email protected]> | |
Date: Tue, 15 Aug 2006 07:31:42 +0200 | |
changed main event loop | |
Diffstat: | |
M dwm.h | 1 + | |
M event.c | 13 +++++++++++++ | |
M main.c | 17 +++++++---------- | |
3 files changed, 21 insertions(+), 10 deletions(-) | |
--- | |
diff --git a/dwm.h b/dwm.h | |
t@@ -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); | |
diff --git a/event.c b/event.c | |
t@@ -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 */ | |
+ } | |
+} | |
+ | |
diff --git a/main.c b/main.c | |
t@@ -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 | |
t@@ -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)) | |
t@@ -168,7 +171,6 @@ main(int argc, char *argv[]) | |
fd_set rd; | |
Bool readin = True; | |
Window w; | |
- XEvent ev; | |
XModifierKeymap *modmap; | |
XSetWindowAttributes wa; | |
t@@ -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); | |
t@@ -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) | |
t@@ -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); /* ca… | |
- } | |
- } | |
+ if(FD_ISSET(xfd, &rd)) | |
+ procevent(); | |
} | |
} | |
cleanup(); |