[wiki] [sites] Provide fix for cfacts patch || Tobias Giess
commit 11308ee7a2844fc18c3d8142f48728330a7971b5
Author: Tobias Giess <tobias.giess_AT_gmail.com>
Date: Wed Jun 17 19:25:31 2020 +0200
Provide fix for cfacts patch
The current dwm-6.2 port of the cfacts patch does not work on clients in the stack. I added
a new diff file (dwm-cfacts-6.2-1.diff) that solves this issue. It was basically just one line
that got lost during port from version 6.1 to 6.2
diff --git a/dwm.suckless.org/patches/cfacts/dwm-cfacts-6.2-1.diff b/dwm.suckless.org/patches/cfacts/dwm-cfacts-6.2-1.diff
new file mode 100644
index 00000000..44bbfe9d
--- /dev/null
+++ b/dwm.suckless.org/patches/cfacts/dwm-cfacts-6.2-1.diff
_AT_@ -0,0 +1,117 @@
+From ac76d998f1e70c89b313a2fea676678d511941d4 Mon Sep 17 00:00:00 2001
+From: Tobias Giess <tobias.giess_AT_gmail.com>
+Date: Wed, 17 Jun 2020 19:13:02 +0200
+Subject: [PATCH] fix cfacts not working on stack
+
+One line got lost while porting the cfacts patch from version 6.1 to version 6.2.
+This single line caused that the cfacts patch was only working on master clients
+but not on stack clients.
+---
+ 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
+_AT_@ -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 4465af1..c0ad1b3 100644
+--- a/dwm.c
++++ b/dwm.c
+_AT_@ -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;
+_AT_@ -200,6 +201,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);
+_AT_@ -1029,6 +1031,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))) {
+_AT_@ -1511,6 +1514,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)
+_AT_@ -1674,9 +1694,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;
+
+_AT_@ -1686,13 +1712,15 @@ 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);
+ 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);
+ ty += HEIGHT(c);
++ sfacts -= c->cfact;
+ }
+ }
+
+--
+2.27.0
+
diff --git a/dwm.suckless.org/patches/cfacts/index.md b/dwm.suckless.org/patches/cfacts/index.md
index 8b246dfa..c312f2b3 100644
--- a/dwm.suckless.org/patches/cfacts/index.md
+++ b/dwm.suckless.org/patches/cfacts/index.md
_AT_@ -44,6 +44,7 @@ Download
--------
* [dwm-cfacts-6.1.diff](dwm-cfacts-6.1.diff)
* [dwm-cfacts-6.2.diff](dwm-cfacts-6.2.diff)
+* [dwm-cfacts-6.2-1.diff](dwm-cfacts-6.2-1.diff)
Additional layouts with cfacts
------------------------------
_AT_@ -58,3 +59,4 @@ Author
* Patrick Steinhardt (pks) <ps_AT_pks.im>
* Aaron Duxler <aaron_AT_duxler.xyz> - Additional layouts bottomstack + centeredmaster + deck
* mss <mss_AT_waifu.club> - dwm-6.2 port.
+* Tobias Giess <tobias.giess_AT_gmail.com> - Fix dwm-6.2 port not working on clients in the stack
Received on Wed Jun 17 2020 - 19:56:21 CEST
This archive was generated by hypermail 2.3.0
: Wed Jun 17 2020 - 20:00:47 CEST