windowManager: Use new reorder_workspace() API
With the new Mutter API, inserting a workspace at a particular position becomes as easy as creating the workspace and moving it to the desired index. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/620
This commit is contained in:
parent
68e45eb051
commit
ff9bb5399b
@ -1203,41 +1203,9 @@ var WindowManager = class {
|
|||||||
if (!Meta.prefs_get_dynamic_workspaces())
|
if (!Meta.prefs_get_dynamic_workspaces())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
workspaceManager.append_new_workspace(false, global.get_current_time());
|
let newWs = workspaceManager.append_new_workspace(
|
||||||
|
false, global.get_current_time());
|
||||||
let windows = global.get_window_actors().map(a => a.meta_window);
|
workspaceManager.reorder_workspace(newWs, pos);
|
||||||
|
|
||||||
// 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) {
|
keepWorkspaceAlive(workspace, duration) {
|
||||||
|
Loading…
Reference in New Issue
Block a user