diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index b0ff291ba..803b7d788 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -479,7 +479,6 @@ const AppWellIcon = new Lang.Class({ Lang.bind(this, this._onStateChanged)); this._onStateChanged(); - this.isMenuUp = false; }, _onDestroy: function() { @@ -561,7 +560,8 @@ const AppWellIcon = new Lang.Class({ this._menuManager.addMenu(this._menu); } - this.isMenuUp = true; + this.emit('menu-state-changed', true); + this.actor.set_hover(true); this._menu.popup(); @@ -578,7 +578,7 @@ const AppWellIcon = new Lang.Class({ _onMenuPoppedDown: function() { this.actor.sync_hover(); - this.isMenuUp = false; + this.emit('menu-state-changed', false); }, _onActivate: function (event) { diff --git a/js/ui/dash.js b/js/ui/dash.js index e1ad32145..9d5ad24d6 100644 --- a/js/ui/dash.js +++ b/js/ui/dash.js @@ -503,6 +503,10 @@ const Dash = new Lang.Class({ Lang.bind(this, function() { display.actor.opacity = 255; })); + display.connect('menu-state-changed', + Lang.bind(this, function(display, opened) { + this._itemMenuStateChanged(item, opened); + })); let item = new DashItemContainer(); item.setChild(display.actor); @@ -518,8 +522,21 @@ const Dash = new Lang.Class({ return item; }, + _itemMenuStateChanged: function(item, opened) { + // When the menu closes, it calls sync_hover, which means + // that the notify::hover handler does everything we need to. + if (opened) { + if (this._showLabelTimeoutId > 0) { + Mainloop.source_remove(this._showLabelTimeoutId); + this._showLabelTimeoutId = 0; + } + + item.hideLabel(); + } + }, + _onHover: function (item) { - if (item.child.get_hover() && !item.child._delegate.isMenuUp) { + if (item.child.get_hover()) { if (this._showLabelTimeoutId == 0) { let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT; this._showLabelTimeoutId = Mainloop.timeout_add(timeout,