[mutter/gnome-3-28] window: Really propagate effective on-all-workspaces setting to transients



commit f3420b0341c825c410aa33ab0b1c20fd754ee95b
Author: Florian Müllner <fmuellner gnome org>
Date:   Sat Mar 21 18:24:52 2020 +0100

    window: Really propagate effective on-all-workspaces setting to transients
    
    Commit cda9579034b fixed a corner case when setting the initial workspace
    state of transient windows, but it still missed a case:
    
    should_be_on_all_workspaces() returns whether the window should be on all
    workspaces according to its properties/placement, but it doesn't take
    transient relations into account.
    
    That means in case of nested transients, we can still fail the assert:
    
     1. on-all-workspaces toplevel
     2. should_be_on_all_workspaces() is TRUE for the first transient's parent,
        as the window from (1) has on_all_workspaces_requested == TRUE
     3. should_be_on_all_workspaces() is FALSE for the second transient's
        parent, as the window from (2) is only on-all-workspace because
        of its parent
    
    We can fix this by either using the state from the root ancestor
    instead of the direct transient parent, or by using the parent's
    on_all_workspaces_state.
    
    The latter is simpler, so go with that.
    
    https://gitlab.gnome.org/GNOME/mutter/issues/1083

 src/core/window.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index b8d67347e..c5f6fa5cd 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -1272,7 +1272,7 @@ _meta_window_shared_new (MetaDisplay         *display,
                       window->desc, window->transient_for->desc);
 
           set_workspace_state (window,
-                               should_be_on_all_workspaces (window->transient_for),
+                               window->transient_for->on_all_workspaces,
                                window->transient_for->workspace);
         }
       else if (window->on_all_workspaces)


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