tsome more additions/fixes - dwm - [fork] customized build of dwm, the dynamic window manager
 (HTM) git clone git://src.adamsgaard.dk/dwm
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 2a0fc84c4af2257d79c4c7cb37131c4acb763162
 (DIR) parent 896f08d7d553f7def3877648c113cf03e6ca546a
 (HTM) Author: Anselm R. Garbe <garbeam@wmii.de>
       Date:   Wed, 12 Jul 2006 00:00:25 +0200
       
       some more additions/fixes
       
       Diffstat:
         M client.c                            |      13 +++++++++++--
         M cmd.c                               |      16 ++++++++++++++++
         M event.c                             |       2 +-
         M kb.c                                |       2 ++
         M wm.h                                |       2 ++
       
       5 files changed, 32 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/client.c b/client.c
       t@@ -93,6 +93,7 @@ focus(Client *c)
                }
                XUnmapWindow(dpy, c->title);
                draw_bar();
       +        discard_events(EnterWindowMask);
                XFlush(dpy);
        }
        
       t@@ -116,7 +117,7 @@ manage(Window w, XWindowAttributes *wa)
                XGetTransientForHint(dpy, c->win, &c->trans);
                twa.override_redirect = 1;
                twa.background_pixmap = ParentRelative;
       -        twa.event_mask = SubstructureNotifyMask | ExposureMask;
       +        twa.event_mask = ExposureMask;
        
                c->title = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th,
                                0, DefaultDepth(dpy, screen), CopyFromParent,
       t@@ -191,11 +192,19 @@ unmanage(Client *c)
                XFlush(dpy);
                XSetErrorHandler(error_handler);
                XUngrabServer(dpy);
       -        discard_events(EnterWindowMask);
                if(stack)
                        focus(stack);
        }
        
       +Client *
       +gettitle(Window w)
       +{
       +        Client *c;
       +        for(c = clients; c; c = c->next)
       +                if(c->title == w)
       +                        return c;
       +        return NULL;
       +}
        
        Client *
        getclient(Window w)
 (DIR) diff --git a/cmd.c b/cmd.c
       t@@ -20,6 +20,22 @@ quit(void *aux)
        }
        
        void
       +sel(void *aux)
       +{
       +        const char *arg = aux;
       +        Client *c;
       +
       +        if(!arg || !stack)
       +                return;
       +        if(!strncmp(arg, "next", 5))
       +                focus(stack->snext ? stack->snext : stack);
       +        else if(!strncmp(arg, "prev", 5)) {
       +                for(c = stack; c && c->snext; c = c->snext);
       +                focus(c ? c : stack);
       +        }
       +}
       +
       +void
        kill(void *aux)
        {
                Client *c = stack;
 (DIR) diff --git a/event.c b/event.c
       t@@ -146,7 +146,7 @@ expose(XEvent *e)
                Client *c;
        
                if(ev->count == 0) {
       -                if((c = getclient(ev->window)))
       +                if((c = gettitle(ev->window)))
                                draw_client(c);
                        else if(ev->window == barwin)
                                draw_bar();
 (DIR) diff --git a/kb.c b/kb.c
       t@@ -19,6 +19,8 @@ static const char *proglist[] = {
        static Key key[] = {
                { Mod1Mask, XK_Return, run, term },
                { Mod1Mask, XK_p, run, proglist }, 
       +        { Mod1Mask, XK_k, sel, "prev"}, 
       +        { Mod1Mask, XK_j, sel, "next"}, 
                { Mod1Mask | ShiftMask, XK_c, kill, NULL}, 
                { Mod1Mask | ShiftMask, XK_q, quit, NULL},
        };
 (DIR) diff --git a/wm.h b/wm.h
       t@@ -63,6 +63,7 @@ extern void draw_bar();
        extern void run(void *aux);
        extern void quit(void *aux);
        extern void kill(void *aux);
       +extern void sel(void *aux);
        
        /* client.c */
        extern void manage(Window w, XWindowAttributes *wa);
       t@@ -73,6 +74,7 @@ extern void update_name(Client *c);
        extern void draw_client(Client *c);
        extern void resize(Client *c);
        extern void update_size(Client *c);
       +extern Client *gettitle(Window w);
        
        /* event.c */
        extern unsigned int discard_events(long even_mask);