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 }