dwm

Fork of suckless' dwm with my personal patches
git clone https://git.instinctive.eu/dwm.git
Log | Files | Refs | README | LICENSE

commit 502471b84bb53c5e76fa2b8f443bffd862ab126e
parent 8df2c57618b076265198321a4aaa5d104f55b6b4
Author: Natasha Kerensikova <natacha@instinctive.eu>
Date:   Sat, 20 May 2023 17:10:28 +0200

[patch] merged dwm-fancybar-20220527-d3f93c7.diff

Diffstat:
Mdwm.c | 46++++++++++++++++++++++++++++++++++++----------
1 file changed, 36 insertions(+), 10 deletions(-)

diff --git a/dwm.c b/dwm.c @@ -747,10 +747,10 @@ void drawbar(Monitor *m) { int indn; - int x, w, tw = 0; + int x, w, tw = 0, mw, ew = 0; int boxs = drw->fonts->h / 9; int boxw = drw->fonts->h / 6 + 2; - unsigned int i, occ = 0, urg = 0; + unsigned int i, occ = 0, urg = 0, n = 0; Client *c; if (!m->showbar) @@ -764,6 +764,8 @@ drawbar(Monitor *m) } for (c = m->clients; c; c = c->next) { + if (ISVISIBLE(c)) + n++; occ |= c->tags == 255 ? 0 : c->tags; if (c->isurgent) urg |= c->tags; @@ -793,15 +795,39 @@ drawbar(Monitor *m) x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); if ((w = m->ww - tw - x) > bh) { - if (m->sel) { - drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); - if (m->sel->isfloating) - drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); - } else { - drw_setscheme(drw, scheme[SchemeNorm]); - drw_rect(drw, x, 0, w, bh, 1, 1); + if (n > 0) { + tw = TEXTW(m->sel->name) + lrpad; + mw = (tw >= w || n == 1) ? 0 : (w - tw) / (n - 1); + + i = 0; + for (c = m->clients; c; c = c->next) { + if (!ISVISIBLE(c) || c == m->sel) + continue; + tw = TEXTW(c->name); + if(tw < mw) + ew += (mw - tw); + else + i++; + } + if (i > 0) + mw += ew / i; + + for (c = m->clients; c; c = c->next) { + if (!ISVISIBLE(c)) + continue; + tw = MIN(m->sel == c ? w : mw, TEXTW(c->name)); + + drw_setscheme(drw, scheme[m == selmon && m->sel == c ? SchemeSel : SchemeNorm]); + if (tw > lrpad / 2) + drw_text(drw, x, 0, tw, bh, lrpad / 2, c->name, 0); + if (c->isfloating) + drw_rect(drw, x + boxs, boxs, boxw, boxw, c->isfixed, 0); + x += tw; + w -= tw; + } } + drw_setscheme(drw, scheme[SchemeNorm]); + drw_rect(drw, x, 0, w, bh, 1, 1); } drw_map(drw, m->barwin, 0, 0, m->ww, bh); }