diff options
Diffstat (limited to '')
| -rw-r--r-- | applied/dwm-cfacts-20200913-61bb8b2.diff | 117 | ||||
| -rw-r--r-- | config.def.h | 3 | ||||
| -rw-r--r-- | dwm.c | 34 | 
3 files changed, 151 insertions, 3 deletions
diff --git a/applied/dwm-cfacts-20200913-61bb8b2.diff b/applied/dwm-cfacts-20200913-61bb8b2.diff new file mode 100644 index 0000000..bb70e13 --- /dev/null +++ b/applied/dwm-cfacts-20200913-61bb8b2.diff @@ -0,0 +1,117 @@ +From c32a879432573d71dec7fcb4bf68927d2f4cdf10 Mon Sep 17 00:00:00 2001 +From: iofq <cjriddz@protonmail.com> +Date: Sat, 12 Sep 2020 22:28:09 -0500 +Subject: [PATCH] Fixed 'cfacts' patch failure due to upstream commit + 'f09418bbb...' + +--- + config.def.h |  3 +++ + dwm.c        | 34 +++++++++++++++++++++++++++++++--- + 2 files changed, 34 insertions(+), 3 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 1c0b587..83910c1 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -70,6 +70,9 @@ static Key keys[] = { + 	{ MODKEY,                       XK_d,      incnmaster,     {.i = -1 } }, + 	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} }, + 	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} }, ++	{ MODKEY|ShiftMask,             XK_h,      setcfact,       {.f = +0.25} }, ++	{ MODKEY|ShiftMask,             XK_l,      setcfact,       {.f = -0.25} }, ++	{ MODKEY|ShiftMask,             XK_o,      setcfact,       {.f =  0.00} }, + 	{ MODKEY,                       XK_Return, zoom,           {0} }, + 	{ MODKEY,                       XK_Tab,    view,           {0} }, + 	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} }, +diff --git a/dwm.c b/dwm.c +index 664c527..5233229 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -87,6 +87,7 @@ typedef struct Client Client; + struct Client { + 	char name[256]; + 	float mina, maxa; ++	float cfact; + 	int x, y, w, h; + 	int oldx, oldy, oldw, oldh; + 	int basew, baseh, incw, inch, maxw, maxh, minw, minh; +@@ -201,6 +202,7 @@ static void setclientstate(Client *c, long state); + static void setfocus(Client *c); + static void setfullscreen(Client *c, int fullscreen); + static void setlayout(const Arg *arg); ++static void setcfact(const Arg *arg); + static void setmfact(const Arg *arg); + static void setup(void); + static void seturgent(Client *c, int urg); +@@ -1030,6 +1032,7 @@ manage(Window w, XWindowAttributes *wa) + 	c->w = c->oldw = wa->width; + 	c->h = c->oldh = wa->height; + 	c->oldbw = wa->border_width; ++	c->cfact = 1.0; +  + 	updatetitle(c); + 	if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { +@@ -1512,6 +1515,23 @@ setlayout(const Arg *arg) + 		drawbar(selmon); + } +  ++void setcfact(const Arg *arg) { ++	float f; ++	Client *c; ++ ++	c = selmon->sel; ++ ++	if(!arg || !c || !selmon->lt[selmon->sellt]->arrange) ++		return; ++	f = arg->f + c->cfact; ++	if(arg->f == 0.0) ++		f = 1.0; ++	else if(f < 0.25 || f > 4.0) ++		return; ++	c->cfact = f; ++	arrange(selmon); ++} ++ + /* arg > 1.0 will set mfact absolutely */ + void + setmfact(const Arg *arg) +@@ -1675,9 +1695,15 @@ void + tile(Monitor *m) + { + 	unsigned int i, n, h, mw, my, ty; ++	float mfacts = 0, sfacts = 0; + 	Client *c; +  +-	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { ++		if (n < m->nmaster) ++			mfacts += c->cfact; ++		else ++			sfacts += c->cfact; ++	} + 	if (n == 0) + 		return; +  +@@ -1687,15 +1713,17 @@ tile(Monitor *m) + 		mw = m->ww; + 	for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + 		if (i < m->nmaster) { +-			h = (m->wh - my) / (MIN(n, m->nmaster) - i); ++			h = (m->wh - my) * (c->cfact / mfacts); + 			resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0); + 			if (my + HEIGHT(c) < m->wh) + 				my += HEIGHT(c); ++     mfacts -= c->cfact; + 		} else { +-			h = (m->wh - ty) / (n - i); ++			h = (m->wh - ty) * (c->cfact / sfacts); + 			resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0); + 			if (ty + HEIGHT(c) < m->wh) + 				ty += HEIGHT(c); ++     sfacts -= c->cfact; + 		} + } +  +--  +2.28.0 + diff --git a/config.def.h b/config.def.h index ce9e3f5..275e005 100644 --- a/config.def.h +++ b/config.def.h @@ -252,6 +252,9 @@ static const Key keys[] = {  	{ MODKEY|ControlMask,           XK_x,                     incnmaster,     {.i = -1 } },  	{ MODKEY|ControlMask,           XK_minus,                 setmfact,       {.f = -0.025} },  	{ MODKEY|ControlMask,           XK_equal,                 setmfact,       {.f = +0.025} }, +	{ MODKEY|ControlMask|ShiftMask, XK_minus,                 setcfact,       {.f = +0.25} }, +	{ MODKEY|ControlMask|ShiftMask, XK_equal,                 setcfact,       {.f = -0.25} }, +	{ MODKEY|ControlMask|ShiftMask, XK_0,                     setcfact,       {.f =  0.00} },  	{ MODKEY|ShiftMask,             XK_j,                     movestack,      {.i = +1 } },  	{ MODKEY|ShiftMask,             XK_k,                     movestack,      {.i = -1 } },  	{ MODKEY|ShiftMask,             XK_Return,                zoom,           {0} }, @@ -113,6 +113,7 @@ typedef struct Client Client;  struct Client {  	char name[256];  	float mina, maxa; +	float cfact;  	int x, y, w, h;  	int sfx, sfy, sfw, sfh; /* stored float geometry, used on mode revert */  	int oldx, oldy, oldw, oldh; @@ -260,6 +261,7 @@ static void setfocus(Client *c);  static void setfullscreen(Client *c, int fullscreen);  static void setgaps(const Arg *arg);  static void setlayout(const Arg *arg); +static void setcfact(const Arg *arg);  static void setmfact(const Arg *arg);  static void setup(void);  static void seturgent(Client *c, int urg); @@ -1611,6 +1613,7 @@ manage(Window w, XWindowAttributes *wa)  	c->w = c->oldw = wa->width;  	c->h = c->oldh = wa->height;  	c->oldbw = wa->border_width; +	c->cfact = 1.0;  	updatetitle(c);  	if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { @@ -2525,6 +2528,23 @@ setlayout(const Arg *arg)  		drawbar(selmon);  } +void setcfact(const Arg *arg) { +	float f; +	Client *c; + +	c = selmon->sel; + +	if(!arg || !c || !selmon->lt[selmon->sellt]->arrange) +		return; +	f = arg->f + c->cfact; +	if(arg->f == 0.0) +		f = 1.0; +	else if(f < 0.25 || f > 4.0) +		return; +	c->cfact = f; +	arrange(selmon); +} +  /* arg > 1.0 will set mfact absolutely */  void  setmfact(const Arg *arg) @@ -2846,9 +2866,15 @@ void  tile(Monitor *m)  {  	unsigned int i, n, h, mw, my, ty; +	float mfacts = 0, sfacts = 0;  	Client *c; -	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); +	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { +		if (n < m->nmaster) +			mfacts += c->cfact; +		else +			sfacts += c->cfact; +	}  	if (n == 0)  		return; @@ -2858,15 +2884,17 @@ tile(Monitor *m)  		mw = m->ww - m->gappx;  	for (i = 0, my = ty = m->gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)  			if (i < m->nmaster) { -			h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m->gappx; +			h = (m->wh - my) * (c->cfact / mfacts) - m->gappx;  			resize(c, m->wx + m->gappx, m->wy + my, mw - (2*c->bw) - m->gappx, h - (2*c->bw), 0);  			if (my + HEIGHT(c) + m->gappx < m->wh)  				my += HEIGHT(c) + m->gappx; +			mfacts -= c->cfact;  		} else { -			h = (m->wh - ty) / (n - i) - m->gappx; +			h = (m->wh - ty) * (c->cfact / sfacts) - m->gappx;  			resize(c, m->wx + mw + m->gappx, m->wy + ty, m->ww - mw - (2*c->bw) - 2*m->gappx, h - (2*c->bw), 0);  			if (ty + HEIGHT(c) + m->gappx < m->wh)  				ty += HEIGHT(c) + m->gappx; +			sfacts -= c->cfact;  		}  }  | 
