diff options
author | Anselm R. Garbe <arg@10kloc.org> | 2006-08-29 15:28:29 +0200 |
---|---|---|
committer | Anselm R. Garbe <arg@10kloc.org> | 2006-08-29 15:28:29 +0200 |
commit | c3c94c0e0a4da1562b040a17ee670312ad8e65af (patch) | |
tree | 659b49912cef4ca871d9fcde44cf504676570433 | |
parent | 9d739090750ffb3b3a64e86e2331215b8901c360 (diff) | |
download | dwm-c3c94c0e0a4da1562b040a17ee670312ad8e65af.tar.gz dwm-c3c94c0e0a4da1562b040a17ee670312ad8e65af.tar.bz2 dwm-c3c94c0e0a4da1562b040a17ee670312ad8e65af.zip |
improved selection policy
-rw-r--r-- | view.c | 44 |
1 files changed, 24 insertions, 20 deletions
@@ -3,31 +3,39 @@ * See LICENSE file for license details. */ #include "dwm.h" +#include <stdio.h> /* static */ +static Client * +minclient() +{ + Client *c, *min; + + for(min = c = clients; c; c = c->next) + if(c->weight < min->weight) + min = c; + return min; +} + + static void reorder() { - Client *c, *orig, *p; + Client *c, *newclients, *tail; - orig = clients; - clients = NULL; - - while((c = orig)) { - orig = orig->next; + newclients = tail = NULL; + while((c = minclient())) { detach(c); - - for(p = clients; p && p->next && p->weight <= c->weight; p = p->next); - c->prev = p; - if(p) { - if((c->next = p->next)) - c->next->prev = c; - p->next = c; + if(tail) { + c->prev = tail; + tail->next = c; + tail = c; } else - clients = c; + tail = newclients = c; } + clients = newclients; } /* extern */ @@ -59,9 +67,7 @@ dofloat(Arg *arg) else ban(c); } - if(!sel || !isvisible(sel)) - sel = getnext(clients); - if(sel) + if((sel = getnext(clients))) focus(sel); else XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); @@ -124,9 +130,7 @@ dotile(Arg *arg) else ban(c); } - if(!sel || !isvisible(sel)) - sel = getnext(clients); - if(sel) + if((sel = getnext(clients))) focus(sel); else XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); |