24 stack->h = sh - 2 * stack->border; |
26 stack->h = sh - 2 * stack->border; |
25 resize(stack); |
27 resize(stack); |
26 discard_events(EnterWindowMask); |
28 discard_events(EnterWindowMask); |
27 } |
29 } |
28 |
30 |
29 void |
31 static void |
30 floating(void *aux) |
32 floating(void) |
31 { |
33 { |
32 Client *c; |
34 Client *c; |
33 |
35 |
34 arrange = floating; |
|
35 for(c = stack; c; c = c->snext) |
36 for(c = stack; c; c = c->snext) |
36 resize(c); |
37 resize(c); |
37 discard_events(EnterWindowMask); |
38 discard_events(EnterWindowMask); |
38 } |
39 } |
39 |
40 |
40 void |
41 static void |
41 grid(void *aux) |
42 tiling(void) |
42 { |
43 { |
43 Client *c; |
44 Client *c; |
44 int n, cols, rows, gw, gh, i, j; |
45 int n, cols, rows, gw, gh, i, j; |
45 float rt, fd; |
46 float rt, fd; |
46 |
47 |
47 arrange = grid; |
|
48 if(!clients) |
48 if(!clients) |
49 return; |
49 return; |
50 for(n = 0, c = clients; c; c = c->next, n++); |
50 for(n = 0, c = clients; c; c = c->next, n++); |
51 rt = sqrt(n); |
51 rt = sqrt(n); |
52 if(modff(rt, &fd) < 0.5) |
52 if(modff(rt, &fd) < 0.5) |
112 int i; |
123 int i; |
113 |
124 |
114 c->tw = 0; |
125 c->tw = 0; |
115 for(i = 0; i < TLast; i++) |
126 for(i = 0; i < TLast; i++) |
116 if(c->tags[i]) |
127 if(c->tags[i]) |
117 c->tw += textw(&brush.font, c->tags[i]) + brush.font.height; |
128 c->tw += textw(&dc.font, c->tags[i]) + dc.font.height; |
118 c->tw += textw(&brush.font, c->name) + brush.font.height; |
129 c->tw += textw(&dc.font, c->name) + dc.font.height; |
119 if(c->tw > c->w) |
130 if(c->tw > c->w) |
120 c->tw = c->w + 2; |
131 c->tw = c->w + 2; |
121 c->tx = c->x + c->w - c->tw + 2; |
132 c->tx = c->x + c->w - c->tw + 2; |
122 c->ty = c->y; |
133 c->ty = c->y; |
123 XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th); |
134 XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th); |
238 c->h = wa->height; |
249 c->h = wa->height; |
239 c->th = th; |
250 c->th = th; |
240 c->border = 1; |
251 c->border = 1; |
241 update_size(c); |
252 update_size(c); |
242 XSetWindowBorderWidth(dpy, c->win, 1); |
253 XSetWindowBorderWidth(dpy, c->win, 1); |
243 XSetWindowBorder(dpy, c->win, brush.border); |
254 XSetWindowBorder(dpy, c->win, dc.border); |
244 XSelectInput(dpy, c->win, |
255 XSelectInput(dpy, c->win, |
245 StructureNotifyMask | PropertyChangeMask | EnterWindowMask); |
256 StructureNotifyMask | PropertyChangeMask | EnterWindowMask); |
246 XGetTransientForHint(dpy, c->win, &c->trans); |
257 XGetTransientForHint(dpy, c->win, &c->trans); |
247 twa.override_redirect = 1; |
258 twa.override_redirect = 1; |
248 twa.background_pixmap = ParentRelative; |
259 twa.background_pixmap = ParentRelative; |
264 GrabModeAsync, GrabModeSync, None, None); |
275 GrabModeAsync, GrabModeSync, None, None); |
265 XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask, |
276 XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask, |
266 GrabModeAsync, GrabModeSync, None, None); |
277 GrabModeAsync, GrabModeSync, None, None); |
267 XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask, |
278 XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask, |
268 GrabModeAsync, GrabModeSync, None, None); |
279 GrabModeAsync, GrabModeSync, None, None); |
269 arrange(NULL); |
280 arrange(); |
270 focus(c); |
281 focus(c); |
271 } |
282 } |
272 |
283 |
273 void |
284 void |
274 gravitate(Client *c, Bool invert) |
285 gravitate(Client *c, Bool invert) |
415 { |
426 { |
416 int i; |
427 int i; |
417 if(c == stack) |
428 if(c == stack) |
418 return; |
429 return; |
419 |
430 |
420 brush.x = brush.y = 0; |
431 dc.x = dc.y = 0; |
421 brush.h = c->th; |
432 dc.h = c->th; |
422 |
433 |
423 brush.w = 0; |
434 dc.w = 0; |
424 for(i = 0; i < TLast; i++) { |
435 for(i = 0; i < TLast; i++) { |
425 if(c->tags[i]) { |
436 if(c->tags[i]) { |
426 brush.x += brush.w; |
437 dc.x += dc.w; |
427 brush.w = textw(&brush.font, c->tags[i]) + brush.font.height; |
438 dc.w = textw(&dc.font, c->tags[i]) + dc.font.height; |
428 draw(&brush, True, c->tags[i]); |
439 draw(True, c->tags[i]); |
429 } |
440 } |
430 } |
441 } |
431 brush.x += brush.w; |
442 dc.x += dc.w; |
432 brush.w = textw(&brush.font, c->name) + brush.font.height; |
443 dc.w = textw(&dc.font, c->name) + dc.font.height; |
433 draw(&brush, True, c->name); |
444 draw(True, c->name); |
434 XCopyArea(dpy, brush.drawable, c->title, brush.gc, |
445 XCopyArea(dpy, dc.drawable, c->title, dc.gc, |
435 0, 0, c->tw, c->th, 0, 0); |
446 0, 0, c->tw, c->th, 0, 0); |
436 XFlush(dpy); |
447 XFlush(dpy); |
437 } |
448 } |