tapplied sanders focus_ patches - dwm - [fork] customized build of dwm, the dyn… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 0a25fe91888f30a382ca0cfb492283ce9aa3296c | |
parent 2dd5212a795b27422d601df0566ae0d6644bd4c8 | |
Author: Anselm R. Garbe <[email protected]> | |
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(-) | |
--- | |
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, BUTTONMAS… | |
- GrabModeAsync, GrabModeSync, None, None); | |
- XGrabButton(dpy, button, modifier | numlockmask, c->win, False, BUTTON… | |
- GrabModeAsync, GrabModeSync, None, None); | |
- XGrabButton(dpy, button, modifier | numlockmask | LockMask, c->win, Fa… | |
- 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, BU… | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ XGrabButton(dpy, Button1, MODKEY | numlockmask, c->win, False,… | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ XGrabButton(dpy, Button1, MODKEY | numlockmask | LockMask, c->… | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ | |
+ XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK, | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BU… | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ XGrabButton(dpy, Button2, MODKEY | numlockmask, c->win, False,… | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ XGrabButton(dpy, Button2, MODKEY | numlockmask | LockMask, c->… | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ | |
+ XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK, | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BU… | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False,… | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->… | |
+ GrabModeAsync, GrabModeSync, None, None); | |
+ } | |
+ else | |
+ XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, BUTTON… | |
+ 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); | |
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: |