aewl
diff 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 |
line diff
1.1 --- a/view.c Tue Aug 29 13:40:09 2006 +0200 1.2 +++ b/view.c Tue Aug 29 15:28:29 2006 +0200 1.3 @@ -3,31 +3,39 @@ 1.4 * See LICENSE file for license details. 1.5 */ 1.6 #include "dwm.h" 1.7 +#include <stdio.h> 1.8 1.9 /* static */ 1.10 1.11 +static Client * 1.12 +minclient() 1.13 +{ 1.14 + Client *c, *min; 1.15 + 1.16 + for(min = c = clients; c; c = c->next) 1.17 + if(c->weight < min->weight) 1.18 + min = c; 1.19 + return min; 1.20 +} 1.21 + 1.22 + 1.23 static void 1.24 reorder() 1.25 { 1.26 - Client *c, *orig, *p; 1.27 + Client *c, *newclients, *tail; 1.28 1.29 - orig = clients; 1.30 - clients = NULL; 1.31 - 1.32 - while((c = orig)) { 1.33 - orig = orig->next; 1.34 + newclients = tail = NULL; 1.35 + while((c = minclient())) { 1.36 detach(c); 1.37 - 1.38 - for(p = clients; p && p->next && p->weight <= c->weight; p = p->next); 1.39 - c->prev = p; 1.40 - if(p) { 1.41 - if((c->next = p->next)) 1.42 - c->next->prev = c; 1.43 - p->next = c; 1.44 + if(tail) { 1.45 + c->prev = tail; 1.46 + tail->next = c; 1.47 + tail = c; 1.48 } 1.49 else 1.50 - clients = c; 1.51 + tail = newclients = c; 1.52 } 1.53 + clients = newclients; 1.54 } 1.55 1.56 /* extern */ 1.57 @@ -59,9 +67,7 @@ 1.58 else 1.59 ban(c); 1.60 } 1.61 - if(!sel || !isvisible(sel)) 1.62 - sel = getnext(clients); 1.63 - if(sel) 1.64 + if((sel = getnext(clients))) 1.65 focus(sel); 1.66 else 1.67 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); 1.68 @@ -124,9 +130,7 @@ 1.69 else 1.70 ban(c); 1.71 } 1.72 - if(!sel || !isvisible(sel)) 1.73 - sel = getnext(clients); 1.74 - if(sel) 1.75 + if((sel = getnext(clients))) 1.76 focus(sel); 1.77 else 1.78 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);