From 3ce8c9f33844a995e79329978db9d2cd3981e032 Mon Sep 17 00:00:00 2001
From: "Anselm R. Garbe" <arg@suckless.org>
Date: Wed, 14 Feb 2007 14:01:12 +0100
Subject: [PATCH] added ban() which takes care than a banned window is not
 banned again... (this reduces the overall ConfigureNotify's to clients)

---
 client.c  | 10 +++++++++-
 config.mk |  2 +-
 dwm.h     |  3 ++-
 event.c   |  2 +-
 view.c    |  9 ++++++---
 5 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/client.c b/client.c
index 486efe9..3505e76 100644
--- a/client.c
+++ b/client.c
@@ -67,6 +67,14 @@ xerrordummy(Display *dsply, XErrorEvent *ee) {
 
 /* extern */
 
+void
+ban(Client *c) {
+	if(!c || c->isbanned)
+		return;
+	c->isbanned = True;
+	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+}
+
 void
 configure(Client *c) {
 	XConfigureEvent ce;
@@ -190,7 +198,7 @@ manage(Window w, XWindowAttributes *wa) {
 	c->next = clients;
 	c->snext = stack;
 	stack = clients = c;
-	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+	ban(c);
 	XMapWindow(dpy, c->win);
 	setclientstate(c, NormalState);
 	if(isvisible(c))
diff --git a/config.mk b/config.mk
index 510fd82..d3a6ffd 100644
--- a/config.mk
+++ b/config.mk
@@ -1,5 +1,5 @@
 # dwm version
-VERSION = 3.5
+VERSION = 3.6
 
 # Customize below to fit your system
 
diff --git a/dwm.h b/dwm.h
index 674ab1e..2969ecb 100644
--- a/dwm.h
+++ b/dwm.h
@@ -73,7 +73,7 @@ struct Client {
 	int minax, minay, maxax, maxay;
 	long flags; 
 	unsigned int border;
-	Bool isfixed, isfloat, ismax;
+	Bool isbanned, isfixed, isfloat, ismax;
 	Bool *tags;
 	Client *next;
 	Client *prev;
@@ -99,6 +99,7 @@ extern Display *dpy;
 extern Window root, barwin;
 
 /* client.c */
+extern void ban(Client *c);			/* ban c */
 extern void configure(Client *c);		/* send synthetic configure event */
 extern void focus(Client *c);			/* focus c, c may be NULL */
 extern Client *getclient(Window w);		/* return client of w */
diff --git a/event.c b/event.c
index bf69d9e..8c8b997 100644
--- a/event.c
+++ b/event.c
@@ -189,7 +189,7 @@ configurerequest(XEvent *e) {
 				configure(c);
 			resize(c, False);
 			if(!isvisible(c))
-				XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+				ban(c);
 		}
 		else
 			configure(c);
diff --git a/view.c b/view.c
index 8164446..5c06027 100644
--- a/view.c
+++ b/view.c
@@ -55,10 +55,12 @@ dofloat(void) {
 	Client *c;
 
 	for(c = clients; c; c = c->next) {
-		if(isvisible(c))
+		if(isvisible(c)) {
+			c->isbanned = False;
 			resize(c, True);
+		}
 		else
-			XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+			ban(c);
 	}
 	if(!sel || !isvisible(sel)) {
 		for(c = stack; c && !isvisible(c); c = c->snext);
@@ -82,6 +84,7 @@ dotile(void) {
 
 	for(i = 0, c = clients; c; c = c->next)
 		if(isvisible(c)) {
+			c->isbanned = False;
 			if(c->isfloat) {
 				resize(c, True);
 				continue;
@@ -108,7 +111,7 @@ dotile(void) {
 			i++;
 		}
 		else
-			XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+			ban(c);
 	if(!sel || !isvisible(sel)) {
 		for(c = stack; c && !isvisible(c); c = c->snext);
 		focus(c);