aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe <rbo@gmx.us>2025-04-22 16:42:19 +0200
committerJoe <rbo@gmx.us>2025-04-22 16:42:19 +0200
commit58a39f924cc8eaf32f0e24c0f5fcdfd24522a6e6 (patch)
tree9eb9c74795b8313c3cfac90b6f09170be9e071fc
parentnogapx (diff)
downloaddwm-58a39f924cc8eaf32f0e24c0f5fcdfd24522a6e6.tar.gz
dwm-58a39f924cc8eaf32f0e24c0f5fcdfd24522a6e6.tar.bz2
dwm-58a39f924cc8eaf32f0e24c0f5fcdfd24522a6e6.tar.xz
dwm-58a39f924cc8eaf32f0e24c0f5fcdfd24522a6e6.tar.zst
dwm-58a39f924cc8eaf32f0e24c0f5fcdfd24522a6e6.zip
up
-rw-r--r--applied/dwm-cfacts-20200913-61bb8b2.diff117
-rw-r--r--config.def.h3
-rw-r--r--dwm.c34
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} },
diff --git a/dwm.c b/dwm.c
index 475e2a0..65bbd20 100644
--- a/dwm.c
+++ b/dwm.c
@@ -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;
}
}