tapplied sanders focus_ patches - 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 0a25fe91888f30a382ca0cfb492283ce9aa3296c
 (DIR) parent 2dd5212a795b27422d601df0566ae0d6644bd4c8
 (HTM) Author: Anselm R. Garbe <arg@10kloc.org>
       Date:   Mon, 28 Aug 2006 08:06:50 +0200
       
       applied sanders focus_ patches
       Diffstat:
         M client.c                            |      73 ++++++++++++++++++++-----------
         M event.c                             |       2 +-
       
       2 files changed, 49 insertions(+), 26 deletions(-)
       ---
 (DIR) diff --git a/client.c b/client.c
       t@@ -11,16 +11,42 @@
        /* static functions */
        
        static void
       -grabbutton(Client *c, unsigned int button, unsigned int modifier)
       +grabbuttons(Client *c, Bool focus)
        {
       -        XGrabButton(dpy, button, modifier, c->win, False, BUTTONMASK,
       -                        GrabModeAsync, GrabModeSync, None, None);
       -        XGrabButton(dpy, button, modifier | LockMask, c->win, False, BUTTONMASK,
       -                        GrabModeAsync, GrabModeSync, None, None);
       -        XGrabButton(dpy, button, modifier | numlockmask, c->win, False, BUTTONMASK,
       -                        GrabModeAsync, GrabModeSync, None, None);
       -        XGrabButton(dpy, button, modifier | numlockmask | LockMask, c->win, False, BUTTONMASK,
       -                        GrabModeAsync, GrabModeSync, None, None);
       +        XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
       +
       +        if(focus) {
       +                XGrabButton(dpy, Button1, MODKEY, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +                XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +                XGrabButton(dpy, Button1, MODKEY | numlockmask, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +                XGrabButton(dpy, Button1, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +
       +                XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +                XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +                XGrabButton(dpy, Button2, MODKEY | numlockmask, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +                XGrabButton(dpy, Button2, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +
       +                XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +                XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +                XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +                XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +        }
       +        else
       +                XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, BUTTONMASK,
       +                                GrabModeAsync, GrabModeSync, None, None);
       +
        }
        
        static void
       t@@ -40,15 +66,6 @@ resizetitle(Client *c)
        
        }
        
       -static void
       -ungrabbutton(Client *c, unsigned int button, unsigned int modifier)
       -{
       -        XUngrabButton(dpy, button, modifier, c->win);
       -        XUngrabButton(dpy, button, modifier | LockMask, c->win);
       -        XUngrabButton(dpy, button, modifier | numlockmask, c->win);
       -        XUngrabButton(dpy, button, modifier | numlockmask | LockMask, c->win);
       -}
       -
        static int
        xerrordummy(Display *dsply, XErrorEvent *ee)
        {
       t@@ -77,10 +94,10 @@ focus(Client *c)
                        if(sel->ismax)
                                togglemax(NULL);
                        sel = c;
       -                grabbutton(old, AnyButton, 0);
       +                grabbuttons(old, False);
                        drawtitle(old);
                }
       -        ungrabbutton(c, AnyButton, 0);
       +        grabbuttons(c, True);
                drawtitle(c);
                XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
        }
       t@@ -220,9 +237,7 @@ manage(Window w, XWindowAttributes *wa)
                c->next = clients;
                clients = c;
        
       -        grabbutton(c, Button1, MODKEY);
       -        grabbutton(c, Button2, MODKEY);
       -        grabbutton(c, Button3, MODKEY);
       +        grabbuttons(c, False);
        
                if((tc = getclient(trans))) /* inherit tags */
                        for(i = 0; i < ntags; i++)
       t@@ -384,9 +399,13 @@ togglemax(Arg *arg)
        void
        unmanage(Client *c)
        {
       +        Client *tc;
       +        Window trans;
                XGrabServer(dpy);
                XSetErrorHandler(xerrordummy);
        
       +        XGetTransientForHint(dpy, c->win, &trans);
       +
                XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
                XDestroyWindow(dpy, c->twin);
        
       t@@ -396,8 +415,12 @@ unmanage(Client *c)
                        c->next->prev = c->prev;
                if(c == clients)
                        clients = c->next;
       -        if(sel == c)
       -                sel = getnext(clients);
       +        if(sel == c) {
       +                if(trans && (tc = getclient(trans)) && isvisible(tc))
       +                        sel = tc;
       +                else
       +                        sel = getnext(clients);
       +        }
                free(c->tags);
                free(c);
        
 (DIR) diff --git a/event.c b/event.c
       t@@ -123,7 +123,7 @@ buttonpress(XEvent *e)
                }
                else if((c = getclient(ev->window))) {
                        focus(c);
       -                if(CLEANMASK(ev->state) == 0)
       +                if(CLEANMASK(ev->state) != MODKEY)
                                return;
                        switch(ev->button) {
                        default: