sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

dwm-savefloats-6.0.diff (1528B)


      1 URL: http://dwm.suckless.org/patches/historical/save_floats
      2 This patch saves size and position of every floating window before it is forced
      3 into tiled mode. If the window is made floating again, the old dimensions will
      4 be restored.
      5 
      6 diff -r ec4baab78314 dwm.c
      7 --- a/dwm.c	Mon Dec 19 15:38:30 2011 +0100
      8 +++ b/dwm.c	Fri Apr 06 08:23:18 2012 +0200
      9 @@ -86,6 +86,7 @@
     10  	char name[256];
     11  	float mina, maxa;
     12  	int x, y, w, h;
     13 +	int sfx, sfy, sfw, sfh; /* stored float geometry, used on mode revert */
     14  	int oldx, oldy, oldw, oldh;
     15  	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
     16  	int bw, oldbw;
     17 @@ -1149,6 +1150,10 @@
     18  	updatewindowtype(c);
     19  	updatesizehints(c);
     20  	updatewmhints(c);
     21 +	c->sfx = c->x;
     22 +	c->sfy = c->y;
     23 +	c->sfw = c->w;
     24 +	c->sfh = c->h;
     25  	XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
     26  	grabbuttons(c, False);
     27  	if(!c->isfloating)
     28 @@ -1741,8 +1746,16 @@
     29  		return;
     30  	selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
     31  	if(selmon->sel->isfloating)
     32 -		resize(selmon->sel, selmon->sel->x, selmon->sel->y,
     33 -		       selmon->sel->w, selmon->sel->h, False);
     34 +		/*restore last known float dimensions*/
     35 +		resize(selmon->sel, selmon->sel->sfx, selmon->sel->sfy,
     36 +		       selmon->sel->sfw, selmon->sel->sfh, False);
     37 +	else {
     38 +		/*save last known float dimensions*/
     39 +		selmon->sel->sfx = selmon->sel->x;
     40 +		selmon->sel->sfy = selmon->sel->y;
     41 +		selmon->sel->sfw = selmon->sel->w;
     42 +		selmon->sel->sfh = selmon->sel->h;
     43 +	}
     44  	arrange(selmon);
     45  }
     46