From 9d6e1a89fcd8911aa6d822b4757b463e13dcd3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 5 Sep 2018 15:27:02 +0200 Subject: [PATCH] workspaceTracker: Don't keep multiple trailing workspaces Since we always keep the active workspace until the user switches to a different one, we may end up with two empty workspaces at the end. It's not obvious to users why this happens, and there's indeed no good reason for the behavior - just remove the trailing workspace in that case. https://gitlab.gnome.org/GNOME/gnome-shell/issues/536 --- js/ui/windowManager.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index 2295e3010..0c6ab1be0 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -278,15 +278,18 @@ var WorkspaceTracker = new Lang.Class({ // If we don't have an empty workspace at the end, add one if (!emptyWorkspaces[emptyWorkspaces.length -1]) { workspaceManager.append_new_workspace(false, global.get_current_time()); - emptyWorkspaces.push(false); + emptyWorkspaces.push(true); } + let lastIndex = emptyWorkspaces.length - 1; + let lastEmptyIndex = emptyWorkspaces.lastIndexOf(false) + 1; let activeWorkspaceIndex = workspaceManager.get_active_workspace_index(); emptyWorkspaces[activeWorkspaceIndex] = false; - // Delete other empty workspaces; do it from the end to avoid index changes - for (i = emptyWorkspaces.length - 2; i >= 0; i--) { - if (emptyWorkspaces[i]) + // Delete empty workspaces except for the last one; do it from the end + // to avoid index changes + for (i = lastIndex; i >= 0; i--) { + if (emptyWorkspaces[i] && i != lastEmptyIndex) workspaceManager.remove_workspace(this._workspaces[i], global.get_current_time()); }