summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarina Zhurakhinskaya <marinaz@redhat.com>2009-06-18 19:53:21 -0400
committerMarina Zhurakhinskaya <marinaz@redhat.com>2009-06-18 19:53:21 -0400
commitc41902c1883a8a8253c94ae085577389df69a78c (patch)
tree02bf2b9c1922c009a42b26abfce66c24f124d173
parent97b9ccbff7cf23e621f97488dff8f26324e27e2d (diff)
downloadgnome-shell-c41902c1883a8a8253c94ae085577389df69a78c.tar.gz
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.
-rw-r--r--js/ui/genericDisplay.js35
-rw-r--r--js/ui/overlay.js6
2 files changed, 25 insertions, 16 deletions
diff --git a/js/ui/genericDisplay.js b/js/ui/genericDisplay.js
index 47a092f94..a5e089a80 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 eff9fa1b1..cc129bee6 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