changed ban/unban implementation to not move the windows anymore, but map/unmap them instead - PLEASE TEST THIS
This commit is contained in:
		
							parent
							
								
									4b9337a01e
								
							
						
					
					
						commit
						a54cf2ecef
					
				
							
								
								
									
										17
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								client.c
									
									
									
									
									
								
							| @ -98,10 +98,12 @@ attach(Client *c) { | |||||||
| 
 | 
 | ||||||
| void | void | ||||||
| ban(Client *c) { | ban(Client *c) { | ||||||
| 	if (c->isbanned) | 	if(c->isbanned) | ||||||
| 		return; | 		return; | ||||||
| 	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | 	XUnmapWindow(dpy, c->win); | ||||||
|  | 	setclientstate(c, IconicState); | ||||||
| 	c->isbanned = True; | 	c->isbanned = True; | ||||||
|  | 	c->unmapped++; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| @ -135,7 +137,7 @@ detach(Client *c) { | |||||||
| 
 | 
 | ||||||
| void | void | ||||||
| focus(Client *c) { | focus(Client *c) { | ||||||
| 	if((!c && selscreen)|| (c && !isvisible(c))) | 	if((!c && selscreen) || (c && !isvisible(c))) | ||||||
| 		for(c = stack; c && !isvisible(c); c = c->snext); | 		for(c = stack; c && !isvisible(c); c = c->snext); | ||||||
| 	if(sel && sel != c) { | 	if(sel && sel != c) { | ||||||
| 		grabbuttons(sel, False); | 		grabbuttons(sel, False); | ||||||
| @ -224,9 +226,7 @@ manage(Window w, XWindowAttributes *wa) { | |||||||
| 		c->isfloating = (rettrans == Success) || c->isfixed; | 		c->isfloating = (rettrans == Success) || c->isfixed; | ||||||
| 	attach(c); | 	attach(c); | ||||||
| 	attachstack(c); | 	attachstack(c); | ||||||
| 	ban(c); | 	c->isbanned = True; | ||||||
| 	XMapWindow(dpy, w); |  | ||||||
| 	setclientstate(c, NormalState); |  | ||||||
| 	focus(c); | 	focus(c); | ||||||
| 	lt->arrange(); | 	lt->arrange(); | ||||||
| } | } | ||||||
| @ -308,9 +308,10 @@ togglefloating(const char *arg) { | |||||||
| 
 | 
 | ||||||
| void | void | ||||||
| unban(Client *c) { | unban(Client *c) { | ||||||
| 	if (!c->isbanned) | 	if(!c->isbanned) | ||||||
| 		return; | 		return; | ||||||
| 	XMoveWindow(dpy, c->win, c->x, c->y); | 	XMapWindow(dpy, c->win); | ||||||
|  | 	setclientstate(c, NormalState); | ||||||
| 	c->isbanned = False; | 	c->isbanned = False; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| # dwm version
 | # dwm version
 | ||||||
| VERSION = 4.3 | VERSION = 4.4 | ||||||
| 
 | 
 | ||||||
| # Customize below to fit your system
 | # Customize below to fit your system
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								dwm.h
									
									
									
									
									
								
							| @ -48,6 +48,7 @@ struct Client { | |||||||
| 	int rx, ry, rw, rh; /* revert geometry */ | 	int rx, ry, rw, rh; /* revert geometry */ | ||||||
| 	int basew, baseh, incw, inch, maxw, maxh, minw, minh; | 	int basew, baseh, incw, inch, maxw, maxh, minw, minh; | ||||||
| 	int minax, maxax, minay, maxay; | 	int minax, maxax, minay, maxay; | ||||||
|  | 	int unmapped; | ||||||
| 	long flags;  | 	long flags;  | ||||||
| 	unsigned int border, oldborder; | 	unsigned int border, oldborder; | ||||||
| 	Bool isbanned, isfixed, ismax, isfloating; | 	Bool isbanned, isfixed, ismax, isfloating; | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								event.c
									
									
									
									
									
								
							| @ -336,8 +336,10 @@ unmapnotify(XEvent *e) { | |||||||
| 	Client *c; | 	Client *c; | ||||||
| 	XUnmapEvent *ev = &e->xunmap; | 	XUnmapEvent *ev = &e->xunmap; | ||||||
| 
 | 
 | ||||||
| 	if((c = getclient(ev->window))) | 	if((c = getclient(ev->window)) && (ev->event == root)) { | ||||||
| 		unmanage(c); | 		if(ev->send_event || c->unmapped-- == 0) | ||||||
|  | 			unmanage(c); | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* extern */ | /* extern */ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user