equal
deleted
inserted
replaced
4 */ |
4 */ |
5 #include "dwm.h" |
5 #include "dwm.h" |
6 |
6 |
7 /* static */ |
7 /* static */ |
8 |
8 |
9 static Client * |
9 static void |
10 getslot(Client *c) |
10 reorder() |
11 { |
11 { |
12 unsigned int i, tic; |
12 Client *c, *orig, *p; |
13 Client *p; |
13 |
14 |
14 orig = clients; |
15 for(tic = 0; tic < ntags && !c->tags[tic]; tic++); |
15 clients = NULL; |
16 for(p = clients; p; p = p->next) { |
16 |
17 for(i = 0; i < ntags && !p->tags[i]; i++); |
17 while((c = orig)) { |
18 if(tic < i) |
18 orig = orig->next; |
19 return p; |
19 detach(c); |
20 } |
20 |
21 return p; |
21 for(p = clients; p && p->next && p->weight <= c->weight; p = p->next); |
22 } |
22 c->prev = p; |
23 |
23 if(p) { |
24 static Client * |
24 if((c->next = p->next)) |
25 tail() |
25 c->next->prev = c; |
26 { |
26 p->next = c; |
27 Client *c; |
27 } |
28 for(c = clients; c && c->next; c = c->next); |
28 else |
29 return c; |
29 clients = c; |
|
30 } |
30 } |
31 } |
31 |
32 |
32 /* extern */ |
33 /* extern */ |
33 |
34 |
34 void (*arrange)(Arg *) = DEFMODE; |
35 void (*arrange)(Arg *) = DEFMODE; |
35 |
|
36 void |
|
37 attach(Client *c) |
|
38 { |
|
39 Client *p; |
|
40 |
|
41 if(!clients) { |
|
42 clients = c; |
|
43 return; |
|
44 } |
|
45 if(!(p = getnext(clients)) && !(p = getslot(c))) { |
|
46 p = tail(); |
|
47 c->prev = p; |
|
48 p->next = c; |
|
49 return; |
|
50 } |
|
51 |
|
52 if(p == clients) { |
|
53 c->next = clients; |
|
54 clients->prev = c; |
|
55 clients = c; |
|
56 } |
|
57 else { |
|
58 p->prev->next = c; |
|
59 c->prev = p->prev; |
|
60 p->prev = c; |
|
61 c->next = p; |
|
62 } |
|
63 } |
|
64 |
36 |
65 void |
37 void |
66 detach(Client *c) |
38 detach(Client *c) |
67 { |
39 { |
68 if(c->prev) |
40 if(c->prev) |
275 |
247 |
276 seltag[arg->i] = !seltag[arg->i]; |
248 seltag[arg->i] = !seltag[arg->i]; |
277 for(i = 0; i < ntags && !seltag[i]; i++); |
249 for(i = 0; i < ntags && !seltag[i]; i++); |
278 if(i == ntags) |
250 if(i == ntags) |
279 seltag[arg->i] = True; /* cannot toggle last view */ |
251 seltag[arg->i] = True; /* cannot toggle last view */ |
|
252 reorder(); |
280 arrange(NULL); |
253 arrange(NULL); |
281 } |
254 } |
282 |
255 |
283 void |
256 void |
284 view(Arg *arg) |
257 view(Arg *arg) |
285 { |
258 { |
286 unsigned int i; |
259 unsigned int i; |
|
260 Client *c; |
287 |
261 |
288 for(i = 0; i < ntags; i++) |
262 for(i = 0; i < ntags; i++) |
289 seltag[i] = False; |
263 seltag[i] = False; |
290 seltag[arg->i] = True; |
264 seltag[arg->i] = True; |
|
265 reorder(); |
291 arrange(NULL); |
266 arrange(NULL); |
292 } |
267 } |
293 |
268 |
294 void |
269 void |
295 zoom(Arg *arg) |
270 zoom(Arg *arg) |
301 |
276 |
302 if(c == getnext(clients)) |
277 if(c == getnext(clients)) |
303 if(!(c = getnext(c->next))) |
278 if(!(c = getnext(c->next))) |
304 return; |
279 return; |
305 detach(c); |
280 detach(c); |
306 attach(c); |
281 c->next = clients; |
|
282 clients->prev = c; |
|
283 clients = c; |
307 focus(c); |
284 focus(c); |
308 arrange(NULL); |
285 arrange(NULL); |
309 } |
286 } |