Toggle the info pane when clicking the info icon (#587550)

Now clicking on the information icon of the same item a second
time will hide the details pane. Clicking it another time will
show it again, etc.

This is achieved by adding a 'toggle-details' signal which
switches the visibility of the details pane.

Other than the necessary changes, function _selectIndex (in
genericDisplay.js) has been restructured a bit to avoid
duplicating checks.
This commit is contained in:
Siegfried-Angel Gevatter Pujals 2009-07-29 19:35:11 +02:00
parent 119516424d
commit 77c92d75d5
2 changed files with 37 additions and 14 deletions

View File

@ -796,29 +796,39 @@ GenericDisplay.prototype = {
// Selects (e.g. highlights) a display item at the provided index, // Selects (e.g. highlights) a display item at the provided index,
// updates this.selectedItemDetails actor, and emits 'selected' signal. // updates this.selectedItemDetails actor, and emits 'selected' signal.
_selectIndex: function(index) { _selectIndex: function(index) {
let count = this._list.displayedCount; if (index >= this._list.displayedCount)
return
// If the item is already selected, all we do is toggling the details pane.
if (this._selectedIndex == index && index >= 0) {
this.emit('toggle-details');
return;
}
// Cleanup from the previous item
if (this._selectedIndex >= 0) { if (this._selectedIndex >= 0) {
let prev = this._findDisplayedByIndex(this._selectedIndex); this._findDisplayedByIndex(this._selectedIndex).markSelected(false);
prev.markSelected(false);
// Calling destroy() gets large image previews released as quickly as // Calling destroy() gets large image previews released as quickly as
// possible, if we just removed them, they might hang around for a while // possible, if we just removed them, they might hang around for a while
// until the actor was garbage collected. // until the actor was garbage collected.
let children = this.selectedItemDetails.get_children(); let children = this.selectedItemDetails.get_children();
for (let i = 0; i < children.length; i++) for (let i = 0; i < children.length; i++)
children[i].destroy(); children[i].destroy();
this.selectedItemDetails.remove_all(); this.selectedItemDetails.remove_all();
} }
if (index < count) {
this._selectedIndex = index; this._selectedIndex = index;
if (index >= 0) { if (index < 0)
let item = this._findDisplayedByIndex(index); return
item.markSelected(true);
this.selectedItemDetails.append(item.createDetailsActor(this._availableWidthForItemDetails, // Mark the new item as selected and create its details pane
this._availableHeightForItemDetails), Big.BoxPackFlags.NONE); let item = this._findDisplayedByIndex(index);
this.emit('selected'); item.markSelected(true);
} this.selectedItemDetails.append(item.createDetailsActor(this._availableWidthForItemDetails,
} this._availableHeightForItemDetails), Big.BoxPackFlags.NONE);
this.emit('selected');
} }
}; };

View File

@ -505,6 +505,9 @@ Dash.prototype = {
this._detailsContent.remove_all(); this._detailsContent.remove_all();
this._detailsContent.append(this._docDisplay.selectedItemDetails, Big.BoxPackFlags.NONE); this._detailsContent.append(this._docDisplay.selectedItemDetails, Big.BoxPackFlags.NONE);
})); }));
this._docDisplay.connect('toggle-details', Lang.bind(this, function(docDisplay) {
this._toggleDetails();
}));
this._resultsDocsSection.display.connect('selected', Lang.bind(this, function(resultsDocDisplay) { this._resultsDocsSection.display.connect('selected', Lang.bind(this, function(resultsDocDisplay) {
this._docDisplay.unsetSelected(); this._docDisplay.unsetSelected();
this._resultsAppsSection.display.unsetSelected(); this._resultsAppsSection.display.unsetSelected();
@ -512,6 +515,9 @@ Dash.prototype = {
this._detailsContent.remove_all(); this._detailsContent.remove_all();
this._detailsContent.append(this._resultsDocsSection.display.selectedItemDetails, Big.BoxPackFlags.NONE); this._detailsContent.append(this._resultsDocsSection.display.selectedItemDetails, Big.BoxPackFlags.NONE);
})); }));
this._resultsDocsSection.display.connect('toggle-details', Lang.bind(this, function(resultsDocDisplay) {
this._toggleDetails();
}));
this._resultsAppsSection.display.connect('selected', Lang.bind(this, function(resultsAppDisplay) { this._resultsAppsSection.display.connect('selected', Lang.bind(this, function(resultsAppDisplay) {
this._docDisplay.unsetSelected(); this._docDisplay.unsetSelected();
this._resultsDocsSection.display.unsetSelected(); this._resultsDocsSection.display.unsetSelected();
@ -696,6 +702,13 @@ Dash.prototype = {
this.emit('panes-removed'); this.emit('panes-removed');
}, },
_toggleDetails: function() {
if (this._detailsShowing())
this._hideDetails();
else
this._showDetails();
},
_detailsShowing: function() { _detailsShowing: function() {
return this._detailsPane.visible; return this._detailsPane.visible;
}, },