sites

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

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