changed ban/unban implementation to not move the windows anymore, but map/unmap them instead - PLEASE TEST THIS
This commit is contained in:
		
							
								
								
									
										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 */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user