windowManager: Split out workspace insertion from thumbnails
We will soon allow to insert a new workspace by other means than DND in between workspace thumbnails, so move the relevant code to a new windowManager method. https://bugzilla.gnome.org/show_bug.cgi?id=665764
This commit is contained in:
parent
554de3fb24
commit
cc05d303d8
@ -888,6 +888,31 @@ const WindowManager = new Lang.Class({
|
|||||||
Main.activateWindow(nextWindow);
|
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) {
|
keepWorkspaceAlive: function(workspace, duration) {
|
||||||
if (!this._workspaceTracker)
|
if (!this._workspaceTracker)
|
||||||
return;
|
return;
|
||||||
|
@ -795,35 +795,13 @@ const ThumbnailsBox = new Lang.Class({
|
|||||||
|
|
||||||
let isWindow = !!source.realWindow;
|
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;
|
let newWorkspaceIndex;
|
||||||
[newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1];
|
[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;
|
this._spliceIndex = newWorkspaceIndex;
|
||||||
|
|
||||||
// ... move them down one.
|
Main.wm.insertWorkspace(newWorkspaceIndex);
|
||||||
windows.forEach(function(winActor) {
|
|
||||||
let window = winActor.meta_window;
|
|
||||||
window.change_workspace_by_index(window.get_workspace().index() + 1, true);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (isWindow) {
|
if (isWindow) {
|
||||||
// ... and bam, a workspace, good as new.
|
|
||||||
// Move the window to our monitor first if necessary.
|
// Move the window to our monitor first if necessary.
|
||||||
let thumbMonitor = this._thumbnails[newWorkspaceIndex].monitorIndex;
|
let thumbMonitor = this._thumbnails[newWorkspaceIndex].monitorIndex;
|
||||||
if (source.metaWindow.get_monitor() != thumbMonitor)
|
if (source.metaWindow.get_monitor() != thumbMonitor)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user