sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | 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  }