Make g_emblemed_icon_add_emblem() keep the list sorted
authorChristian Persch <chpe@gnome.org>
Mon, 30 Aug 2010 14:12:42 +0000 (16:12 +0200)
committerChristian Persch <chpe@gnome.org>
Mon, 30 Aug 2010 16:34:14 +0000 (18:34 +0200)
Fixes bug #628317.

gio/gemblemedicon.c

index fdf3b3a..9a80737 100644 (file)
@@ -159,6 +159,21 @@ g_emblemed_icon_get_emblems (GEmblemedIcon *emblemed)
   return emblemed->emblems;
 }
 
+static gint
+g_emblem_comp (GEmblem *a,
+               GEmblem *b)
+{
+  guint hash_a = g_icon_hash (G_ICON (a));
+  guint hash_b = g_icon_hash (G_ICON (b));
+
+  if(hash_a < hash_b)
+    return -1;
+
+  if(hash_a == hash_b)
+    return 0;
+
+  return 1;
+}
 
 /**
  * g_emblemed_icon_add_emblem:
@@ -177,7 +192,8 @@ g_emblemed_icon_add_emblem (GEmblemedIcon *emblemed,
   g_return_if_fail (G_IS_EMBLEM (emblem));
 
   g_object_ref (emblem);
-  emblemed->emblems = g_list_append (emblemed->emblems, emblem);
+  emblemed->emblems = g_list_insert_sorted (emblemed->emblems, emblem,
+                                            (GCompareFunc) g_emblem_comp);
 }
 
 static guint
@@ -193,22 +209,6 @@ g_emblemed_icon_hash (GIcon *icon)
   return hash;
 }
 
-static gint
-g_emblem_comp (GEmblem *a,
-               GEmblem *b)
-{
-  guint hash_a = g_icon_hash (G_ICON (a));
-  guint hash_b = g_icon_hash (G_ICON (b));
-
-  if(hash_a < hash_b)
-    return -1;
-
-  if(hash_a == hash_b)
-    return 0;
-
-  return 1;
-}
-
 static gboolean
 g_emblemed_icon_equal (GIcon *icon1,
                        GIcon *icon2)
@@ -223,9 +223,6 @@ g_emblemed_icon_equal (GIcon *icon1,
   list1 = emblemed1->emblems;
   list2 = emblemed2->emblems;
 
-  list1 = g_list_sort (list1, (GCompareFunc) g_emblem_comp);
-  list2 = g_list_sort (list2, (GCompareFunc) g_emblem_comp);
-
   while (list1 && list2)
   {
     if (!g_icon_equal (G_ICON (list1->data), G_ICON (list2->data)))