]> git.armaanb.net Git - dwm.git/commitdiff
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 725f70bd5d07dc8879af37053845f964c4b22c8b..2f1e2b3b391e21c9f9d1f449d15dddcd41b41ed0 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);
@@ -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;
index 9bb581e89400fac3fa6d897d29c6cbf51f3995e4..6f9aed265a32932b6c408c4199af151f204466eb 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 ad048ae58c906338bdde71d4d942f0685be465b6..9c67d98e17af1574caf262f15882a6af7d3b602c 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 c08388f5eb09e6c2dbbdfdbb311b8b5eeeb51121..60f9201ec18fb8dd1c725a993a5c5dd8612d8bb1 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 3783eb45e98e08c41b8619b829d6b5444ab1f044..d5f4aa8622dd428e2a65ad2a47ee5b8f5c8eb6e9 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 c6e67e9c72d7e5f97ff9efd317de906acdb7f4ed..b3c753e97e45f89777a3a6e5f75cc17728086a2b 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 80d483ae4392e8c921f826e2c7a724ff55fab02f..fce7309dc49e75631bb74c393b9381cca7b44e4f 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))