diff --git a/js/ui/genericDisplay.js b/js/ui/genericDisplay.js index ba26cb377..0d7a2ab07 100644 --- a/js/ui/genericDisplay.js +++ b/js/ui/genericDisplay.js @@ -532,14 +532,14 @@ GenericDisplay.prototype = { Lang.bind(this, function() { // update the selection - this._selectIndex(this._getIndexOfDisplayedActor(displayItem.actor)); + this._selectIndex(this._list.get_actor_index(displayItem.actor)); this.activateSelected(); })); displayItem.connect('show-details', Lang.bind(this, function() { - let index = this._getIndexOfDisplayedActor(displayItem.actor); + let index = this._list.get_actor_index(displayItem.actor); /* Close the details pane if already open */ if (index == this._openDetailIndex) { this._openDetailIndex = -1; @@ -557,7 +557,7 @@ GenericDisplay.prototype = { _removeDisplayItem: function(itemId) { let count = this._list.displayedCount; 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) { this.unsetSelected(); @@ -766,17 +766,6 @@ GenericDisplay.prototype = { 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, // updates this.selectedItemDetails actor, and emits 'selected' signal. _selectIndex: function(index) { diff --git a/src/shell-overflow-list.c b/src/shell-overflow-list.c index 77da1ad66..59511803a 100644 --- a/src/shell-overflow-list.c +++ b/src/shell-overflow-list.c @@ -386,3 +386,40 @@ shell_overflow_list_get_displayed_actor (ShellOverflowList *self, 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; +} diff --git a/src/shell-overflow-list.h b/src/shell-overflow-list.h index c8a912ed6..c424fa415 100644 --- a/src/shell-overflow-list.h +++ b/src/shell-overflow-list.h @@ -37,6 +37,7 @@ struct _ShellOverflowListClass GType shell_overflow_list_get_type (void) G_GNUC_CONST; 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