commit a3a859b4e93d65fd22619449d18e0437d5c2774b
parent 9c066c24b3d0b7767651f0f403db2e4007a847c8
Author: Anselm R Garbe <garbeam@gmail.com>
Date: Tue, 8 Sep 2009 13:13:03 +0100
added isdestroyed flag to unmanage
Diffstat:
M | dwm.c | | | 31 | ++++++++++++++++--------------- |
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/dwm.c b/dwm.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 @@ cleanup(void) {
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 @@ destroynotify(XEvent *e) {
XDestroyWindowEvent *ev = &e->xdestroywindow;
if((c = wintoclient(ev->window)))
- unmanage(c);
+ unmanage(c, True);
}
void
@@ -1626,24 +1626,25 @@ unfocus(Client *c) {
}
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 @@ unmapnotify(XEvent *e) {
XUnmapEvent *ev = &e->xunmap;
if((c = wintoclient(ev->window)))
- unmanage(c);
+ unmanage(c, False);
}
void