# HG changeset patch # User arg@mmvi # Date 1158903476 -7200 # Node ID 2d8af0d7920dc3a878ced19e6bca1b1adeb2fb79 # Parent 298be2d65d2e9cdf5f67472d0087c421e1e6c6c4 implemented the maximization as I described on the mailinglist, this feels better to me. diff -r 298be2d65d2e -r 2d8af0d7920d client.c --- a/client.c Wed Sep 20 09:53:21 2006 +0200 +++ b/client.c Fri Sep 22 07:37:56 2006 +0200 @@ -89,8 +89,6 @@ if(!sel) sel = c; else if(sel != c) { - if(maximized) - togglemax(NULL); old = sel; sel = c; if(old) { @@ -208,6 +206,10 @@ 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); @@ -370,41 +372,6 @@ } 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 unmanage(Client *c) { Client *nc; diff -r 298be2d65d2e -r 2d8af0d7920d config.arg.h --- a/config.arg.h Wed Sep 20 09:53:21 2006 +0200 +++ b/config.arg.h Fri Sep 22 07:37:56 2006 +0200 @@ -33,7 +33,6 @@ { 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 } }, \ diff -r 298be2d65d2e -r 2d8af0d7920d config.default.h --- a/config.default.h Wed Sep 20 09:53:21 2006 +0200 +++ b/config.default.h Fri Sep 22 07:37:56 2006 +0200 @@ -28,7 +28,6 @@ { 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 } }, \ diff -r 298be2d65d2e -r 2d8af0d7920d dwm.h --- a/dwm.h Wed Sep 20 09:53:21 2006 +0200 +++ b/dwm.h Fri Sep 22 07:37:56 2006 +0200 @@ -78,6 +78,7 @@ 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 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 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 */ diff -r 298be2d65d2e -r 2d8af0d7920d event.c --- a/event.c Wed Sep 20 09:53:21 2006 +0200 +++ b/event.c Fri Sep 22 07:37:56 2006 +0200 @@ -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 @@ 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; diff -r 298be2d65d2e -r 2d8af0d7920d main.c --- a/main.c Wed Sep 20 09:53:21 2006 +0200 +++ b/main.c Fri Sep 22 07:37:56 2006 +0200 @@ -24,7 +24,6 @@ Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool issel = True; -Bool maximized = False; Client *clients = NULL; Client *sel = NULL; Client *stack = NULL; diff -r 298be2d65d2e -r 2d8af0d7920d view.c --- a/view.c Wed Sep 20 09:53:21 2006 +0200 +++ b/view.c Fri Sep 22 07:37:56 2006 +0200 @@ -61,8 +61,6 @@ dofloat(Arg *arg) { Client *c; - maximized = False; - for(c = clients; c; c = c->next) { if(isvisible(c)) { resize(c, True, TopLeft); @@ -82,8 +80,6 @@ int h, i, n, w; Client *c; - maximized = False; - w = sw - mw; for(n = 0, c = clients; c; c = c->next) if(isvisible(c) && !c->isfloat) @@ -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))