implemented the maximization as I described on the mailinglist, this feels better to me.
arg@mmvi unknown
Fri, 22 Sep 2006 07:37:56 +0200
7 files changed,
25 insertions(+),
50 deletions(-)
M
client.c
→
client.c
@@ -89,8 +89,6 @@ return;
if(!sel) sel = c; else if(sel != c) { - if(maximized) - togglemax(NULL); old = sel; sel = c; if(old) {@@ -208,6 +206,10 @@ c->y = c->ty = wa->y;
c->w = c->tw = wa->width; c->h = wa->height; c->th = bh; + c->rx = sx; + c->ry = bh; + c->rw = sw; + c->rh = sh - bh; c->border = 0; updatesize(c);@@ -367,41 +369,6 @@ }
} XFree(name.value); resizetitle(c); -} - -void -togglemax(Arg *arg) { - int ox, oy, ow, oh; - Client *c; - XEvent ev; - - if(!sel) - return; - - if((maximized = !maximized)) { - ox = sel->x; - oy = sel->y; - ow = sel->w; - oh = sel->h; - sel->x = sx; - sel->y = sy + bh; - sel->w = sw - 2; - 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; - sel->y = oy; - sel->w = ow; - sel->h = oh; - } - else - arrange(NULL); - while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } void
M
config.arg.h
→
config.arg.h
@@ -33,7 +33,6 @@ "done | sort -u | dmenu)\" && exec $exe" } }, \
{ MODKEY, XK_j, focusnext, { 0 } }, \ { MODKEY, XK_k, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ - { MODKEY, XK_m, togglemax, { 0 } }, \ { MODKEY, XK_g, resizecol, { .i = 20 } }, \ { MODKEY, XK_s, resizecol, { .i = -20 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \
M
config.default.h
→
config.default.h
@@ -28,7 +28,6 @@ { MODKEY|ShiftMask, XK_Return, spawn, { .cmd = "exec xterm" } }, \
{ MODKEY, XK_Tab, focusnext, { 0 } }, \ { MODKEY|ShiftMask, XK_Tab, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ - { MODKEY, XK_m, togglemax, { 0 } }, \ { MODKEY, XK_g, resizecol, { .i = 20 } }, \ { MODKEY, XK_s, resizecol, { .i = -20 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \
M
dwm.h
→
dwm.h
@@ -78,6 +78,7 @@ char name[256];
int proto; int x, y, w, h; int tx, ty, tw, th; /* title window geometry */ + int rx, ry, rw, rh; /* revert geometry */ int basew, baseh, incw, inch, maxw, maxh, minw, minh; int grav; long flags;@@ -99,7 +100,7 @@ extern unsigned int ntags, numlockmask; /* number of tags, dynamic lock mask */
extern void (*handler[LASTEvent])(XEvent *); /* event handler */ extern void (*arrange)(Arg *); /* arrange function, indicates mode */ extern Atom wmatom[WMLast], netatom[NetLast]; -extern Bool running, issel, maximized, *seltag; /* seltag is array of Bool */ +extern Bool running, issel, *seltag; /* seltag is array of Bool */ extern Client *clients, *sel, *stack; /* global cleint list and stack */ extern Cursor cursor[CurLast]; extern DC dc; /* global draw context */@@ -117,7 +118,6 @@ extern void manage(Window w, XWindowAttributes *wa); /* manage new client */
extern void resize(Client *c, Bool sizehints, Corner sticky); /* resize c*/ extern void updatesize(Client *c); /* update the size structs of c */ extern void updatetitle(Client *c); /* update the name of c */ -extern void togglemax(Arg *arg); /* (un)maximize c */ extern void unmanage(Client *c); /* destroy c */ /* draw.c */
M
event.c
→
event.c
@@ -130,7 +130,7 @@ }
} else if((c = getclient(ev->window))) { focus(c); - if(maximized || CLEANMASK(ev->state) != MODKEY) + if(CLEANMASK(ev->state) != MODKEY) return; if(ev->button == Button1 && (arrange == dofloat || c->isfloat)) { restack(c);@@ -170,7 +170,7 @@ XConfigureRequestEvent *ev = &e->xconfigurerequest;
XWindowChanges wc; if((c = getclient(ev->window))) { - if((c == sel) && !c->isfloat && (arrange != dofloat) && maximized) { + if((c == sel) && !c->isfloat && (arrange != dofloat)) { synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width); XSync(dpy, False); return;
M
view.c
→
view.c
@@ -61,8 +61,6 @@ void
dofloat(Arg *arg) { Client *c; - maximized = False; - for(c = clients; c; c = c->next) { if(isvisible(c)) { resize(c, True, TopLeft);@@ -81,8 +79,6 @@ void
dotile(Arg *arg) { int h, i, n, w; Client *c; - - maximized = False; w = sw - mw; for(n = 0, c = clients; c; c = c->next)@@ -190,7 +186,7 @@
for(n = 0, c = clients; c; c = c->next) if(isvisible(c) && !c->isfloat) n++; - if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) + if(!sel || sel->isfloat || n < 2 || (arrange != dotile)) return; if(sel == getnext(clients)) {@@ -273,13 +269,28 @@ }
void zoom(Arg *arg) { + int tmp; unsigned int n; Client *c; + XEvent ev; + + if(!sel) + return; + + if(sel->isfloat || (arrange == dofloat)) { + tmp = sel->x; sel->x = sel->rx; sel->rx = tmp; + tmp = sel->y; sel->y = sel->ry; sel->ry = tmp; + tmp = sel->w; sel->w = sel->rw; sel->rw = tmp; + tmp = sel->h; sel->h = sel->rh; sel->rh = tmp; + resize(sel, True, TopLeft); + while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); + return; + } for(n = 0, c = clients; c; c = c->next) if(isvisible(c) && !c->isfloat) n++; - if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) + if(n < 2 || (arrange != dotile)) return; if((c = sel) == nexttiled(clients))