[mutter/wip/exalm/focused-appearance: 1/4] stack: Check workspace in get_default_focus_window()



commit 6db1440c48b5eb1d744ff6b559364777cf9cc0cc
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date:   Sat Oct 12 23:53:19 2019 +0500

    stack: Check workspace in get_default_focus_window()
    
    Check against the window argument, instead of active workspace.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/850

 src/core/stack.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
---
diff --git a/src/core/stack.c b/src/core/stack.c
index 1a05de264..75062865e 100644
--- a/src/core/stack.c
+++ b/src/core/stack.c
@@ -33,6 +33,7 @@
 #include "cogl/cogl-trace.h"
 #include "core/frame.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"
@@ -1150,7 +1151,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;
@@ -1161,7 +1163,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 (workspace != NULL && g_list_find (workspace->windows, window) == NULL)
     return FALSE;
 
   if (window->type == META_WINDOW_DOCK)
@@ -1197,7 +1202,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))
@@ -1268,7 +1273,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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]