| dwm-fancybar-5.6.1.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| dwm-fancybar-5.6.1.diff (2771B) | |
| --- | |
| 1 diff -r e47a47bd3ed4 dwm.c | |
| 2 --- a/dwm.c Tue Jul 21 10:57:54 2009 +0100 | |
| 3 +++ b/dwm.c Mon Aug 24 18:28:57 2009 +0200 | |
| 4 @@ -169,6 +169,7 @@ | |
| 5 static Monitor *dirtomon(int dir); | |
| 6 static void drawbar(Monitor *m); | |
| 7 static void drawbars(void); | |
| 8 +static void drawvline(unsigned long col[ColLast]); | |
| 9 static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned l… | |
| 10 static void drawtext(const char *text, unsigned long col[ColLast], Bool… | |
| 11 static void enternotify(XEvent *e); | |
| 12 @@ -648,10 +649,11 @@ | |
| 13 | |
| 14 void | |
| 15 drawbar(Monitor *m) { | |
| 16 - int x; | |
| 17 + int x, ow, mw = 0, extra, tw; | |
| 18 unsigned int i, n = 0, occ = 0, urg = 0; | |
| 19 unsigned long *col; | |
| 20 - Client *c; | |
| 21 + Client *c, *firstvis, *lastvis = NULL; | |
| 22 + DC seldc; | |
| 23 | |
| 24 for(c = m->clients; c; c = c->next) { | |
| 25 if(ISVISIBLE(c)) | |
| 26 @@ -689,16 +691,62 @@ | |
| 27 } | |
| 28 else | |
| 29 dc.x = m->ww; | |
| 30 - if((dc.w = dc.x - x) > bh) { | |
| 31 - dc.x = x; | |
| 32 - if(m->sel) { | |
| 33 - col = m == selmon ? dc.sel : dc.norm; | |
| 34 - drawtext(m->sel->name, col, False); | |
| 35 - drawsquare(m->sel->isfixed, m->sel->isfloating,… | |
| 36 + | |
| 37 + for(c = m->clients; c && !ISVISIBLE(c); c = c->next); | |
| 38 + firstvis = c; | |
| 39 + | |
| 40 + col = m == selmon ? dc.sel : dc.norm; | |
| 41 + dc.w = dc.x - x; | |
| 42 + dc.x = x; | |
| 43 + | |
| 44 + if(n > 0) { | |
| 45 + mw = dc.w / n; | |
| 46 + extra = 0; | |
| 47 + seldc = dc; | |
| 48 + i = 0; | |
| 49 + | |
| 50 + while(c) { | |
| 51 + lastvis = c; | |
| 52 + tw = TEXTW(c->name); | |
| 53 + if(tw < mw) extra += (mw - tw); else i++; | |
| 54 + for(c = c->next; c && !ISVISIBLE(c); c = c->nex… | |
| 55 } | |
| 56 - else | |
| 57 + | |
| 58 + if(i > 0) mw += extra / i; | |
| 59 + | |
| 60 + c = firstvis; | |
| 61 + x = dc.x; | |
| 62 + } | |
| 63 + | |
| 64 + while(dc.w > bh) { | |
| 65 + if(c) { | |
| 66 + ow = dc.w; | |
| 67 + tw = TEXTW(c->name); | |
| 68 + dc.w = MIN(ow, tw); | |
| 69 + | |
| 70 + if(dc.w > mw) dc.w = mw; | |
| 71 + if(m->sel == c) seldc = dc; | |
| 72 + if(c == lastvis) dc.w = ow; | |
| 73 + | |
| 74 + drawtext(c->name, col, False); | |
| 75 + if(c != firstvis) drawvline(col); | |
| 76 + drawsquare(c->isfixed, c->isfloating, False, co… | |
| 77 + | |
| 78 + dc.x += dc.w; | |
| 79 + dc.w = ow - dc.w; | |
| 80 + for(c = c->next; c && !ISVISIBLE(c); c = c->nex… | |
| 81 + } else { | |
| 82 drawtext(NULL, dc.norm, False); | |
| 83 + break; | |
| 84 + } | |
| 85 } | |
| 86 + | |
| 87 + if(m == selmon && m->sel && ISVISIBLE(m->sel)) { | |
| 88 + dc = seldc; | |
| 89 + drawtext(m->sel->name, col, True); | |
| 90 + drawsquare(m->sel->isfixed, m->sel->isfloating, True, c… | |
| 91 + } | |
| 92 + | |
| 93 XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, … | |
| 94 XSync(dpy, False); | |
| 95 } | |
| 96 @@ -709,6 +757,15 @@ | |
| 97 | |
| 98 for(m = mons; m; m = m->next) | |
| 99 drawbar(m); | |
| 100 +} | |
| 101 + | |
| 102 +void | |
| 103 +drawvline(unsigned long col[ColLast]) { | |
| 104 + XGCValues gcv; | |
| 105 + | |
| 106 + gcv.foreground = col[ColFG]; | |
| 107 + XChangeGC(dpy, dc.gc, GCForeground, &gcv); | |
| 108 + XDrawLine(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.x, dc.y + (dc… | |
| 109 } | |
| 110 | |
| 111 void | |
| 112 @@ -1235,8 +1292,7 @@ | |
| 113 } | |
| 114 if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMN… | |
| 115 updatetitle(c); | |
| 116 - if(c == selmon->sel) | |
| 117 - drawbars(); | |
| 118 + drawbars(); | |
| 119 } | |
| 120 } | |
| 121 } |