dwm-cfacts-20200913-61bb8b2.diff (3596B)
1 From c32a879432573d71dec7fcb4bf68927d2f4cdf10 Mon Sep 17 00:00:00 2001 2 From: iofq <cjriddz@protonmail.com> 3 Date: Sat, 12 Sep 2020 22:28:09 -0500 4 Subject: [PATCH] Fixed 'cfacts' patch failure due to upstream commit 5 'f09418bbb...' 6 7 --- 8 config.def.h | 3 +++ 9 dwm.c | 34 +++++++++++++++++++++++++++++++--- 10 2 files changed, 34 insertions(+), 3 deletions(-) 11 12 diff --git a/config.def.h b/config.def.h 13 index 1c0b587..83910c1 100644 14 --- a/config.def.h 15 +++ b/config.def.h 16 @@ -70,6 +70,9 @@ static Key keys[] = { 17 { MODKEY, XK_d, incnmaster, {.i = -1 } }, 18 { MODKEY, XK_h, setmfact, {.f = -0.05} }, 19 { MODKEY, XK_l, setmfact, {.f = +0.05} }, 20 + { MODKEY|ShiftMask, XK_h, setcfact, {.f = +0.25} }, 21 + { MODKEY|ShiftMask, XK_l, setcfact, {.f = -0.25} }, 22 + { MODKEY|ShiftMask, XK_o, setcfact, {.f = 0.00} }, 23 { MODKEY, XK_Return, zoom, {0} }, 24 { MODKEY, XK_Tab, view, {0} }, 25 { MODKEY|ShiftMask, XK_c, killclient, {0} }, 26 diff --git a/dwm.c b/dwm.c 27 index 664c527..5233229 100644 28 --- a/dwm.c 29 +++ b/dwm.c 30 @@ -87,6 +87,7 @@ typedef struct Client Client; 31 struct Client { 32 char name[256]; 33 float mina, maxa; 34 + float cfact; 35 int x, y, w, h; 36 int oldx, oldy, oldw, oldh; 37 int basew, baseh, incw, inch, maxw, maxh, minw, minh; 38 @@ -201,6 +202,7 @@ static void setclientstate(Client *c, long state); 39 static void setfocus(Client *c); 40 static void setfullscreen(Client *c, int fullscreen); 41 static void setlayout(const Arg *arg); 42 +static void setcfact(const Arg *arg); 43 static void setmfact(const Arg *arg); 44 static void setup(void); 45 static void seturgent(Client *c, int urg); 46 @@ -1030,6 +1032,7 @@ manage(Window w, XWindowAttributes *wa) 47 c->w = c->oldw = wa->width; 48 c->h = c->oldh = wa->height; 49 c->oldbw = wa->border_width; 50 + c->cfact = 1.0; 51 52 updatetitle(c); 53 if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { 54 @@ -1512,6 +1515,23 @@ setlayout(const Arg *arg) 55 drawbar(selmon); 56 } 57 58 +void setcfact(const Arg *arg) { 59 + float f; 60 + Client *c; 61 + 62 + c = selmon->sel; 63 + 64 + if(!arg || !c || !selmon->lt[selmon->sellt]->arrange) 65 + return; 66 + f = arg->f + c->cfact; 67 + if(arg->f == 0.0) 68 + f = 1.0; 69 + else if(f < 0.25 || f > 4.0) 70 + return; 71 + c->cfact = f; 72 + arrange(selmon); 73 +} 74 + 75 /* arg > 1.0 will set mfact absolutely */ 76 void 77 setmfact(const Arg *arg) 78 @@ -1675,9 +1695,15 @@ void 79 tile(Monitor *m) 80 { 81 unsigned int i, n, h, mw, my, ty; 82 + float mfacts = 0, sfacts = 0; 83 Client *c; 84 85 - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); 86 + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { 87 + if (n < m->nmaster) 88 + mfacts += c->cfact; 89 + else 90 + sfacts += c->cfact; 91 + } 92 if (n == 0) 93 return; 94 95 @@ -1687,15 +1713,17 @@ tile(Monitor *m) 96 mw = m->ww; 97 for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) 98 if (i < m->nmaster) { 99 - h = (m->wh - my) / (MIN(n, m->nmaster) - i); 100 + h = (m->wh - my) * (c->cfact / mfacts); 101 resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0); 102 if (my + HEIGHT(c) < m->wh) 103 my += HEIGHT(c); 104 + mfacts -= c->cfact; 105 } else { 106 - h = (m->wh - ty) / (n - i); 107 + h = (m->wh - ty) * (c->cfact / sfacts); 108 resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0); 109 if (ty + HEIGHT(c) < m->wh) 110 ty += HEIGHT(c); 111 + sfacts -= c->cfact; 112 } 113 } 114 115 -- 116 2.28.0 117