[Xfce4-commits] <exo:master> Drop the item index for the icon view.

Nick Schermer noreply at xfce.org
Sat Nov 10 16:32:01 CET 2012


Updating branch refs/heads/master
         to b57cb9ec9774831631359fdbdb3443f72e42e6c1 (commit)
       from 65565e976e7b57e19bb5ea7fa22923f561cc997d (commit)

commit b57cb9ec9774831631359fdbdb3443f72e42e6c1
Author: Nick Schermer <nick at xfce.org>
Date:   Sat Nov 10 17:19:19 2012 +0100

    Drop the item index for the icon view.
    
    Constantly updating the index is not very fast, so
    drop it and manually to this when accessibility is
    enabled.

 exo/exo-icon-view-accessible.c |   26 +++++++++++++++++---------
 exo/exo-icon-view.c            |   21 ---------------------
 2 files changed, 17 insertions(+), 30 deletions(-)

diff --git a/exo/exo-icon-view-accessible.c b/exo/exo-icon-view-accessible.c
index 9201538..c04fcaf 100644
--- a/exo/exo-icon-view-accessible.c
+++ b/exo/exo-icon-view-accessible.c
@@ -52,6 +52,8 @@ typedef struct
   guint action_idle_handler;
 } ExoIconViewItemAccessible;
 
+#define accessible_item_index(item) (g_list_index (EXO_ICON_VIEW (item->widget)->priv->items, item->item))
+
 static const gchar *const exo_icon_view_item_accessible_action_names[] = 
 {
   "activate",
@@ -84,7 +86,7 @@ exo_icon_view_item_accessible_idle_do_action (gpointer data)
   if (item->widget != NULL)
     {
       icon_view = EXO_ICON_VIEW (item->widget);
-      path = gtk_tree_path_new_from_indices (item->item->index, -1);
+      path = gtk_tree_path_new_from_indices (accessible_item_index (item), -1);
       exo_icon_view_item_activated (icon_view, path);
       gtk_tree_path_free (path);
     }
@@ -973,7 +975,7 @@ exo_icon_view_item_accessible_get_index_in_parent (AtkObject *obj)
   g_return_val_if_fail (EXO_IS_ICON_VIEW_ITEM_ACCESSIBLE (obj), 0);
   item = EXO_ICON_VIEW_ITEM_ACCESSIBLE (obj);
 
-  return item->item->index; 
+  return accessible_item_index (item); 
 }
 
 static AtkStateSet *
@@ -1197,8 +1199,9 @@ exo_icon_view_accessible_ref_child (AtkObject *accessible,
   if (icons)
     {
       ExoIconViewItem *item = icons->data;
+      gint item_index = g_list_index (icon_view->priv->items, item);
    
-      g_return_val_if_fail (item->index == index, NULL);
+      g_return_val_if_fail (item_index == index, NULL);
       obj = exo_icon_view_accessible_find_child (accessible, index);
       if (!obj)
         {
@@ -1414,7 +1417,7 @@ exo_icon_view_accessible_model_row_inserted (GtkTreeModel *tree_model,
     {
       info = items->data;
       item = EXO_ICON_VIEW_ITEM_ACCESSIBLE (info->item);
-      if (info->index != item->item->index)
+      if (info->index != accessible_item_index (item))
         {
           if (info->index < index)
             g_warning ("Unexpected index value on insertion %d %d", index, info->index);
@@ -1422,7 +1425,7 @@ exo_icon_view_accessible_model_row_inserted (GtkTreeModel *tree_model,
           if (tmp_list == NULL)
             tmp_list = items;
    
-          info->index = item->item->index;
+          info->index = accessible_item_index (item);
         }
 
       items = items->next;
@@ -1465,12 +1468,12 @@ exo_icon_view_accessible_model_row_deleted (GtkTreeModel *tree_model,
         {
           deleted_item = items;
         }
-      if (info->index != item->item->index)
+      if (info->index != accessible_item_index (item))
         {
           if (tmp_list == NULL)
             tmp_list = items;
             
-          info->index = item->item->index;
+          info->index = accessible_item_index (item);
         }
 
       items = items->next;
@@ -1766,6 +1769,7 @@ exo_icon_view_accessible_ref_accessible_at_point (AtkComponent *component,
   ExoIconView *icon_view;
   ExoIconViewItem *item;
   gint x_pos, y_pos;
+  gint index;
 
   widget = GTK_ACCESSIBLE (component)->widget;
   if (widget == NULL)
@@ -1775,8 +1779,9 @@ exo_icon_view_accessible_ref_accessible_at_point (AtkComponent *component,
   icon_view = EXO_ICON_VIEW (widget);
   atk_component_get_extents (component, &x_pos, &y_pos, NULL, NULL, coord_type);
   item = exo_icon_view_get_item_at_coords (icon_view, x - x_pos, y - y_pos, TRUE, NULL);
+  index = g_list_index (icon_view->priv->items, item);
   if (item)
-    return exo_icon_view_accessible_ref_child (ATK_OBJECT (component), item->index);
+    return exo_icon_view_accessible_ref_child (ATK_OBJECT (component), index);
 
   return NULL;
 }
@@ -1835,6 +1840,7 @@ exo_icon_view_accessible_ref_selection (AtkSelection *selection,
   GtkWidget *widget;
   ExoIconView *icon_view;
   ExoIconViewItem *item;
+  gint index;
 
   widget = GTK_ACCESSIBLE (selection)->widget;
   if (widget == NULL)
@@ -1843,17 +1849,19 @@ exo_icon_view_accessible_ref_selection (AtkSelection *selection,
   icon_view = EXO_ICON_VIEW (widget);
 
   l = icon_view->priv->items;
+  index = 0;
   while (l)
     {
       item = l->data;
       if (item->selected)
         {
           if (i == 0)
-            return atk_object_ref_accessible_child (gtk_widget_get_accessible (widget), item->index);
+            return atk_object_ref_accessible_child (gtk_widget_get_accessible (widget), index);
           else
             i--;
         }
       l = l->next;
+      index++;
     }
 
   return NULL;
diff --git a/exo/exo-icon-view.c b/exo/exo-icon-view.c
index e863be1..34a4cef 100644
--- a/exo/exo-icon-view.c
+++ b/exo/exo-icon-view.c
@@ -427,9 +427,6 @@ struct _ExoIconViewItem
    */
   GdkRectangle area;
 
-  /* position of the item in the list */
-  gint index;
-
   /* Individual cells.
    * box[i] is the actual area occupied by cell i,
    * before, after are used to calculate the cell
@@ -3908,7 +3905,6 @@ exo_icon_view_row_inserted (GtkTreeModel *model,
 {
   ExoIconViewItem *item;
   gint             idx;
-  GList           *list;
 
   idx = gtk_tree_path_get_indices (path)[0];
 
@@ -3916,17 +3912,8 @@ exo_icon_view_row_inserted (GtkTreeModel *model,
   item = g_slice_new0 (ExoIconViewItem);
   item->iter = *iter;
   item->area.width = -1;
-  item->index = idx;
   icon_view->priv->items = g_list_insert (icon_view->priv->items, item, idx);
 
-  /* update index of items in tail */
-  list = g_list_nth (icon_view->priv->items, idx + 1);
-  for (; list != NULL; list = list->next)
-    {
-      item = list->data;
-      item->index++;
-    }
-
   /* recalculate the layout */
   exo_icon_view_queue_layout (icon_view);
 }
@@ -4008,7 +3995,6 @@ exo_icon_view_rows_reordered (GtkTreeModel *model,
   gint            *order;
   gint              length;
   gint              i;
-  ExoIconViewItem  *item;
 
   /* cancel any editing attempt */
   exo_icon_view_stop_editing (icon_view, TRUE);
@@ -4031,17 +4017,11 @@ exo_icon_view_rows_reordered (GtkTreeModel *model,
   icon_view->priv->items = list_array[0];
   list_array[0]->prev = NULL;
 
-  item = list_array[0]->data;
-  item->index = 0;
-
   /* hook up the remaining items */
   for (i = 1; i < length; ++i)
     {
       list_array[i - 1]->next = list_array[i];
       list_array[i]->prev = list_array[i - 1];
-
-      item = list_array[i]->data;
-      item->index = i;
     }
 
   /* hook up the last item */
@@ -5434,7 +5414,6 @@ exo_icon_view_set_model (ExoIconView  *icon_view,
               item = g_slice_new0 (ExoIconViewItem);
               item->iter = iter;
               item->area.width = -1;
-              item->index = n++;
               items = g_list_prepend (items, item);
             }
           while (gtk_tree_model_iter_next (model, &iter));


More information about the Xfce4-commits mailing list