diff options
| author | Dana Jansens <danakj@orodu.net> | 2011-10-26 10:30:37 -0400 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2012-09-30 14:50:00 -0400 |
| commit | 73608702b8d450ed3ccb64d5084a4f1b17fdb895 (patch) | |
| tree | b9d3ae579591f7efe6f6ff0418a7e35014e6cc85 | |
| parent | be9637e40317eb36e5a5357d3f58e3af21c81df4 (diff) | |
Ignore enters on windows that are raised over focused window while being mapped.
| -rw-r--r-- | openbox/client.c | 18 | ||||
| -rw-r--r-- | openbox/event.c | 5 |
2 files changed, 12 insertions, 11 deletions
diff --git a/openbox/client.c b/openbox/client.c index f3b4bdac..8634707c 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -203,6 +203,7 @@ void client_manage(Window window, ObPrompt *prompt) Time launch_time; guint32 user_time; gboolean obplaced; + gulong ignore_start; ob_debug("Managing window: 0x%lx", window); @@ -468,19 +469,13 @@ void client_manage(Window window, ObPrompt *prompt) /* grab mouse bindings before showing the window */ mouse_grab_for_client(self, TRUE); + if (!config_focus_under_mouse) + ignore_start = event_start_ignore_all_enters(); + /* this has to happen before we try focus the window, but we want it to happen after the client's stacking has been determined or it looks bad */ - { - gulong ignore_start; - if (!config_focus_under_mouse) - ignore_start = event_start_ignore_all_enters(); - - client_show(self); - - if (!config_focus_under_mouse) - event_end_ignore_all_enters(ignore_start); - } + client_show(self); /* activate/hilight/raise the window */ if (try_activate) { @@ -508,6 +503,9 @@ void client_manage(Window window, ObPrompt *prompt) stacking_raise(CLIENT_AS_WINDOW(self)); } + if (!config_focus_under_mouse) + event_end_ignore_all_enters(ignore_start); + /* add to client list/map */ client_list = g_list_append(client_list, self); window_add(&self->window, CLIENT_AS_WINDOW(self)); diff --git a/openbox/event.c b/openbox/event.c index 00b0bfff..e198eaa1 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -813,11 +813,14 @@ void event_enter_client(ObClient *client) g_assert(config_focus_follow); if (is_enter_focus_event_ignored(event_curserial)) { - ob_debug_type(OB_DEBUG_FOCUS, "Ignoring enter event with serial %lu\n" + ob_debug_type(OB_DEBUG_FOCUS, "Ignoring enter event with serial %lu " "on client 0x%x", event_curserial, client->window); return; } + ob_debug_type(OB_DEBUG_FOCUS, "using enter event with serial %lu " + "on client 0x%x", event_curserial, client->window); + if (client_enter_focusable(client) && client_can_focus(client)) { if (config_focus_delay) { ObFocusDelayData *data; |
