diff options
author | Anselm R. Garbe <arg@10kloc.org> | 2006-08-28 08:06:50 +0200 |
---|---|---|
committer | Anselm R. Garbe <arg@10kloc.org> | 2006-08-28 08:06:50 +0200 |
commit | 0a25fe91888f30a382ca0cfb492283ce9aa3296c (patch) | |
tree | 695d8ff6434b1d742fdf5be2327632e8c02328b8 /client.c | |
parent | 2dd5212a795b27422d601df0566ae0d6644bd4c8 (diff) | |
download | dwm-0a25fe91888f30a382ca0cfb492283ce9aa3296c.tar.gz |
applied sanders focus_ patches
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 73 |
1 files changed, 48 insertions, 25 deletions
diff --git a/client.c b/client.c index c18d88b..e8fe150 100644 --- a/client.c +++ b/client.c @@ -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 @@ -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) { @@ -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); } @@ -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++) @@ -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); @@ -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); |