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 } |