Mercurial > dwm-meillo
comparison client.c @ 34:cd30cce52b78
added logo+description
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Thu, 13 Jul 2006 09:32:22 +0200 |
parents | e90449e03167 |
children | 989178822938 |
comparison
equal
deleted
inserted
replaced
33:e90449e03167 | 34:cd30cce52b78 |
---|---|
9 #include <X11/Xatom.h> | 9 #include <X11/Xatom.h> |
10 #include <X11/Xutil.h> | 10 #include <X11/Xutil.h> |
11 | 11 |
12 #include "wm.h" | 12 #include "wm.h" |
13 | 13 |
14 void (*arrange)(void *aux); | 14 static void floating(void); |
15 static void tiling(void); | |
16 static void (*arrange)(void) = tiling; | |
15 | 17 |
16 void | 18 void |
17 max(void *aux) | 19 max(void *aux) |
18 { | 20 { |
19 if(!stack) | 21 if(!stack) |
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) |
74 } | 74 } |
75 discard_events(EnterWindowMask); | 75 discard_events(EnterWindowMask); |
76 } | 76 } |
77 | 77 |
78 void | 78 void |
79 toggle(void *aux) | |
80 { | |
81 if(arrange == floating) | |
82 arrange = tiling; | |
83 else | |
84 arrange = floating; | |
85 arrange(); | |
86 } | |
87 | |
88 | |
89 void | |
79 sel(void *aux) | 90 sel(void *aux) |
80 { | 91 { |
81 const char *arg = aux; | 92 const char *arg = aux; |
82 Client *c = NULL; | 93 Client *c = NULL; |
83 | 94 |
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) |
383 free(c); | 394 free(c); |
384 | 395 |
385 XFlush(dpy); | 396 XFlush(dpy); |
386 XSetErrorHandler(error_handler); | 397 XSetErrorHandler(error_handler); |
387 XUngrabServer(dpy); | 398 XUngrabServer(dpy); |
388 arrange(NULL); | 399 arrange(); |
389 if(stack) | 400 if(stack) |
390 focus(stack); | 401 focus(stack); |
391 } | 402 } |
392 | 403 |
393 Client * | 404 Client * |
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 } |