[gnome-shell] Select an item when information button is clicked, launch on single click



commit 98c5f3532486b8150e48fa5f94c4001c777ab547
Author: Marina Zhurakhinskaya <marinaz redhat com>
Date:   Thu Jun 18 19:53:21 2009 -0400

    Select an item when information button is clicked, launch on single click
    
    Clicking the information button for an item selects it (i.e. highlights it)
    and shows details about the item.
    Clicking the rest of the item area launches it.
    Item does not become draggable if the dragging is started over the information
    icon (i.e. if the user presses the information icon, but releases elsewhere).
    
    Make sure we emit "activated" signal and close the overlay when an item from
    one of the results displays is launched.

 js/ui/genericDisplay.js |   35 +++++++++++++++++++----------------
 js/ui/overlay.js        |    6 ++++++
 2 files changed, 25 insertions(+), 16 deletions(-)
---
diff --git a/js/ui/genericDisplay.js b/js/ui/genericDisplay.js
index 47a092f..a5e089a 100644
--- a/js/ui/genericDisplay.js
+++ b/js/ui/genericDisplay.js
@@ -63,15 +63,7 @@ GenericDisplayItem.prototype = {
                                          width: availableWidth,
                                          height: ITEM_DISPLAY_HEIGHT });
         this.actor._delegate = this;
-        this.actor.connect('button-press-event',
-                           Lang.bind(this,
-                                     function(actor, e) {
-                                         let clickCount = Shell.get_button_event_click_count(e);
-                                         if (clickCount == 1)
-                                             this.select();
-                                         else if (clickCount == 2)
-                                             this.activate();
-                                     }));
+        this.actor.connect('button-release-event', Lang.bind(this, this.activate));
 
         let draggable = DND.makeDraggable(this.actor);
         draggable.connect('drag-begin', Lang.bind(this, this._onDragBegin));
@@ -83,14 +75,23 @@ GenericDisplayItem.prototype = {
         this.actor.add_actor(this._bg);
         
         this._informationButton = new Clutter.Texture({ x: availableWidth - ITEM_DISPLAY_PADDING_RIGHT - INFORMATION_BUTTON_SIZE,
-                                                      y: ITEM_DISPLAY_HEIGHT / 2 - INFORMATION_BUTTON_SIZE / 2,
-                                                      width: INFORMATION_BUTTON_SIZE,
-                                                      height: INFORMATION_BUTTON_SIZE,
-                                                      reactive: true
+                                                        y: ITEM_DISPLAY_HEIGHT / 2 - INFORMATION_BUTTON_SIZE / 2,
+                                                        width: INFORMATION_BUTTON_SIZE,
+                                                        height: INFORMATION_BUTTON_SIZE,
+                                                        reactive: true
                                                     });
         let global = Shell.Global.get();
         this._informationButton.set_from_file(global.imagedir + "info.svg");
-        this._informationButton.connect('button-release-event', this.select);
+        // Connecting to the button-press-event for the information button ensures that the actor, 
+        // which is a draggable actor, does not get the button-press-event and doesn't initiate
+        // the dragging, which then prevents us from getting the button-release-event for the button.
+        this._informationButton.connect('button-press-event', 
+                                        Lang.bind(this,
+                                                  function() {
+                                                      return true;
+                                                  }));
+        this._informationButton.connect('button-release-event', Lang.bind(this, this.select));
+
         this._informationButton.hide();
         this.actor.add_actor(this._informationButton);
         this._informationButton.lower_bottom();
@@ -151,14 +152,16 @@ GenericDisplayItem.prototype = {
        this._bg.background_color = color;
     },
 
-    // Activates the item, as though it was launched
+    // Activates the item by launching it
     activate: function() {
         this.emit('activate');
+        return true;
     },
 
-    // Selects the item, as though it was clicked
+    // Selects the item by highlighting it and displaying it details
     select: function() {
         this.emit('select');
+        return true;
     },
 
     /*
diff --git a/js/ui/overlay.js b/js/ui/overlay.js
index eff9fa1..cc129be 100644
--- a/js/ui/overlay.js
+++ b/js/ui/overlay.js
@@ -393,6 +393,12 @@ Dash.prototype = {
         this._docDisplay.connect('activated', function(docDisplay) {
             me.emit('activated');
         });
+        this._resultsAppsSection.display.connect('activated', function(resultsAppsDisplay) {
+            me.emit('activated');
+        });
+        this._resultsDocsSection.display.connect('activated', function(resultsDocsDisplay) {
+            me.emit('activated');
+        });
         this._appDisplay.connect('selected', function(appDisplay) {
             // We allow clicking on any item to select it, so if an 
             // item in the app display is selected, we need to make sure that



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