[gnome-shell] Revert "windowManager: Use new reorder_workspace() API"
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Revert "windowManager: Use new reorder_workspace() API"
- Date: Tue, 8 Oct 2019 21:12:50 +0000 (UTC)
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]