Introduction
Introduction Statistics Contact Development Disclaimer Help
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))
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.