tapplied Sanders max_and_focus.patch - dwm - [fork] customized build of dwm, th… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 26157e6973f240a9b5ee407b9d2d5eca9358844f | |
parent 6d22782e8f991a99f9adef56b2b729e5ab5454d2 | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Mon, 4 Sep 2006 08:55:49 +0200 | |
applied Sanders max_and_focus.patch | |
Diffstat: | |
M client.c | 50 ++++++++++++++++++-----------… | |
M dwm.h | 3 +-- | |
M event.c | 8 ++++---- | |
M main.c | 1 + | |
M view.c | 30 +++++++++++++----------------- | |
5 files changed, 48 insertions(+), 44 deletions(-) | |
--- | |
diff --git a/client.c b/client.c | |
t@@ -82,22 +82,29 @@ ban(Client *c) | |
void | |
focus(Client *c) | |
{ | |
- Client *old = sel; | |
+ Client *old; | |
if(!issel) | |
return; | |
if(!sel) | |
sel = c; | |
else if(sel != c) { | |
- if(sel->ismax) | |
+ if(maximized) | |
togglemax(NULL); | |
+ old = sel; | |
sel = c; | |
- grabbuttons(old, False); | |
- drawtitle(old); | |
+ if(old) { | |
+ grabbuttons(old, False); | |
+ drawtitle(old); | |
+ } | |
+ } | |
+ if(c) { | |
+ grabbuttons(c, True); | |
+ drawtitle(c); | |
+ XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | |
} | |
- grabbuttons(c, True); | |
- drawtitle(c); | |
- XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | |
+ else | |
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | |
} | |
Client * | |
t@@ -247,8 +254,6 @@ manage(Window w, XWindowAttributes *wa) | |
clients = c; | |
settitle(c); | |
- if(isvisible(c)) | |
- sel = c; | |
arrange(NULL); | |
XMapWindow(dpy, c->win); | |
XMapWindow(dpy, c->twin); | |
t@@ -366,12 +371,13 @@ void | |
togglemax(Arg *arg) | |
{ | |
int ox, oy, ow, oh; | |
+ Client *c; | |
XEvent ev; | |
if(!sel) | |
return; | |
- if((sel->ismax = !sel->ismax)) { | |
+ if((maximized = !maximized)) { | |
ox = sel->x; | |
oy = sel->y; | |
ow = sel->w; | |
t@@ -382,6 +388,9 @@ togglemax(Arg *arg) | |
sel->h = sh - 2 - bh; | |
restack(); | |
+ for(c = getnext(clients); c; c = getnext(c->next)) | |
+ if(c != sel) | |
+ ban(c); | |
resize(sel, arrange == dofloat, TopLeft); | |
sel->x = ox; | |
t@@ -390,37 +399,36 @@ togglemax(Arg *arg) | |
sel->h = oh; | |
} | |
else | |
- resize(sel, False, TopLeft); | |
+ arrange(NULL); | |
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
} | |
void | |
unmanage(Client *c) | |
{ | |
- Client *tc; | |
+ Client *tc, *fc; | |
Window trans; | |
XGrabServer(dpy); | |
XSetErrorHandler(xerrordummy); | |
- XGetTransientForHint(dpy, c->win, &trans); | |
- | |
- XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | |
- XDestroyWindow(dpy, c->twin); | |
- | |
detach(c); | |
if(sel == c) { | |
+ XGetTransientForHint(dpy, c->win, &trans); | |
if(trans && (tc = getclient(trans)) && isvisible(tc)) | |
- sel = tc; | |
+ fc = tc; | |
else | |
- sel = getnext(clients); | |
+ fc = getnext(clients); | |
+ focus(fc); | |
} | |
+ | |
+ XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | |
+ XDestroyWindow(dpy, c->twin); | |
+ | |
free(c->tags); | |
free(c); | |
XSync(dpy, False); | |
XSetErrorHandler(xerror); | |
XUngrabServer(dpy); | |
- if(sel) | |
- focus(sel); | |
arrange(NULL); | |
} | |
diff --git a/dwm.h b/dwm.h | |
t@@ -58,7 +58,6 @@ struct Client { | |
long flags; | |
unsigned int border, weight; | |
Bool isfloat; | |
- Bool ismax; | |
Bool *tags; | |
Client *next; | |
Client *prev; | |
t@@ -73,7 +72,7 @@ extern unsigned int ntags, numlockmask; | |
extern void (*handler[LASTEvent])(XEvent *); | |
extern void (*arrange)(Arg *); | |
extern Atom wmatom[WMLast], netatom[NetLast]; | |
-extern Bool running, issel, *seltag; | |
+extern Bool running, issel, maximized, *seltag; | |
extern Client *clients, *sel; | |
extern Cursor cursor[CurLast]; | |
extern DC dc; | |
diff --git a/event.c b/event.c | |
t@@ -131,15 +131,15 @@ buttonpress(XEvent *e) | |
} | |
else if((c = getclient(ev->window))) { | |
focus(c); | |
- if(c->ismax || CLEANMASK(ev->state) != MODKEY) | |
+ if(maximized || CLEANMASK(ev->state) != MODKEY) | |
return; | |
- if((ev->button == Button1) && ((arrange == dofloat) || c->isfl… | |
+ if(ev->button == Button1 && (arrange == dofloat || c->isfloat)… | |
restack(c); | |
movemouse(c); | |
} | |
else if(ev->button == Button2) | |
zoom(NULL); | |
- else if(ev->button == Button3 && ((arrange == dofloat) || c->i… | |
+ else if(ev->button == Button3 && (arrange == dofloat || c->isf… | |
restack(c); | |
resizemouse(c); | |
} | |
t@@ -173,7 +173,7 @@ configurerequest(XEvent *e) | |
XWindowChanges wc; | |
if((c = getclient(ev->window))) { | |
- if(!c->isfloat && (arrange != dofloat) && c->ismax) { | |
+ if((c == sel) && !c->isfloat && (arrange != dofloat) && maximi… | |
synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->bor… | |
XSync(dpy, False); | |
return; | |
diff --git a/main.c b/main.c | |
t@@ -24,6 +24,7 @@ unsigned int ntags, numlockmask; | |
Atom wmatom[WMLast], netatom[NetLast]; | |
Bool running = True; | |
Bool issel = True; | |
+Bool maximized = False; | |
Client *clients = NULL; | |
Client *sel = NULL; | |
Cursor cursor[CurLast]; | |
diff --git a/view.c b/view.c | |
t@@ -57,22 +57,20 @@ detach(Client *c) | |
void | |
dofloat(Arg *arg) | |
{ | |
- Client *c; | |
+ Client *c, *fc; | |
+ | |
+ maximized = False; | |
for(c = clients; c; c = c->next) { | |
- c->ismax = False; | |
if(isvisible(c)) { | |
resize(c, True, TopLeft); | |
} | |
else | |
ban(c); | |
} | |
- if(!sel || !isvisible(sel)) | |
- sel = getnext(clients); | |
- if(sel) | |
- focus(sel); | |
- else | |
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | |
+ if(!(fc = sel) || !isvisible(fc)) | |
+ fc = getnext(clients); | |
+ focus(fc); | |
restack(); | |
} | |
t@@ -80,7 +78,9 @@ void | |
dotile(Arg *arg) | |
{ | |
int h, i, n, w; | |
- Client *c; | |
+ Client *c, *fc; | |
+ | |
+ maximized = False; | |
w = sw - mw; | |
for(n = 0, c = clients; c; c = c->next) | |
t@@ -93,7 +93,6 @@ dotile(Arg *arg) | |
h = sh - bh; | |
for(i = 0, c = clients; c; c = c->next) { | |
- c->ismax = False; | |
if(isvisible(c)) { | |
if(c->isfloat) { | |
resize(c, True, TopLeft); | |
t@@ -132,12 +131,9 @@ dotile(Arg *arg) | |
else | |
ban(c); | |
} | |
- if(!sel || !isvisible(sel)) | |
- sel = getnext(clients); | |
- if(sel) | |
- focus(sel); | |
- else | |
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | |
+ if(!(fc = sel) || !isvisible(fc)) | |
+ fc = getnext(clients); | |
+ focus(fc); | |
restack(); | |
} | |
t@@ -289,7 +285,7 @@ zoom(Arg *arg) | |
{ | |
Client *c = sel; | |
- if(!c || (arrange != dotile) || c->isfloat || c->ismax) | |
+ if(!c || (arrange != dotile) || c->isfloat || maximized) | |
return; | |
if(c == getnext(clients)) |