summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2014-09-03 16:30:08 -0700
committerCosimo Cecchi <cosimoc@gnome.org>2014-09-03 16:30:08 -0700
commitd7bf9bad98f36ff3584d92d8953f725a892a882b (patch)
tree2ca9bf6c07deb6b0a0097df4269a3051bc432be7
parent98e007d1ec7e9c192304231ac7aa1bfdc06eec23 (diff)
downloadnautilus-d7bf9bad98f36ff3584d92d8953f725a892a882b.tar.gz
canvas-item: optimize ref_state_set()
We don't need to iterate over all the icons to find out whether we're the only selected one.
-rw-r--r--libnautilus-private/nautilus-canvas-item.c27
1 files changed, 6 insertions, 21 deletions
diff --git a/libnautilus-private/nautilus-canvas-item.c b/libnautilus-private/nautilus-canvas-item.c
index 8bd40dbe2..7e5d5427e 100644
--- a/libnautilus-private/nautilus-canvas-item.c
+++ b/libnautilus-private/nautilus-canvas-item.c
@@ -2554,8 +2554,7 @@ nautilus_canvas_item_accessible_ref_state_set (AtkObject *accessible)
AtkStateSet *state_set;
NautilusCanvasItem *item;
NautilusCanvasContainer *container;
- NautilusCanvasIcon *icon;
- GList *l;
+ GList *selection;
gboolean one_item_selected;
state_set = ATK_OBJECT_CLASS (nautilus_canvas_item_accessible_parent_class)->ref_state_set (accessible);
@@ -2569,29 +2568,15 @@ nautilus_canvas_item_accessible_ref_state_set (AtkObject *accessible)
if (item->details->is_highlighted_as_keyboard_focus) {
atk_state_set_add_state (state_set, ATK_STATE_FOCUSED);
} else if (!container->details->keyboard_focus) {
-
- one_item_selected = FALSE;
- l = container->details->icons;
- while (l) {
- icon = l->data;
-
- if (icon->item == item) {
- if (icon->is_selected) {
- one_item_selected = TRUE;
- } else {
- break;
- }
- } else if (icon->is_selected) {
- one_item_selected = FALSE;
- break;
- }
-
- l = l->next;
- }
+ selection = nautilus_canvas_container_get_selection (container);
+ one_item_selected = (g_list_length (selection) == 1) &&
+ item->details->is_highlighted_for_selection;
if (one_item_selected) {
atk_state_set_add_state (state_set, ATK_STATE_FOCUSED);
}
+
+ g_list_free (selection);
}
return state_set;