dwm-fancybar-6.1.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-fancybar-6.1.diff (1822B)
       ---
            1 diff --git a/dwm.c b/dwm.c
            2 index 0362114..b74e787 100644
            3 --- a/dwm.c
            4 +++ b/dwm.c
            5 @@ -704,13 +704,15 @@ dirtomon(int dir)
            6  void
            7  drawbar(Monitor *m)
            8  {
            9 -        int x, xx, w, dx;
           10 -        unsigned int i, occ = 0, urg = 0;
           11 +        int x, xx, w, dx, tw, mw;
           12 +        unsigned int i, occ = 0, urg = 0, n = 0, extra = 0;
           13          Client *c;
           14  
           15          dx = (drw->fonts[0]->ascent + drw->fonts[0]->descent + 2) / 4;
           16  
           17          for (c = m->clients; c; c = c->next) {
           18 +                if (ISVISIBLE(c))
           19 +                        n++;
           20                  occ |= c->tags;
           21                  if (c->isurgent)
           22                          urg |= c->tags;
           23 @@ -741,14 +743,40 @@ drawbar(Monitor *m)
           24                  x = m->ww;
           25          if ((w = x - xx) > bh) {
           26                  x = xx;
           27 -                if (m->sel) {
           28 -                        drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
           29 -                        drw_text(drw, x, 0, w, bh, m->sel->name, 0);
           30 -                        drw_rect(drw, x + 1, 1, dx, dx, m->sel->isfixed, m->sel->isfloating, 0);
           31 -                } else {
           32 -                        drw_setscheme(drw, &scheme[SchemeNorm]);
           33 -                        drw_rect(drw, x, 0, w, bh, 1, 0, 1);
           34 +                if (n > 0) {
           35 +                        tw = m->sel->name ? TEXTW(m->sel->name) : 0;
           36 +                        mw = (tw >= w || n == 1) ? 0 : (w - tw) / (n - 1);
           37 +
           38 +                        i = 0;
           39 +                        for (c = m->clients; c; c = c->next) {
           40 +                                if (!ISVISIBLE(c) || c == m->sel)
           41 +                                        continue;
           42 +                                tw = TEXTW(c->name);
           43 +                                if(tw < mw)
           44 +                                        extra += (mw - tw);
           45 +                                else
           46 +                                        i++;
           47 +                        }
           48 +                        if (i > 0)
           49 +                                mw += extra / i;
           50 +
           51 +                        for (c = m->clients; c; c = c->next) {
           52 +                                if (!ISVISIBLE(c))
           53 +                                        continue;
           54 +                                xx = x + w;
           55 +                                tw = TEXTW(c->name);
           56 +                                w = MIN(m->sel == c ? w : mw, tw);
           57 +
           58 +                                drw_setscheme(drw, m->sel == c ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
           59 +                                drw_text(drw, x, 0, w, bh, c->name, 0);
           60 +                                drw_rect(drw, x + 1, 1, dx, dx, c->isfixed, c->isfloating, 0);
           61 +
           62 +                                x += w;
           63 +                                w = xx - x;
           64 +                        }
           65                  }
           66 +                drw_setscheme(drw, &scheme[SchemeNorm]);
           67 +                drw_rect(drw, x, 0, w, bh, 1, 0, 1);
           68          }
           69          drw_map(drw, m->barwin, 0, 0, m->ww, bh);
           70  }