diff --git a/src/core/stack.c b/src/core/stack.c index f7e0f1b90..bb14d7bd3 100644 --- a/src/core/stack.c +++ b/src/core/stack.c @@ -34,6 +34,7 @@ #include "core/frame.h" #include "core/main-private.h" #include "core/meta-workspace-manager-private.h" +#include "core/workspace-private.h" #include "core/window-private.h" #include "meta/group.h" #include "meta/prefs.h" @@ -1016,7 +1017,8 @@ window_contains_point (MetaWindow *window, } static gboolean -window_can_get_default_focus (MetaWindow *window) +window_can_get_default_focus (MetaWindow *window, + MetaWorkspace *workspace) { if (window->unmaps_pending > 0) return FALSE; @@ -1027,7 +1029,10 @@ window_can_get_default_focus (MetaWindow *window) if (!meta_window_is_focusable (window)) return FALSE; - if (!meta_window_should_be_showing (window)) + if (!meta_window_showing_on_its_workspace (window)) + return FALSE; + + if (!meta_window_located_on_workspace (window, workspace)) return FALSE; if (window->type == META_WINDOW_DOCK) @@ -1063,7 +1068,7 @@ get_default_focus_window (MetaStack *stack, if (window == not_this_one) continue; - if (!window_can_get_default_focus (window)) + if (!window_can_get_default_focus (window, workspace)) continue; if (must_be_at_point && !window_contains_point (window, root_x, root_y)) @@ -1134,7 +1139,7 @@ meta_stack_get_default_focus_candidates (MetaStack *stack, { GList *next = l->next; - if (!window_can_get_default_focus (l->data)) + if (!window_can_get_default_focus (l->data, workspace)) windows = g_list_delete_link (windows, l); l = next;