g_assert(self != NULL);
- keyboard_grab_for_client(self, FALSE);
- mouse_grab_for_client(self, FALSE);
+ /* update the focus lists */
+ focus_order_remove(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);
+ }
/* potentially fix focusLast */
if (config_focus_last)
grab_pointer(TRUE, OB_CURSOR_NONE);
+ frame_hide(self->frame);
+ XFlush(ob_display);
+
+ keyboard_grab_for_client(self, FALSE);
+ mouse_grab_for_client(self, FALSE);
+
/* remove the window from our save set */
XChangeSaveSet(ob_display, self->window, SetModeDelete);
/* we dont want events no more */
XSelectInput(ob_display, self->window, NoEventMask);
- frame_hide(self->frame);
-
client_list = g_list_remove(client_list, self);
stacking_remove(self);
g_hash_table_remove(window_map, &self->window);
- /* update the focus lists */
- focus_order_remove(self);
-
- /* once the client is out of the list, update the struts to remove it's
+ /* once the client is out of the list, update the struts to remove its
influence */
if (STRUT_EXISTS(self->strut))
screen_update_areas();
Destructor *d = it->data;
d->func(self, d->data);
}
-
- 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);
- }
/* tell our parent(s) that we're gone */
if (self->transient_for == OB_TRAN_GROUP) { /* transient of group */