From 40efe6c324048c2c32a2d447a696ff72e60124fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 19 Oct 2012 23:13:16 +0200 Subject: [PATCH] popupMenu: Overwrite ongoing animations when calling close repeatedly Currently close() is a no-op when the menu has already been closed. However, repeated calls could pass different animation parameters. For instance in the user menu, we try to hide the menu immediately before locking the screen, to avoid the popup jumping across the screen while fading out - as we do this from the corresponding item's activate handler, the closing is still animated if the menu's own handler (which requests a full animation) is run first. Fix this by changing close() to overwrite ongoing animations before bailing out early. https://bugzilla.gnome.org/show_bug.cgi?id=686484 --- js/ui/boxpointer.js | 1 + js/ui/popupMenu.js | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/js/ui/boxpointer.js b/js/ui/boxpointer.js index 543500201..01bc2c8d8 100644 --- a/js/ui/boxpointer.js +++ b/js/ui/boxpointer.js @@ -141,6 +141,7 @@ const BoxPointer = new Lang.Class({ this._muteInput(); + Tweener.removeTweens(this); Tweener.addTween(this, { opacity: fade ? 0 : 255, xOffset: xOffset, yOffset: yOffset, diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js index 23368a5b6..a46938866 100644 --- a/js/ui/popupMenu.js +++ b/js/ui/popupMenu.js @@ -1269,13 +1269,14 @@ const PopupMenu = new Lang.Class({ }, close: function(animate) { - if (!this.isOpen) - return; - if (this._activeMenuItem) this._activeMenuItem.setActive(false); - this._boxPointer.hide(animate); + if (this._boxPointer.actor.visible) + this._boxPointer.hide(animate); + + if (!this.isOpen) + return; this.isOpen = false; this.emit('open-state-changed', false);