From d800ec05ff63451193a0b858c114f5144534c2a1 Mon Sep 17 00:00:00 2001 From: "arg@mmvi" Date: Fri, 22 Sep 2006 07:37:56 +0200 Subject: implemented the maximization as I described on the mailinglist, this feels better to me. --- client.c | 41 ++++------------------------------------- config.arg.h | 1 - config.default.h | 1 - dwm.h | 4 ++-- event.c | 4 ++-- main.c | 1 - view.c | 23 +++++++++++++++++------ 7 files changed, 25 insertions(+), 50 deletions(-) diff --git a/client.c b/client.c index 725f70b..2f1e2b3 100644 --- a/client.c +++ b/client.c @@ -89,8 +89,6 @@ focus(Client *c) { if(!sel) sel = c; else if(sel != c) { - if(maximized) - togglemax(NULL); old = sel; sel = c; if(old) { @@ -208,6 +206,10 @@ manage(Window w, XWindowAttributes *wa) { 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); @@ -369,41 +371,6 @@ updatetitle(Client *c) { 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 unmanage(Client *c) { Client *nc; diff --git a/config.arg.h b/config.arg.h index 9bb581e..6f9aed2 100644 --- a/config.arg.h +++ b/config.arg.h @@ -33,7 +33,6 @@ static Key key[] = { \ { 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 --git a/config.default.h b/config.default.h index ad048ae..9c67d98 100644 --- a/config.default.h +++ b/config.default.h @@ -28,7 +28,6 @@ static Key key[] = { \ { 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 --git a/dwm.h b/dwm.h index c08388f..60f9201 100644 --- a/dwm.h +++ b/dwm.h @@ -78,6 +78,7 @@ struct Client { 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 */ diff --git a/event.c b/event.c index 3783eb4..d5f4aa8 100644 --- a/event.c +++ b/event.c @@ -130,7 +130,7 @@ buttonpress(XEvent *e) { } 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 @@ configurerequest(XEvent *e) { 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 --git a/main.c b/main.c index c6e67e9..b3c753e 100644 --- a/main.c +++ b/main.c @@ -24,7 +24,6 @@ unsigned int ntags, numlockmask; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool issel = True; -Bool maximized = False; Client *clients = NULL; Client *sel = NULL; Client *stack = NULL; diff --git a/view.c b/view.c index 80d483a..fce7309 100644 --- a/view.c +++ b/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); @@ -82,8 +80,6 @@ dotile(Arg *arg) { 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 @@ resizecol(Arg *arg) { 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 @@ viewall(Arg *arg) { 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)) -- cgit v1.2.3-70-g09d2