From ee2f12fe819cf9b5f9648b92d86346f95802da83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20D=C3=A9murget?= Date: Sat, 3 Nov 2012 21:03:33 +0100 Subject: [PATCH] dash: properly restore item label on popup close We simply hide the label when the popup is opened instead of relying on the popup state when the hover state change. To do this we replace the flag isMenuUp by a 'menu-state-changed' signal on the AppWellIcon. This simplifies the dash label visibility handling code that need additional changes for the bug. https://bugzilla.gnome.org/show_bug.cgi?id=657315 --- js/ui/appDisplay.js | 6 +++--- js/ui/dash.js | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) 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,