comparison view.c @ 382:76b62c0c8c11

improved selection policy
author Anselm R. Garbe <arg@10kloc.org>
date Tue, 29 Aug 2006 15:28:29 +0200
parents b00cc483d13b
children aba385c61b3b
comparison
equal deleted inserted replaced
381:b00cc483d13b 382:76b62c0c8c11
1 /* 1 /*
2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> 2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
3 * See LICENSE file for license details. 3 * See LICENSE file for license details.
4 */ 4 */
5 #include "dwm.h" 5 #include "dwm.h"
6 #include <stdio.h>
6 7
7 /* static */ 8 /* static */
9
10 static Client *
11 minclient()
12 {
13 Client *c, *min;
14
15 for(min = c = clients; c; c = c->next)
16 if(c->weight < min->weight)
17 min = c;
18 return min;
19 }
20
8 21
9 static void 22 static void
10 reorder() 23 reorder()
11 { 24 {
12 Client *c, *orig, *p; 25 Client *c, *newclients, *tail;
13 26
14 orig = clients; 27 newclients = tail = NULL;
15 clients = NULL; 28 while((c = minclient())) {
16
17 while((c = orig)) {
18 orig = orig->next;
19 detach(c); 29 detach(c);
20 30 if(tail) {
21 for(p = clients; p && p->next && p->weight <= c->weight; p = p->next); 31 c->prev = tail;
22 c->prev = p; 32 tail->next = c;
23 if(p) { 33 tail = c;
24 if((c->next = p->next))
25 c->next->prev = c;
26 p->next = c;
27 } 34 }
28 else 35 else
29 clients = c; 36 tail = newclients = c;
30 } 37 }
38 clients = newclients;
31 } 39 }
32 40
33 /* extern */ 41 /* extern */
34 42
35 void (*arrange)(Arg *) = DEFMODE; 43 void (*arrange)(Arg *) = DEFMODE;
57 resize(c, True, TopLeft); 65 resize(c, True, TopLeft);
58 } 66 }
59 else 67 else
60 ban(c); 68 ban(c);
61 } 69 }
62 if(!sel || !isvisible(sel)) 70 if((sel = getnext(clients)))
63 sel = getnext(clients);
64 if(sel)
65 focus(sel); 71 focus(sel);
66 else 72 else
67 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); 73 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
68 restack(); 74 restack();
69 } 75 }
122 i++; 128 i++;
123 } 129 }
124 else 130 else
125 ban(c); 131 ban(c);
126 } 132 }
127 if(!sel || !isvisible(sel)) 133 if((sel = getnext(clients)))
128 sel = getnext(clients);
129 if(sel)
130 focus(sel); 134 focus(sel);
131 else 135 else
132 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); 136 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
133 restack(); 137 restack();
134 } 138 }