Replace _getIndexOfDisplayedActor with a function in OverflowList

Said function in genericDisplay.js was returning the index of the
actor based upon its position in the entire list, while everywhere
else indexes relative to the currently displayed page were used.

This made actions in the details pane break (bug #590949), so I
replace it with a new function in shell-overflow-list.c,
shell_overflow_list_get_actor_index, which is page based.
This commit is contained in:
Siegfried-Angel Gevatter Pujals 2009-08-06 19:51:11 +02:00
parent 22c98e6240
commit 03e0fe1e95
3 changed files with 41 additions and 14 deletions

View File

@ -532,14 +532,14 @@ GenericDisplay.prototype = {
Lang.bind(this, Lang.bind(this,
function() { function() {
// update the selection // update the selection
this._selectIndex(this._getIndexOfDisplayedActor(displayItem.actor)); this._selectIndex(this._list.get_actor_index(displayItem.actor));
this.activateSelected(); this.activateSelected();
})); }));
displayItem.connect('show-details', displayItem.connect('show-details',
Lang.bind(this, Lang.bind(this,
function() { function() {
let index = this._getIndexOfDisplayedActor(displayItem.actor); let index = this._list.get_actor_index(displayItem.actor);
/* Close the details pane if already open */ /* Close the details pane if already open */
if (index == this._openDetailIndex) { if (index == this._openDetailIndex) {
this._openDetailIndex = -1; this._openDetailIndex = -1;
@ -557,7 +557,7 @@ GenericDisplay.prototype = {
_removeDisplayItem: function(itemId) { _removeDisplayItem: function(itemId) {
let count = this._list.displayedCount; let count = this._list.displayedCount;
let displayItem = this._displayedItems[itemId]; let displayItem = this._displayedItems[itemId];
let displayItemIndex = this._getIndexOfDisplayedActor(displayItem.actor); let displayItemIndex = this._list.get_actor_index(displayItem.actor);
if (this.hasSelected() && count == 1) { if (this.hasSelected() && count == 1) {
this.unsetSelected(); this.unsetSelected();
@ -766,17 +766,6 @@ GenericDisplay.prototype = {
return null; return null;
}, },
// Returns and index that the actor has in the ordering of the display's
// children.
_getIndexOfDisplayedActor: function(actor) {
let children = this._list.get_children();
for (let i = 0; i < children.length; i++) {
if (children[i] == actor)
return i;
}
return -1;
},
// 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) {

View File

@ -386,3 +386,40 @@ shell_overflow_list_get_displayed_actor (ShellOverflowList *self,
return iter->data; return iter->data;
} }
/**
* shell_overflow_list_get_actor_index:
* @self:
* @actor: a child of the list
*
* Returns the index on the current page of the given actor.
*
* Return value: index of @actor in
* the currently visible page
*/
int
shell_overflow_list_get_actor_index (ShellOverflowList *self,
ClutterActor *actor)
{
GList *children, *iter;
int i;
children = clutter_container_get_children (CLUTTER_CONTAINER (self));
if (children == NULL)
return NULL;
iter = g_list_nth (children, (self->priv->page) * self->priv->items_per_page);
int result = -1;
for (i = 0; iter; iter = iter->next, i++)
if (iter->data == actor)
{
result = i;
break;
}
g_list_free (children);
return result;
}

View File

@ -37,6 +37,7 @@ struct _ShellOverflowListClass
GType shell_overflow_list_get_type (void) G_GNUC_CONST; GType shell_overflow_list_get_type (void) G_GNUC_CONST;
ClutterActor *shell_overflow_list_get_displayed_actor (ShellOverflowList *list, guint index); ClutterActor *shell_overflow_list_get_displayed_actor (ShellOverflowList *list, guint index);
int shell_overflow_list_get_actor_index (ShellOverflowList *list, ClutterActor *actor);
G_END_DECLS G_END_DECLS