URI: 
       Remove blw variable in favour of calculating the value when needed - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 5799dd1fca6576b662d299e210cd5933b29d502d
   DIR parent 44adafe0069e73aa03a3829d7bb39591cd8b3f1d
  HTML Author: Stein <bakkeby@gmail.com>
       Date:   Mon, 15 Aug 2022 14:31:22 +0200
       
       Remove blw variable in favour of calculating the value when needed
       
       The purpose and reasoning behind the bar layout width (blw) variable
       in dwm the way it is today may not be immediately obvious.
       
       The use of the variable makes more sense when looking at commit
       2ce37bc from 2009 where blw was initialised in the setup function
       and it represented the maximum of all available layout symbols.
       
               for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
                       w = TEXTW(layouts[i].symbol);
                       blw = MAX(blw, w);
               }
       
       As such the layout symbol back then was fixed in size and both drawbar
       and buttonpress depended on this variable.
       
       The the way the blw variable is set today in drawbar means that it
       merely caches the size of the layout symbol for the last bar drawn.
       
       While unlikely to happen in practice it is possible that the last bar
       drawn is not that of the currently selected monitor, which can result
       in misaligned button clicks if there is a difference in layout symbol
       width between monitors.
       
       Diffstat:
         M dwm.c                               |       6 +++---
       
       1 file changed, 3 insertions(+), 3 deletions(-)
       ---
   DIR diff --git a/dwm.c b/dwm.c
       @@ -240,7 +240,7 @@ static const char broken[] = "broken";
        static char stext[256];
        static int screen;
        static int sw, sh;           /* X display screen geometry width, height */
       -static int bh, blw = 0;      /* bar geometry */
       +static int bh;               /* bar height */
        static int lrpad;            /* sum of left and right padding for text */
        static int (*xerrorxlib)(Display *, XErrorEvent *);
        static unsigned int numlockmask = 0;
       @@ -440,7 +440,7 @@ buttonpress(XEvent *e)
                        if (i < LENGTH(tags)) {
                                click = ClkTagBar;
                                arg.ui = 1 << i;
       -                } else if (ev->x < x + blw)
       +                } else if (ev->x < x + TEXTW(selmon->ltsymbol))
                                click = ClkLtSymbol;
                        else if (ev->x > selmon->ww - (int)TEXTW(stext))
                                click = ClkStatusText;
       @@ -731,7 +731,7 @@ drawbar(Monitor *m)
                                        urg & 1 << i);
                        x += w;
                }
       -        w = blw = TEXTW(m->ltsymbol);
       +        w = TEXTW(m->ltsymbol);
                drw_setscheme(drw, scheme[SchemeNorm]);
                x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);