[mutter] stack-tracker: Don't sort O-R's under guard window on top



commit 356cad094bd711efd051c0a3126686aec4b8c6c6
Author: Jonas Ådahl <jadahl gmail com>
Date:   Thu Jul 12 10:18:54 2018 +0200

    stack-tracker: Don't sort O-R's under guard window on top
    
    As of "stack-tracker: Keep override redirect windows on top"
    (e3d5bc077d0ee5dc0368f99d22ce352c696644b9), we always sorted all
    override redirect on top of regular windows, as so is expected by
    regular override redirect windows. This had an unwanted consequence,
    however, which is that we should still not sort such override redirect
    windows on top if they are behind the guard window, as that'd result in
    windows hidden behind it now getting restacked anyway.
    
    Fix this by only sorting the override redirect windows that are found
    above the guard window on top. This fixes the override-redirect stacking
    test.

 src/core/stack-tracker.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)
---
diff --git a/src/core/stack-tracker.c b/src/core/stack-tracker.c
index ec44b61b2..2d36679b5 100644
--- a/src/core/stack-tracker.c
+++ b/src/core/stack-tracker.c
@@ -778,6 +778,18 @@ meta_stack_tracker_configure_event (MetaStackTracker    *tracker,
   stack_tracker_event_received (tracker, &op);
 }
 
+static gboolean
+meta_stack_tracker_is_guard_window (MetaStackTracker *tracker,
+                                    uint64_t          stack_id)
+{
+  MetaX11Display *x11_display = tracker->display->x11_display;
+
+  if (!x11_display)
+    return FALSE;
+
+  return stack_id == x11_display->guard_window;
+}
+
 /**
  * meta_stack_tracker_get_stack:
  * @tracker: a #MetaStackTracker
@@ -1063,7 +1075,6 @@ meta_stack_tracker_lower (MetaStackTracker *tracker,
 static void
 meta_stack_tracker_keep_override_redirect_on_top (MetaStackTracker *tracker)
 {
-  MetaWindow *window;
   guint64 *stack;
   int n_windows, i;
   int topmost_non_or;
@@ -1072,6 +1083,8 @@ meta_stack_tracker_keep_override_redirect_on_top (MetaStackTracker *tracker)
 
   for (i = n_windows - 1; i >= 0; i--)
     {
+      MetaWindow *window;
+
       window = meta_display_lookup_stack_id (tracker->display, stack[i]);
       if (window && window->layer != META_LAYER_OVERRIDE_REDIRECT)
         break;
@@ -1081,6 +1094,11 @@ meta_stack_tracker_keep_override_redirect_on_top (MetaStackTracker *tracker)
 
   for (i -= 1; i >= 0; i--)
     {
+      MetaWindow *window;
+
+      if (meta_stack_tracker_is_guard_window (tracker, stack[i]))
+        break;
+
       window = meta_display_lookup_stack_id (tracker->display, stack[i]);
       if (window && window->layer == META_LAYER_OVERRIDE_REDIRECT)
         {


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