diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2014-09-03 16:30:08 -0700 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2014-09-03 16:30:08 -0700 |
commit | d7bf9bad98f36ff3584d92d8953f725a892a882b (patch) | |
tree | 2ca9bf6c07deb6b0a0097df4269a3051bc432be7 | |
parent | 98e007d1ec7e9c192304231ac7aa1bfdc06eec23 (diff) | |
download | nautilus-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.c | 27 |
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; |