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.
This commit is contained in:
Marina Zhurakhinskaya 2009-06-18 19:53:21 -04:00 committed by Colin Walters
parent 3841e8da74
commit 98c5f35324
2 changed files with 25 additions and 16 deletions

View File

@ -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;
},
/*

View File

@ -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