all repos — dwm @ a3a859b4e93d65fd22619449d18e0437d5c2774b

my dwm build

added isdestroyed flag to unmanage
Anselm R Garbe garbeam@gmail.com
Tue, 08 Sep 2009 13:13:03 +0100
commit

a3a859b4e93d65fd22619449d18e0437d5c2774b

parent

9c066c24b3d0b7767651f0f403db2e4007a847c8

1 files changed, 16 insertions(+), 15 deletions(-)

jump to
M dwm.cdwm.c

@@ -218,7 +218,7 @@ static void togglefloating(const Arg *arg);

static void toggletag(const Arg *arg); static void toggleview(const Arg *arg); static void unfocus(Client *c); -static void unmanage(Client *c); +static void unmanage(Client *c, Bool isdestroyed); static void unmapnotify(XEvent *e); static void updategeom(void); static void updatebarpos(Monitor *m);

@@ -466,7 +466,7 @@ view(&a);

selmon->lt[selmon->sellt] = &foo; for(m = mons; m; m = m->next) while(m->stack) - unmanage(m->stack); + unmanage(m->stack, False); if(dc.font.set) XFreeFontSet(dpy, dc.font.set); else

@@ -595,7 +595,7 @@ Client *c;

XDestroyWindowEvent *ev = &e->xdestroywindow; if((c = wintoclient(ev->window))) - unmanage(c); + unmanage(c, True); } void

@@ -1626,24 +1626,25 @@ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);

} void -unmanage(Client *c) { +unmanage(Client *c, Bool isdestroyed) { XWindowChanges wc; - wc.border_width = c->oldbw; /* The server grab construct avoids race conditions. */ - XGrabServer(dpy); - XSetErrorHandler(xerrordummy); - XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ detach(c); detachstack(c); - XUngrabButton(dpy, AnyButton, AnyModifier, c->win); - setclientstate(c, WithdrawnState); + if(!isdestroyed) { + wc.border_width = c->oldbw; + XGrabServer(dpy); + XSetErrorHandler(xerrordummy); + XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ + XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + setclientstate(c, WithdrawnState); + XSync(dpy, False); + XSetErrorHandler(xerror); + XUngrabServer(dpy); + } free(c); - XSync(dpy, False); - XSetErrorHandler(xerror); - XUngrabServer(dpy); focus(NULL); - arrange(); } void

@@ -1652,7 +1653,7 @@ Client *c;

XUnmapEvent *ev = &e->xunmap; if((c = wintoclient(ev->window))) - unmanage(c); + unmanage(c, False); } void