dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit b6ad663f87b195b1494798030f826cb2fbc71a23
parent ee31e38dc75832a66cb0fc01bcf2f419ac96a20b
Author: Anselm R.Garbe <arg@10ksloc.org>
Date:   Tue, 15 Aug 2006 07:31:42 +0200

changed main event loop

Diffstat:
Mdwm.h | 1+
Mevent.c | 13+++++++++++++
Mmain.c | 17+++++++----------
3 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/dwm.h b/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);
diff --git a/event.c b/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 */
+    }
+}
+
diff --git a/main.c b/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();