URI: 
       changed main event loop - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit b6ad663f87b195b1494798030f826cb2fbc71a23
   DIR parent ee31e38dc75832a66cb0fc01bcf2f419ac96a20b
  HTML Author: Anselm R.Garbe <arg@10ksloc.org>
       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(-)
       ---
   DIR 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);
   DIR 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 */
       +        }
       +}
       +
   DIR 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();