From 1b206fe94cf0165668027c2aa452f7263cdabb1d Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Sun, 18 Aug 2013 16:20:22 +0200 Subject: [PATCH] Dash: don't show a tooltip over an application with a popup menu If the popup menu associated with the application icon is open, make sure that the tooltip is hidden. https://bugzilla.gnome.org/show_bug.cgi?id=705611 --- js/ui/appDisplay.js | 7 ++++++- js/ui/dash.js | 18 +++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 9132d18b9..4520bdfaf 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -878,6 +878,7 @@ const AppIcon = new Lang.Class({ this.actor.set_hover(true); this._menu.popup(); this._menuManager.ignoreRelease(); + this.emit('sync-tooltip'); return false; }, @@ -924,7 +925,11 @@ const AppIcon = new Lang.Class({ // we show as the item is being dragged. getDragActorSource: function() { return this.icon.icon; - } + }, + + shouldShowTooltip: function() { + return this.actor.hover && (!this._menu || !this._menu.isOpen); + }, }); Signals.addSignalMethods(AppIcon.prototype); diff --git a/js/ui/dash.js b/js/ui/dash.js index 498bd7a63..03ceb82ee 100644 --- a/js/ui/dash.js +++ b/js/ui/dash.js @@ -502,15 +502,21 @@ const Dash = new Lang.Class({ Main.queueDeferredWork(this._workId); }, - _hookUpLabel: function(item) { + _hookUpLabel: function(item, appIcon) { item.child.connect('notify::hover', Lang.bind(this, function() { - this._onHover(item); + this._syncLabel(item, appIcon); })); Main.overview.connect('hiding', Lang.bind(this, function() { this._labelShowing = false; item.hideLabel(); })); + + if (appIcon) { + appIcon.connect('sync-tooltip', Lang.bind(this, function() { + this._syncLabel(item, appIcon); + })); + } }, _createAppItem: function(app) { @@ -539,7 +545,7 @@ const Dash = new Lang.Class({ item.setLabelText(app.get_name()); appIcon.icon.setIconSize(this.iconSize); - this._hookUpLabel(item); + this._hookUpLabel(item, appIcon); return item; }, @@ -557,8 +563,10 @@ const Dash = new Lang.Class({ } }, - _onHover: function (item) { - if (item.child.get_hover()) { + _syncLabel: function (item, appIcon) { + let shouldShow = appIcon ? appIcon.shouldShowTooltip() : item.child.get_hover(); + + if (shouldShow) { if (this._showLabelTimeoutId == 0) { let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT; this._showLabelTimeoutId = Mainloop.timeout_add(timeout,