g_assert(self != NULL);
+ /* we dont want events no more. do this before hiding the frame so we
+ don't generate more events */
+ XSelectInput(ob_display, self->window, NoEventMask);
+
frame_hide(self->frame);
- /* sync to send the hide to the server quickly, and to get back the enter
- events */
- XSync(ob_display, FALSE);
+ /* flush to send the hide to the server quickly */
+ XFlush(ob_display);
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));
+ /* ignore enter events from the unmap so it doesnt mess with the focus
+ */
+ event_ignore_queued_enters();
}
/* 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);
-
/* update the focus lists */
focus_order_remove(self);