workspaceAnimation: Add a background
In future we will need to use window clones to better support multiple monitors. To avoid having to hide every window, show wallpapers behind the workspace transition: one per monitor. Put the wallpaper into a separate class right away, later it will be useful to make the animation per-monitor. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1326
This commit is contained in:
parent
407abeb178
commit
9d1fe27221
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
const { Clutter, GObject, Meta, Shell } = imports.gi;
|
const { Clutter, GObject, Meta, Shell } = imports.gi;
|
||||||
|
|
||||||
|
const Background = imports.ui.background;
|
||||||
|
const Layout = imports.ui.layout;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const SwipeTracker = imports.ui.swipeTracker;
|
const SwipeTracker = imports.ui.swipeTracker;
|
||||||
|
|
||||||
@ -85,6 +87,32 @@ class WorkspaceGroup extends Clutter.Actor {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const MonitorGroup = GObject.registerClass(
|
||||||
|
class MonitorGroup extends Clutter.Actor {
|
||||||
|
_init(monitor) {
|
||||||
|
super._init();
|
||||||
|
|
||||||
|
const constraint = new Layout.MonitorConstraint({ index: monitor.index });
|
||||||
|
this.add_constraint(constraint);
|
||||||
|
|
||||||
|
const background = new Meta.BackgroundGroup();
|
||||||
|
|
||||||
|
this.add_child(background);
|
||||||
|
|
||||||
|
this._bgManager = new Background.BackgroundManager({
|
||||||
|
container: background,
|
||||||
|
monitorIndex: monitor.index,
|
||||||
|
controlPosition: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
this._bgManager.destroy();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var WorkspaceAnimationController = class {
|
var WorkspaceAnimationController = class {
|
||||||
constructor() {
|
constructor() {
|
||||||
this._movingWindow = null;
|
this._movingWindow = null;
|
||||||
@ -160,8 +188,13 @@ var WorkspaceAnimationController = class {
|
|||||||
|
|
||||||
switchData.container = new Clutter.Actor();
|
switchData.container = new Clutter.Actor();
|
||||||
switchData.container.add_child(switchData.curGroup);
|
switchData.container.add_child(switchData.curGroup);
|
||||||
|
switchData.backgroundGroup = new Clutter.Actor();
|
||||||
|
|
||||||
Main.uiGroup.insert_child_above(switchData.container, global.window_group);
|
for (const monitor of Main.layoutManager.monitors)
|
||||||
|
switchData.backgroundGroup.add_child(new MonitorGroup(monitor));
|
||||||
|
|
||||||
|
Main.uiGroup.insert_child_above(switchData.backgroundGroup, global.window_group);
|
||||||
|
Main.uiGroup.insert_child_above(switchData.container, switchData.backgroundGroup);
|
||||||
Main.uiGroup.insert_child_above(switchData.movingWindowBin, switchData.container);
|
Main.uiGroup.insert_child_above(switchData.movingWindowBin, switchData.container);
|
||||||
|
|
||||||
for (const dir of Object.values(Meta.MotionDirection)) {
|
for (const dir of Object.values(Meta.MotionDirection)) {
|
||||||
@ -214,6 +247,7 @@ var WorkspaceAnimationController = class {
|
|||||||
switchData.movingWindow = null;
|
switchData.movingWindow = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switchData.backgroundGroup.destroy();
|
||||||
switchData.container.destroy();
|
switchData.container.destroy();
|
||||||
switchData.movingWindowBin.destroy();
|
switchData.movingWindowBin.destroy();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user