added ban() which takes care than a banned window is not banned again... (this reduces the overall ConfigureNotify's to clients)
Anselm R. Garbe arg@suckless.org
Wed, 14 Feb 2007 14:01:12 +0100
M
client.c
→
client.c
@@ -68,6 +68,14 @@
/* 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 @@ clients->prev = c;
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))
M
dwm.h
→
dwm.h
@@ -73,7 +73,7 @@ int basew, baseh, incw, inch, maxw, maxh, minw, minh;
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 */
M
view.c
→
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 @@ tw = waw - mw;
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 @@ resize(c, False);
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);