Mercurial > aewl
comparison view.c @ 381:b00cc483d13b
still something wrong with reorder()
author | Anselm R. Garbe <arg@10kloc.org> |
---|---|
date | Tue, 29 Aug 2006 13:40:09 +0200 |
parents | 4bf79305d675 |
children | 76b62c0c8c11 |
comparison
equal
deleted
inserted
replaced
380:4bf79305d675 | 381:b00cc483d13b |
---|---|
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 } |