[nautilus] canvas-item: optimize ref_state_set()



commit d7bf9bad98f36ff3584d92d8953f725a892a882b
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Wed Sep 3 16:30:08 2014 -0700

    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.

 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 8bd40db..7e5d542 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;


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