diff -r 2765f1a08494 dwm.c --- a/dwm.c Wed Aug 27 12:52:44 2008 +0100 +++ b/dwm.c Sun Aug 31 14:35:50 2008 +0200 @@ -501,7 +501,7 @@ die(const char *errstr, ...) { void drawbar(void) { - int x; + int x, clients_count = 0; unsigned int i, occ = 0, urg = 0; unsigned long *col; Client *c; @@ -510,6 +510,8 @@ drawbar(void) { occ |= c->tags; if(c->isurgent) urg |= c->tags; + if(ISVISIBLE(c)) + clients_count++; } dc.x = 0; @@ -534,12 +536,16 @@ drawbar(void) { dc.w = ww - x; } drawtext(stext, dc.norm, False); - if((dc.w = dc.x - x) > bh) { + if((dc.w = clients_count > 0 ? (dc.x - x) / clients_count : dc.x - x) > bh) { dc.x = x; - if(sel) { - drawtext(sel->name, dc.sel, False); - drawsquare(sel->isfixed, sel->isfloating, False, dc.sel); - } + if(sel) + for(c = clients; c; c = c->next) { + if(ISVISIBLE(c)) { + drawtext(c->name, dc.sel, c != sel); + drawsquare(c->isfixed, c->isfloating, c != sel, dc.sel); + dc.x += dc.w; + } + } else drawtext(NULL, dc.norm, False); }