[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