Mercurial > dwm-meillo
comparison view.c @ 651:b9f4efd21473
added MODKEY-{plus,minus} shortcuts (increasing/decreasing master clients)
author | Anselm R. Garbe <arg@suckless.org> |
---|---|
date | Fri, 05 Jan 2007 14:48:16 +0100 |
parents | f3b8c71a69d4 |
children | 04734db9a219 |
comparison
equal
deleted
inserted
replaced
650:f3b8c71a69d4 | 651:b9f4efd21473 |
---|---|
7 | 7 |
8 static Client * | 8 static Client * |
9 nexttiled(Client *c) { | 9 nexttiled(Client *c) { |
10 for(c = getnext(c); c && c->isfloat; c = getnext(c->next)); | 10 for(c = getnext(c); c && c->isfloat; c = getnext(c->next)); |
11 return c; | 11 return c; |
12 } | |
13 | |
14 static Bool | |
15 ismaster(Client *c) { | |
16 Client *cl; | |
17 unsigned int i; | |
18 | |
19 for(cl = nexttiled(clients), i = 0; cl && cl != c; cl = nexttiled(cl->next), i++); | |
20 return i < nmaster; | |
21 } | |
22 | |
23 static void | |
24 pop(Client *c) { | |
25 detach(c); | |
26 if(clients) | |
27 clients->prev = c; | |
28 c->next = clients; | |
29 clients = c; | |
30 } | |
31 | |
32 static void | |
33 swap(Client *c1, Client *c2) { | |
34 Client tmp = *c1; | |
35 Client *cp = c1->prev; | |
36 Client *cn = c1->next; | |
37 | |
38 *c1 = *c2; | |
39 c1->prev = cp; | |
40 c1->next = cn; | |
41 cp = c2->prev; | |
42 cn = c2->next; | |
43 *c2 = tmp; | |
44 c2->prev = cp; | |
45 c2->next = cn; | |
12 } | 46 } |
13 | 47 |
14 static void | 48 static void |
15 togglemax(Client *c) { | 49 togglemax(Client *c) { |
16 XEvent ev; | 50 XEvent ev; |
30 c->w = c->rw; | 64 c->w = c->rw; |
31 c->h = c->rh; | 65 c->h = c->rh; |
32 } | 66 } |
33 resize(c, True, TopLeft); | 67 resize(c, True, TopLeft); |
34 while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | 68 while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); |
69 } | |
70 | |
71 static Client * | |
72 topofstack() { | |
73 Client *c; | |
74 unsigned int i; | |
75 | |
76 for(c = nexttiled(clients), i = 0; c && i < nmaster; c = nexttiled(c->next), i++); | |
77 return (i < nmaster) ? NULL : c; | |
35 } | 78 } |
36 | 79 |
37 /* extern */ | 80 /* extern */ |
38 | 81 |
39 void (*arrange)(void) = DEFMODE; | 82 void (*arrange)(void) = DEFMODE; |
246 arrange(); | 289 arrange(); |
247 } | 290 } |
248 | 291 |
249 void | 292 void |
250 zoom(Arg *arg) { | 293 zoom(Arg *arg) { |
251 unsigned int i, n; | 294 unsigned int n; |
252 Client *c; | 295 Client *c; |
253 | 296 |
254 if(!sel) | 297 if(!sel) |
255 return; | 298 return; |
256 if(sel->isfloat || (arrange == dofloat)) { | 299 if(sel->isfloat || (arrange == dofloat)) { |
260 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) | 303 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) |
261 n++; | 304 n++; |
262 if(n <= nmaster || (arrange == dofloat)) | 305 if(n <= nmaster || (arrange == dofloat)) |
263 return; | 306 return; |
264 | 307 |
265 for(c = nexttiled(clients), i = 0; c && (c != sel) && i < nmaster; c = nexttiled(c->next)) | 308 if(ismaster((c = sel))) { |
266 i++; | 309 if(!(c = topofstack())) |
267 if(c == sel && i < nmaster) | 310 return; |
268 for(; c && i < nmaster; c = nexttiled(c->next)) | 311 swap(c, sel); |
269 i++; | 312 c = sel; |
270 if(!c) | 313 } |
271 return; | 314 else |
272 | 315 pop(c); |
273 detach(c); | 316 |
274 if(clients) | |
275 clients->prev = c; | |
276 c->next = clients; | |
277 clients = c; | |
278 focus(c); | 317 focus(c); |
279 arrange(); | 318 arrange(); |
280 } | 319 } |