[gnome-shell] Replace _getIndexOfDisplayedActor with a function in OverflowList



commit 03e0fe1e954dc950f43b2143d9514d91621ad5a7
Author: Siegfried-Angel Gevatter Pujals <rainct ubuntu com>
Date:   Thu Aug 6 19:51:11 2009 +0200

    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.

 js/ui/genericDisplay.js   |   17 +++--------------
 src/shell-overflow-list.c |   37 +++++++++++++++++++++++++++++++++++++
 src/shell-overflow-list.h |    1 +
 3 files changed, 41 insertions(+), 14 deletions(-)
---
diff --git a/js/ui/genericDisplay.js b/js/ui/genericDisplay.js
index ba26cb3..0d7a2ab 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 77da1ad..5951180 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 c8a912e..c424fa4 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
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]