[gnome-shell/wip/exalm/gestures: 428/429] workspaceAnimation: Use window clones
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/exalm/gestures: 428/429] workspaceAnimation: Use window clones
- Date: Wed, 26 Feb 2020 11:15:13 +0000 (UTC)
commit 46d5bccfc6c5736b47c9580292de067ca90b63ef
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Thu Jul 4 23:15:15 2019 +0500
workspaceAnimation: Use window clones
Instead of reparenting windows, clone them. This will allow to properly
support multi-monitor setups in subsequent commits.
Block window mapping animation while the animation is running to prevent
new windows appearing during the animation from being visible at the same
time as their clones.
Fixes https://gitlab.gnome.org/GNOME/mutter/issues/929
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/605
js/ui/workspaceAnimation.js | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
---
diff --git a/js/ui/workspaceAnimation.js b/js/ui/workspaceAnimation.js
index a5e150f2e3..1dbd873b7e 100644
--- a/js/ui/workspaceAnimation.js
+++ b/js/ui/workspaceAnimation.js
@@ -49,15 +49,19 @@ class WorkspaceGroup extends Clutter.Actor {
windows = windows.filter(w => this._shouldShowWindow(w.meta_window));
for (let window of windows) {
- let record = {
- window,
- parent: window.get_parent(),
- };
+ let clone = new Clutter.Clone({
+ source: window,
+ x: window.x,
+ y: window.y,
+ });
+
+ this.add_actor(clone);
+ window.hide();
- record.parent.remove_child(window);
- this.add_child(window);
+ let record = { window, clone };
record.windowDestroyId = window.connect('destroy', () => {
+ clone.destroy();
this._windows.splice(this._windows.indexOf(record), 1);
});
@@ -70,12 +74,11 @@ class WorkspaceGroup extends Clutter.Actor {
let w = this._windows[i];
w.window.disconnect(w.windowDestroyId);
- this.remove_child(w.window);
- w.parent.add_child(w.window);
+ w.clone.destroy();
- if (w.window.get_meta_window().get_workspace() !==
+ if (w.window.get_meta_window().get_workspace() ===
global.workspace_manager.get_active_workspace())
- w.window.hide();
+ w.window.show();
}
this._windows = [];
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]