dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 3ce8c9f33844a995e79329978db9d2cd3981e032
parent 0d095ae2ff0e8d703e4a8c9a20cd061c4bdcc6e2
Author: Anselm R. Garbe <arg@suckless.org>
Date:   Wed, 14 Feb 2007 14:01:12 +0100

added ban() which takes care than a banned window is not banned again... (this reduces the overall ConfigureNotify's to clients)
Diffstat:
Mclient.c | 10+++++++++-
Mconfig.mk | 2+-
Mdwm.h | 3++-
Mevent.c | 2+-
Mview.c | 9++++++---
5 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/client.c b/client.c
@@ -68,6 +68,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
@@ -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
@@ -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
@@ -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
@@ -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);