X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=e6265e93664226f5049f82660eb0d6c1ac317826;hb=51cc41e4db6295fbf9a3d2be6e8935d51ad61458;hp=05f9d0956b0e75924e4ca3a36b2f8d7fd6292d25;hpb=8aee387193fd73bbe4a8019bc7e31d5d0e18e83d;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 05f9d095..e6265e93 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -401,12 +401,22 @@ void client_unmanage(ObClient *self) influence */ screen_update_areas(); + for (it = client_destructors; it; it = g_slist_next(it)) { + GDestroyNotify func = (GDestroyNotify) it->data; + func(self); + } + if (focus_client == self) { XEvent e; /* focus the last focused window on the desktop, and ignore enter events from the unmap so it doesnt mess with the focus */ while (XCheckTypedEvent(ob_display, EnterNotify, &e)); + /* remove these flags so we don't end up getting focused in the + fallback! */ + self->can_focus = FALSE; + self->focus_notify = FALSE; + self->modal = FALSE; client_unfocus(self); } @@ -419,8 +429,8 @@ void client_unmanage(ObClient *self) ((ObClient*)it->data)->transients = g_slist_remove(((ObClient*)it->data)->transients, self); } else if (self->transient_for) { /* transient of window */ - self->transient_for->transients = - g_slist_remove(self->transient_for->transients, self); + self->transient_for->transients = + g_slist_remove(self->transient_for->transients, self); } /* tell our transients that we're gone */ @@ -431,11 +441,6 @@ void client_unmanage(ObClient *self) } } - for (it = client_destructors; it; it = g_slist_next(it)) { - GDestroyNotify func = (GDestroyNotify) it->data; - func(self); - } - /* remove from its group */ if (self->group) { group_remove(self->group, self); @@ -2511,24 +2516,24 @@ gboolean client_can_focus(ObClient *self) (self->desktop == screen_desktop || self->desktop == DESKTOP_ALL) && !self->iconic)) - return FALSE; + return FALSE; /* do a check to see if the window has already been unmapped or destroyed do this intelligently while watching out for unmaps we've generated (ignore_unmaps > 0) */ if (XCheckTypedWindowEvent(ob_display, self->window, - DestroyNotify, &ev)) { - XPutBackEvent(ob_display, &ev); - return FALSE; + DestroyNotify, &ev)) { + XPutBackEvent(ob_display, &ev); + return FALSE; } while (XCheckTypedWindowEvent(ob_display, self->window, - UnmapNotify, &ev)) { - if (self->ignore_unmaps) { - self->ignore_unmaps--; - } else { - XPutBackEvent(ob_display, &ev); - return FALSE; - } + UnmapNotify, &ev)) { + if (self->ignore_unmaps) { + self->ignore_unmaps--; + } else { + XPutBackEvent(ob_display, &ev); + return FALSE; + } } return TRUE;