diff options
| -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); | 
