added isdestroyed flag to unmanage

master
Anselm R Garbe 2009-09-08 13:13:03 +01:00
parent 9c066c24b3
commit a3a859b4e9
1 changed files with 16 additions and 15 deletions

31
dwm.c
View File

@ -218,7 +218,7 @@ static void togglefloating(const Arg *arg);
static void toggletag(const Arg *arg); static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg); static void toggleview(const Arg *arg);
static void unfocus(Client *c); static void unfocus(Client *c);
static void unmanage(Client *c); static void unmanage(Client *c, Bool isdestroyed);
static void unmapnotify(XEvent *e); static void unmapnotify(XEvent *e);
static void updategeom(void); static void updategeom(void);
static void updatebarpos(Monitor *m); static void updatebarpos(Monitor *m);
@ -466,7 +466,7 @@ cleanup(void) {
selmon->lt[selmon->sellt] = &foo; selmon->lt[selmon->sellt] = &foo;
for(m = mons; m; m = m->next) for(m = mons; m; m = m->next)
while(m->stack) while(m->stack)
unmanage(m->stack); unmanage(m->stack, False);
if(dc.font.set) if(dc.font.set)
XFreeFontSet(dpy, dc.font.set); XFreeFontSet(dpy, dc.font.set);
else else
@ -595,7 +595,7 @@ destroynotify(XEvent *e) {
XDestroyWindowEvent *ev = &e->xdestroywindow; XDestroyWindowEvent *ev = &e->xdestroywindow;
if((c = wintoclient(ev->window))) if((c = wintoclient(ev->window)))
unmanage(c); unmanage(c, True);
} }
void void
@ -1626,24 +1626,25 @@ unfocus(Client *c) {
} }
void void
unmanage(Client *c) { unmanage(Client *c, Bool isdestroyed) {
XWindowChanges wc; XWindowChanges wc;
wc.border_width = c->oldbw;
/* The server grab construct avoids race conditions. */ /* The server grab construct avoids race conditions. */
XGrabServer(dpy);
XSetErrorHandler(xerrordummy);
XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
detach(c); detach(c);
detachstack(c); detachstack(c);
XUngrabButton(dpy, AnyButton, AnyModifier, c->win); if(!isdestroyed) {
setclientstate(c, WithdrawnState); 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); free(c);
XSync(dpy, False);
XSetErrorHandler(xerror);
XUngrabServer(dpy);
focus(NULL); focus(NULL);
arrange();
} }
void void
@ -1652,7 +1653,7 @@ unmapnotify(XEvent *e) {
XUnmapEvent *ev = &e->xunmap; XUnmapEvent *ev = &e->xunmap;
if((c = wintoclient(ev->window))) if((c = wintoclient(ev->window)))
unmanage(c); unmanage(c, False);
} }
void void