JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
implemented the maximization as I described on the mailinglist, this feels better...
authorarg@mmvi <unknown>
Fri, 22 Sep 2006 05:37:56 +0000 (07:37 +0200)
committerarg@mmvi <unknown>
Fri, 22 Sep 2006 05:37:56 +0000 (07:37 +0200)
client.c
config.arg.h
config.default.h
dwm.h
event.c
main.c
view.c

index 725f70b..2f1e2b3 100644 (file)
--- 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);
@@ -370,41 +372,6 @@ updatetitle(Client *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;
 
index 9bb581e..6f9aed2 100644 (file)
@@ -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 } }, \
index ad048ae..9c67d98 100644 (file)
@@ -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 (file)
--- 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 (file)
--- 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 (file)
--- 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 (file)
--- 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))