diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index 65ec623c9..70d723c19 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -888,6 +888,31 @@ const WindowManager = new Lang.Class({ Main.activateWindow(nextWindow); }, + insertWorkspace: function(pos) { + if (!Meta.prefs_get_dynamic_workspaces()) + return; + + let windows = global.get_window_actors().map(function(winActor) { + return winActor.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(function(window) { + // If the window is attached to an ancestor, we don't need/want + // to move it + if (window.get_transient_for() != null) + 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); + }); + }, + + keepWorkspaceAlive: function(workspace, duration) { if (!this._workspaceTracker) return; diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index 3adc32711..df8bc5563 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -795,35 +795,13 @@ const ThumbnailsBox = new Lang.Class({ let isWindow = !!source.realWindow; - // To create a new workspace, we first slide all the windows on workspaces - // below us to the next workspace, leaving a blank workspace for us to recycle. let newWorkspaceIndex; [newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1]; - - // Nab all the windows below us. - let windows = global.get_window_actors().filter(function(winActor) { - // If the window is attached to an ancestor, we don't need/want to move it - let window = winActor.meta_window; - - if (window.get_transient_for() != null) - return false; - - if (isWindow) - return window.get_workspace().index() >= newWorkspaceIndex && winActor != source; - else - return window.get_workspace().index() >= newWorkspaceIndex; - }); - this._spliceIndex = newWorkspaceIndex; - // ... move them down one. - windows.forEach(function(winActor) { - let window = winActor.meta_window; - window.change_workspace_by_index(window.get_workspace().index() + 1, true); - }); + Main.wm.insertWorkspace(newWorkspaceIndex); if (isWindow) { - // ... and bam, a workspace, good as new. // Move the window to our monitor first if necessary. let thumbMonitor = this._thumbnails[newWorkspaceIndex].monitorIndex; if (source.metaWindow.get_monitor() != thumbMonitor)