[gnome-shell] Dash: don't show a tooltip over an application with a popup menu



commit 1b206fe94cf0165668027c2aa452f7263cdabb1d
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Sun Aug 18 16:20:22 2013 +0200

    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 9132d18..4520bdf 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 498bd7a..03ceb82 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,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]