diff options
| author | Anselm R. Garbe <arg@10kloc.org> | 2006-08-29 13:40:09 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <arg@10kloc.org> | 2006-08-29 13:40:09 +0200 | 
| commit | 9d739090750ffb3b3a64e86e2331215b8901c360 (patch) | |
| tree | 6670ab450bf962433c148a6ff30107a411b6fb27 | |
| parent | 016c54196e682ae8658854febb746b0437a010dc (diff) | |
| download | dwm-9d739090750ffb3b3a64e86e2331215b8901c360.tar.gz | |
still something wrong with reorder()
| -rw-r--r-- | client.c | 5 | ||||
| -rw-r--r-- | dwm.h | 3 | ||||
| -rw-r--r-- | tag.c | 6 | ||||
| -rw-r--r-- | view.c | 75 | 
4 files changed, 33 insertions, 56 deletions
| @@ -241,7 +241,10 @@ manage(Window w, XWindowAttributes *wa)  			|| (c->maxw && c->minw &&  				c->maxw == c->minw && c->maxh == c->minh); -	attach(c); +	if(clients) +		clients->prev = c; +	c->next = clients; +	clients = c;  	settitle(c);  	if(isvisible(c)) @@ -56,7 +56,7 @@ struct Client {  	int basew, baseh, incw, inch, maxw, maxh, minw, minh;  	int grav;  	long flags;  -	unsigned int border; +	unsigned int border, weight;  	Bool isfloat;  	Bool ismax;  	Bool *tags; @@ -127,7 +127,6 @@ extern void *erealloc(void *ptr, unsigned int size);  extern void spawn(Arg *arg);  /* view.c */ -extern void attach(Client *c);  extern void detach(Client *c);  extern void dofloat(Arg *arg);  extern void dotile(Arg *arg); @@ -106,6 +106,8 @@ settags(Client *c)  	if(!matched)  		for(i = 0; i < ntags; i++)  			c->tags[i] = seltag[i]; +	for(i = 0; i < ntags && !c->tags[i]; i++); +	c->weight = i;  }  void @@ -120,8 +122,6 @@ tag(Arg *arg)  		sel->tags[i] = False;  	sel->tags[arg->i] = True;  	settitle(sel); -	detach(sel); -	attach(sel);  	if(!isvisible(sel))  		arrange(NULL);  	else @@ -141,8 +141,6 @@ toggletag(Arg *arg)  	if(i == ntags)  		sel->tags[arg->i] = True;  	settitle(sel); -	detach(sel); -	attach(sel);  	if(!isvisible(sel))  		arrange(NULL);  	else @@ -6,62 +6,34 @@  /* static */ -static Client * -getslot(Client *c) +static void +reorder()  { -	unsigned int i, tic; -	Client *p; - -	for(tic = 0; tic < ntags && !c->tags[tic]; tic++); -	for(p = clients; p; p = p->next) { -		for(i = 0; i < ntags && !p->tags[i]; i++); -		if(tic < i) -			return p; -	} -	return p; -} +	Client *c, *orig, *p; -static Client * -tail() -{ -	Client *c; -	for(c = clients; c && c->next; c = c->next); -	return c; -} +	orig = clients; +	clients = NULL; -/* extern */ +	while((c = orig)) { +		orig = orig->next; +		detach(c); -void (*arrange)(Arg *) = DEFMODE; - -void -attach(Client *c) -{ -	Client *p; - -	if(!clients) { -		clients = c; -		return; -	} -	if(!(p = getnext(clients)) && !(p = getslot(c))) { -		p = tail(); +		for(p = clients; p && p->next && p->weight <= c->weight; p = p->next);  		c->prev = p; -		p->next = c; -		return; -	} - -	if(p == clients) { -		c->next = clients; -		clients->prev = c; -		clients = c; -	} -	else { -		p->prev->next = c; -		c->prev = p->prev; -		p->prev = c; -		c->next = p; +		if(p) { +			if((c->next = p->next)) +				c->next->prev = c; +			p->next = c; +		} +		else +			clients = c;  	}  } +/* extern */ + +void (*arrange)(Arg *) = DEFMODE; +  void  detach(Client *c)  { @@ -277,6 +249,7 @@ toggleview(Arg *arg)  	for(i = 0; i < ntags && !seltag[i]; i++);  	if(i == ntags)  		seltag[arg->i] = True; /* cannot toggle last view */ +	reorder();  	arrange(NULL);  } @@ -284,10 +257,12 @@ void  view(Arg *arg)  {  	unsigned int i; +	Client *c;  	for(i = 0; i < ntags; i++)  		seltag[i] = False;  	seltag[arg->i] = True; +	reorder();  	arrange(NULL);  } @@ -303,7 +278,9 @@ zoom(Arg *arg)  		if(!(c = getnext(c->next)))  			return;  	detach(c); -	attach(c); +	c->next = clients; +	clients->prev = c; +	clients = c;  	focus(c);  	arrange(NULL);  } | 
