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 }