diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-04-22 13:53:28 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-04-22 13:53:28 +0000 |
| commit | a70633d42af849e4de2288ec48fa6abe726a484e (patch) | |
| tree | 22dfc3a9a5328ccfa2c44bdf5494a611c297203f /openbox/client.c | |
| parent | 63f1b1230c529c2c2b335a4becfae5cd15c0d9a4 (diff) | |
eat enter events after unmanaging a window
change how focus falls back for windows being unmanaged, don't fall back immediately, instead wait for the focus out event and use it (break stuff maybe! yay)
Diffstat (limited to 'openbox/client.c')
| -rw-r--r-- | openbox/client.c | 36 |
1 files changed, 5 insertions, 31 deletions
diff --git a/openbox/client.c b/openbox/client.c index e801ac18..e7af5701 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -77,7 +77,6 @@ static void client_apply_startup_state(ObClient *self, gint x, gint y); static void client_restore_session_state(ObClient *self); static void client_restore_session_stacking(ObClient *self); static ObAppSettings *client_get_settings_state(ObClient *self); -static void client_unfocus(ObClient *self); void client_startup(gboolean reconfig) { @@ -507,8 +506,8 @@ void client_unmanage(ObClient *self) g_assert(self != NULL); - /* update the focus lists */ - focus_order_remove(self); + frame_hide(self->frame); + XSync(ob_display, FALSE); if (focus_client == self) { XEvent e; @@ -516,20 +515,8 @@ void client_unmanage(ObClient *self) /* 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); @@ -540,6 +527,9 @@ void client_unmanage(ObClient *self) /* we dont want events no more */ XSelectInput(ob_display, self->window, NoEventMask); + /* update the focus lists */ + focus_order_remove(self); + client_list = g_list_remove(client_list, self); stacking_remove(self); g_hash_table_remove(window_map, &self->window); @@ -639,9 +629,6 @@ void client_unmanage(ObClient *self) /* update the list hints */ client_set_list(); - - if (config_focus_last) - grab_pointer(FALSE, OB_CURSOR_NONE); } static ObAppSettings *client_get_settings_state(ObClient *self) @@ -3054,19 +3041,6 @@ gboolean client_focus(ObClient *self) return TRUE; } -/* Used when the current client is closed or otherwise hidden, focus_last will - then prevent focus from going to the mouse pointer -*/ -static void client_unfocus(ObClient *self) -{ - if (focus_client == self) { -#ifdef DEBUG_FOCUS - ob_debug("client_unfocus for %lx\n", self->window); -#endif - focus_fallback(FALSE); - } -} - void client_activate(ObClient *self, gboolean here, gboolean user) { guint32 last_time = focus_client ? focus_client->user_time : CurrentTime; |
