dwm-savefloats-20181212-b69c870.diff (1342B)
1 diff --git i/dwm.c w/dwm.c 2 index 4465af1..96b0b26 100644 3 --- i/dwm.c 4 +++ w/dwm.c 5 @@ -88,6 +88,7 @@ struct Client { 6 char name[256]; 7 float mina, maxa; 8 int x, y, w, h; 9 + int sfx, sfy, sfw, sfh; /* stored float geometry, used on mode revert */ 10 int oldx, oldy, oldw, oldh; 11 int basew, baseh, incw, inch, maxw, maxh, minw, minh; 12 int bw, oldbw; 13 @@ -1056,6 +1057,10 @@ manage(Window w, XWindowAttributes *wa) 14 updatewindowtype(c); 15 updatesizehints(c); 16 updatewmhints(c); 17 + c->sfx = c->x; 18 + c->sfy = c->y; 19 + c->sfw = c->w; 20 + c->sfh = c->h; 21 XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); 22 grabbuttons(c, 0); 23 if (!c->isfloating) 24 @@ -1714,8 +1719,16 @@ togglefloating(const Arg *arg) 25 return; 26 selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; 27 if (selmon->sel->isfloating) 28 - resize(selmon->sel, selmon->sel->x, selmon->sel->y, 29 - selmon->sel->w, selmon->sel->h, 0); 30 + /* restore last known float dimensions */ 31 + resize(selmon->sel, selmon->sel->sfx, selmon->sel->sfy, 32 + selmon->sel->sfw, selmon->sel->sfh, False); 33 + else { 34 + /* save last known float dimensions */ 35 + selmon->sel->sfx = selmon->sel->x; 36 + selmon->sel->sfy = selmon->sel->y; 37 + selmon->sel->sfw = selmon->sel->w; 38 + selmon->sel->sfh = selmon->sel->h; 39 + } 40 arrange(selmon); 41 } 42