[gnome-shell] dash: properly restore item label on popup close



commit ee2f12fe819cf9b5f9648b92d86346f95802da83
Author: StÃphane DÃmurget <stephane demurget free fr>
Date:   Sat Nov 3 21:03:33 2012 +0100

    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 b0ff291..803b7d7 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 e1ad321..9d5ad24 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,



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