added ban() which takes care than a banned window is not banned again... (this reduces the overall ConfigureNotify's to clients)

This commit is contained in:
Anselm R. Garbe 2007-02-14 14:01:12 +01:00
parent 0d095ae2ff
commit 3ce8c9f338
5 changed files with 19 additions and 7 deletions

View File

@ -67,6 +67,14 @@ xerrordummy(Display *dsply, XErrorEvent *ee) {
/* extern */ /* extern */
void
ban(Client *c) {
if(!c || c->isbanned)
return;
c->isbanned = True;
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
}
void void
configure(Client *c) { configure(Client *c) {
XConfigureEvent ce; XConfigureEvent ce;
@ -190,7 +198,7 @@ manage(Window w, XWindowAttributes *wa) {
c->next = clients; c->next = clients;
c->snext = stack; c->snext = stack;
stack = clients = c; stack = clients = c;
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); ban(c);
XMapWindow(dpy, c->win); XMapWindow(dpy, c->win);
setclientstate(c, NormalState); setclientstate(c, NormalState);
if(isvisible(c)) if(isvisible(c))

View File

@ -1,5 +1,5 @@
# dwm version # dwm version
VERSION = 3.5 VERSION = 3.6
# Customize below to fit your system # Customize below to fit your system

3
dwm.h
View File

@ -73,7 +73,7 @@ struct Client {
int minax, minay, maxax, maxay; int minax, minay, maxax, maxay;
long flags; long flags;
unsigned int border; unsigned int border;
Bool isfixed, isfloat, ismax; Bool isbanned, isfixed, isfloat, ismax;
Bool *tags; Bool *tags;
Client *next; Client *next;
Client *prev; Client *prev;
@ -99,6 +99,7 @@ extern Display *dpy;
extern Window root, barwin; extern Window root, barwin;
/* client.c */ /* client.c */
extern void ban(Client *c); /* ban c */
extern void configure(Client *c); /* send synthetic configure event */ extern void configure(Client *c); /* send synthetic configure event */
extern void focus(Client *c); /* focus c, c may be NULL */ extern void focus(Client *c); /* focus c, c may be NULL */
extern Client *getclient(Window w); /* return client of w */ extern Client *getclient(Window w); /* return client of w */

View File

@ -189,7 +189,7 @@ configurerequest(XEvent *e) {
configure(c); configure(c);
resize(c, False); resize(c, False);
if(!isvisible(c)) if(!isvisible(c))
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); ban(c);
} }
else else
configure(c); configure(c);

9
view.c
View File

@ -55,10 +55,12 @@ dofloat(void) {
Client *c; Client *c;
for(c = clients; c; c = c->next) { for(c = clients; c; c = c->next) {
if(isvisible(c)) if(isvisible(c)) {
c->isbanned = False;
resize(c, True); resize(c, True);
}
else else
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); ban(c);
} }
if(!sel || !isvisible(sel)) { if(!sel || !isvisible(sel)) {
for(c = stack; c && !isvisible(c); c = c->snext); for(c = stack; c && !isvisible(c); c = c->snext);
@ -82,6 +84,7 @@ dotile(void) {
for(i = 0, c = clients; c; c = c->next) for(i = 0, c = clients; c; c = c->next)
if(isvisible(c)) { if(isvisible(c)) {
c->isbanned = False;
if(c->isfloat) { if(c->isfloat) {
resize(c, True); resize(c, True);
continue; continue;
@ -108,7 +111,7 @@ dotile(void) {
i++; i++;
} }
else else
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); ban(c);
if(!sel || !isvisible(sel)) { if(!sel || !isvisible(sel)) {
for(c = stack; c && !isvisible(c); c = c->snext); for(c = stack; c && !isvisible(c); c = c->snext);
focus(c); focus(c);