still something wrong with reorder()
This commit is contained in:
		
							parent
							
								
									016c54196e
								
							
						
					
					
						commit
						9d73909075
					
				
							
								
								
									
										5
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								client.c
									
									
									
									
									
								
							| @ -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)) | ||||
|  | ||||
							
								
								
									
										3
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								dwm.h
									
									
									
									
									
								
							| @ -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); | ||||
|  | ||||
							
								
								
									
										6
									
								
								tag.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tag.c
									
									
									
									
									
								
							| @ -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 | ||||
|  | ||||
							
								
								
									
										73
									
								
								view.c
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								view.c
									
									
									
									
									
								
							| @ -6,62 +6,34 @@ | ||||
| 
 | ||||
| /* static */ | ||||
| 
 | ||||
| static Client * | ||||
| getslot(Client *c) | ||||
| static void | ||||
| reorder() | ||||
| { | ||||
| 	unsigned int i, tic; | ||||
| 	Client *p; | ||||
| 	Client *c, *orig, *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; | ||||
| 	orig = clients; | ||||
| 	clients = NULL; | ||||
| 
 | ||||
| 	while((c = orig)) { | ||||
| 		orig = orig->next; | ||||
| 		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; | ||||
| 		} | ||||
| 		else | ||||
| 			clients = c; | ||||
| 	} | ||||
| 	return p; | ||||
| } | ||||
| 
 | ||||
| static Client * | ||||
| tail() | ||||
| { | ||||
| 	Client *c; | ||||
| 	for(c = clients; c && c->next; c = c->next); | ||||
| 	return c; | ||||
| } | ||||
| 
 | ||||
| /* extern */ | ||||
| 
 | ||||
| void (*arrange)(Arg *) = DEFMODE; | ||||
| 
 | ||||
| void | ||||
| attach(Client *c) | ||||
| { | ||||
| 	Client *p; | ||||
| 
 | ||||
| 	if(!clients) { | ||||
| 		clients = c; | ||||
| 		return; | ||||
| 	} | ||||
| 	if(!(p = getnext(clients)) && !(p = getslot(c))) { | ||||
| 		p = tail(); | ||||
| 		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; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 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); | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R. Garbe
						Anselm R. Garbe