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 }