dwm-cfacts-6.2-1.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-cfacts-6.2-1.diff (3687B)
       ---
            1 From ac76d998f1e70c89b313a2fea676678d511941d4 Mon Sep 17 00:00:00 2001
            2 From: Tobias Giess <tobias.giess@gmail.com>
            3 Date: Wed, 17 Jun 2020 19:13:02 +0200
            4 Subject: [PATCH] fix cfacts not working on stack
            5 
            6 One line got lost while porting the cfacts patch from version 6.1 to version 6.2.
            7 This single line caused that the cfacts patch was only working on master clients
            8 but not on stack clients.
            9 ---
           10  config.def.h |  3 +++
           11  dwm.c        | 34 +++++++++++++++++++++++++++++++---
           12  2 files changed, 34 insertions(+), 3 deletions(-)
           13 
           14 diff --git a/config.def.h b/config.def.h
           15 index 1c0b587..83910c1 100644
           16 --- a/config.def.h
           17 +++ b/config.def.h
           18 @@ -70,6 +70,9 @@ static Key keys[] = {
           19          { MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
           20          { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
           21          { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
           22 +        { MODKEY|ShiftMask,             XK_h,      setcfact,       {.f = +0.25} },
           23 +        { MODKEY|ShiftMask,             XK_l,      setcfact,       {.f = -0.25} },
           24 +        { MODKEY|ShiftMask,             XK_o,      setcfact,       {.f =  0.00} },
           25          { MODKEY,                       XK_Return, zoom,           {0} },
           26          { MODKEY,                       XK_Tab,    view,           {0} },
           27          { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
           28 diff --git a/dwm.c b/dwm.c
           29 index 4465af1..c0ad1b3 100644
           30 --- a/dwm.c
           31 +++ b/dwm.c
           32 @@ -87,6 +87,7 @@ typedef struct Client Client;
           33  struct Client {
           34          char name[256];
           35          float mina, maxa;
           36 +        float cfact;
           37          int x, y, w, h;
           38          int oldx, oldy, oldw, oldh;
           39          int basew, baseh, incw, inch, maxw, maxh, minw, minh;
           40 @@ -200,6 +201,7 @@ static void setclientstate(Client *c, long state);
           41  static void setfocus(Client *c);
           42  static void setfullscreen(Client *c, int fullscreen);
           43  static void setlayout(const Arg *arg);
           44 +static void setcfact(const Arg *arg);
           45  static void setmfact(const Arg *arg);
           46  static void setup(void);
           47  static void seturgent(Client *c, int urg);
           48 @@ -1029,6 +1031,7 @@ manage(Window w, XWindowAttributes *wa)
           49          c->w = c->oldw = wa->width;
           50          c->h = c->oldh = wa->height;
           51          c->oldbw = wa->border_width;
           52 +        c->cfact = 1.0;
           53  
           54          updatetitle(c);
           55          if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
           56 @@ -1511,6 +1514,23 @@ setlayout(const Arg *arg)
           57                  drawbar(selmon);
           58  }
           59  
           60 +void setcfact(const Arg *arg) {
           61 +        float f;
           62 +        Client *c;
           63 +
           64 +        c = selmon->sel;
           65 +
           66 +        if(!arg || !c || !selmon->lt[selmon->sellt]->arrange)
           67 +                return;
           68 +        f = arg->f + c->cfact;
           69 +        if(arg->f == 0.0)
           70 +                f = 1.0;
           71 +        else if(f < 0.25 || f > 4.0)
           72 +                return;
           73 +        c->cfact = f;
           74 +        arrange(selmon);
           75 +}
           76 +
           77  /* arg > 1.0 will set mfact absolutely */
           78  void
           79  setmfact(const Arg *arg)
           80 @@ -1674,9 +1694,15 @@ void
           81  tile(Monitor *m)
           82  {
           83          unsigned int i, n, h, mw, my, ty;
           84 +        float mfacts = 0, sfacts = 0;
           85          Client *c;
           86  
           87 -        for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
           88 +        for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) {
           89 +                if (n < m->nmaster)
           90 +                        mfacts += c->cfact;
           91 +                else
           92 +                        sfacts += c->cfact;
           93 +        }
           94          if (n == 0)
           95                  return;
           96  
           97 @@ -1686,13 +1712,15 @@ tile(Monitor *m)
           98                  mw = m->ww;
           99          for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
          100                  if (i < m->nmaster) {
          101 -                        h = (m->wh - my) / (MIN(n, m->nmaster) - i);
          102 +                        h = (m->wh - my) * (c->cfact / mfacts);
          103                          resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
          104                          my += HEIGHT(c);
          105 +                        mfacts -= c->cfact;
          106                  } else {
          107 -                        h = (m->wh - ty) / (n - i);
          108 +                        h = (m->wh - ty) * (c->cfact / sfacts);
          109                          resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
          110                          ty += HEIGHT(c);
          111 +                        sfacts -= c->cfact;
          112                  }
          113  }
          114  
          115 -- 
          116 2.27.0
          117