changed ban/unban implementation to not move the windows anymore, but map/unmap them instead - PLEASE TEST THIS
authorAnselm R. Garbe <garbeam@gmail.com>
Sat, 28 Jul 2007 17:18:45 +0200
changeset 927 60d5a92ce85c
parent 926 6f9cf0cfe278
child 928 a692fe8c0f34
changed ban/unban implementation to not move the windows anymore, but map/unmap them instead - PLEASE TEST THIS
client.c
config.mk
dwm.h
event.c
--- a/client.c	Sat Jul 28 12:58:56 2007 +0200
+++ b/client.c	Sat Jul 28 17:18:45 2007 +0200
@@ -98,10 +98,12 @@
 
 void
 ban(Client *c) {
-	if (c->isbanned)
+	if(c->isbanned)
 		return;
-	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+	XUnmapWindow(dpy, c->win);
+	setclientstate(c, IconicState);
 	c->isbanned = True;
+	c->unmapped++;
 }
 
 void
@@ -135,7 +137,7 @@
 
 void
 focus(Client *c) {
-	if((!c && selscreen)|| (c && !isvisible(c)))
+	if((!c && selscreen) || (c && !isvisible(c)))
 		for(c = stack; c && !isvisible(c); c = c->snext);
 	if(sel && sel != c) {
 		grabbuttons(sel, False);
@@ -224,9 +226,7 @@
 		c->isfloating = (rettrans == Success) || c->isfixed;
 	attach(c);
 	attachstack(c);
-	ban(c);
-	XMapWindow(dpy, w);
-	setclientstate(c, NormalState);
+	c->isbanned = True;
 	focus(c);
 	lt->arrange();
 }
@@ -308,9 +308,10 @@
 
 void
 unban(Client *c) {
-	if (!c->isbanned)
+	if(!c->isbanned)
 		return;
-	XMoveWindow(dpy, c->win, c->x, c->y);
+	XMapWindow(dpy, c->win);
+	setclientstate(c, NormalState);
 	c->isbanned = False;
 }
 
--- a/config.mk	Sat Jul 28 12:58:56 2007 +0200
+++ b/config.mk	Sat Jul 28 17:18:45 2007 +0200
@@ -1,5 +1,5 @@
 # dwm version
-VERSION = 4.3
+VERSION = 4.4
 
 # Customize below to fit your system
 
--- a/dwm.h	Sat Jul 28 12:58:56 2007 +0200
+++ b/dwm.h	Sat Jul 28 17:18:45 2007 +0200
@@ -48,6 +48,7 @@
 	int rx, ry, rw, rh; /* revert geometry */
 	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
 	int minax, maxax, minay, maxay;
+	int unmapped;
 	long flags; 
 	unsigned int border, oldborder;
 	Bool isbanned, isfixed, ismax, isfloating;
--- a/event.c	Sat Jul 28 12:58:56 2007 +0200
+++ b/event.c	Sat Jul 28 17:18:45 2007 +0200
@@ -336,8 +336,10 @@
 	Client *c;
 	XUnmapEvent *ev = &e->xunmap;
 
-	if((c = getclient(ev->window)))
-		unmanage(c);
+	if((c = getclient(ev->window)) && (ev->event == root)) {
+		if(ev->send_event || c->unmapped-- == 0)
+			unmanage(c);
+	}
 }
 
 /* extern */