Ignore enters on windows that are raised over focused window while being mapped.
This commit is contained in:
parent
be9637e403
commit
73608702b8
2 changed files with 12 additions and 11 deletions
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue