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…
	
		Reference in New Issue