diff options
Diffstat (limited to 'js/ui/workspace.js')
-rw-r--r-- | js/ui/workspace.js | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/js/ui/workspace.js b/js/ui/workspace.js index d048dd247..4aa0e08cc 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -1521,34 +1521,39 @@ const Workspace = new Lang.Class({ this._recalculateWindowPositions(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL); }, - // Animates the return from Overview mode - zoomFromOverview : function() { + _leavingOverview: function() { let currentWorkspace = global.screen.get_active_workspace(); + if (this.metaWorkspace != null && this.metaWorkspace != currentWorkspace) + return false; this.leavingOverview = true; + this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this, + this._doneLeavingOverview)); for (let i = 0; i < this._windows.length; i++) { let clone = this._windows[i]; Tweener.removeTweens(clone.actor); + + let overlay = this._windowOverlays[i]; + if (overlay) + overlay.hide(); } if (this._repositionWindowsId > 0) { Mainloop.source_remove(this._repositionWindowsId); this._repositionWindowsId = 0; } - this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this, - this._doneLeavingOverview)); - if (this.metaWorkspace != null && this.metaWorkspace != currentWorkspace) + return true; + }, + + // Animates the return from Overview mode + zoomFromOverview : function() { + if (!this._leavingOverview()) return; - // Position and scale the windows. for (let i = 0; i < this._windows.length; i++) { let clone = this._windows[i]; - let overlay = this._windowOverlays[i]; - - if (overlay) - overlay.hide(); if (clone.metaWindow.showing_on_its_workspace()) { let [origX, origY] = clone.getOriginalPosition(); @@ -1575,6 +1580,31 @@ const Workspace = new Lang.Class({ } }, + fadeFromOverview: function() { + if (!this._leavingOverview()) + return; + + for (let i = 0; i < this._windows.length; i++) { + let clone = this._windows[i]; + + if (clone.metaWindow.showing_on_its_workspace()) { + clone.actor.x = clone.origX; + clone.actor.y = clone.origY; + clone.actor.scale_x = 1.0; + clone.actor.scale_y = 1.0; + clone.actor.opacity = 0; + + Tweener.addTween(clone.actor, + { opacity: 255, + time: Overview.ANIMATION_TIME, + transition: 'easeOutQuad' + }); + } else { + clone.actor.hide(); + } + } + }, + destroy : function() { this.actor.destroy(); }, |