[gnome-shell] Revert "windowManager: Use new reorder_workspace() API"



commit 3d39b32a0b65da23d3e6e1513bd7388afdf0e87a
Author: Florian Müllner <fmuellner gnome org>
Date:   Tue Oct 8 20:42:20 2019 +0200

    Revert "windowManager: Use new reorder_workspace() API"
    
    It's too easy to break, so revert to the old code until we
    figure out a fix.
    
    This reverts commit ff9bb5399b1d22fceaf00c9fc8e0058f24af96cc.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/1497

 js/ui/windowManager.js | 38 +++++++++++++++++++++++++++++++++++---
 1 file changed, 35 insertions(+), 3 deletions(-)
---
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index ff2f089645..c9e48e7a3e 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -1212,9 +1212,41 @@ var WindowManager = class {
         if (!Meta.prefs_get_dynamic_workspaces())
             return;
 
-        let newWs = workspaceManager.append_new_workspace(
-            false, global.get_current_time());
-        workspaceManager.reorder_workspace(newWs, pos);
+        workspaceManager.append_new_workspace(false, global.get_current_time());
+
+        let windows = global.get_window_actors().map(a => a.meta_window);
+
+        // To create a new workspace, we slide all the windows on workspaces
+        // below us to the next workspace, leaving a blank workspace for us
+        // to recycle.
+        windows.forEach(window => {
+            // If the window is attached to an ancestor, we don't need/want
+            // to move it
+            if (window.get_transient_for() != null)
+                return;
+            // Same for OR windows
+            if (window.is_override_redirect())
+                return;
+            // Sticky windows don't need moving, in fact moving would
+            // unstick them
+            if (window.on_all_workspaces)
+                return;
+            // Windows on workspaces below pos don't need moving
+            let index = window.get_workspace().index();
+            if (index < pos)
+                return;
+            window.change_workspace_by_index(index + 1, true);
+        });
+
+        // If the new workspace was inserted before the active workspace,
+        // activate the workspace to which its windows went
+        let activeIndex = workspaceManager.get_active_workspace_index();
+        if (activeIndex >= pos) {
+            let newWs = workspaceManager.get_workspace_by_index(activeIndex + 1);
+            this._blockAnimations = true;
+            newWs.activate(global.get_current_time());
+            this._blockAnimations = false;
+        }
     }
 
     keepWorkspaceAlive(workspace, duration) {


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