summaryrefslogtreecommitdiff
path: root/gio/gemblemedicon.c
diff options
context:
space:
mode:
authorChristian Persch <chpe@gnome.org>2010-08-30 16:12:42 +0200
committerChristian Persch <chpe@gnome.org>2010-08-30 18:34:14 +0200
commit949392585402916d86920c652d182e92ad109a6d (patch)
treee19f9b34040f26d0c387f05f991554bf8570b085 /gio/gemblemedicon.c
parent7a6f8bd3c34e5f5e20f6770d54406b7abc5a396d (diff)
downloadglib-949392585402916d86920c652d182e92ad109a6d.tar.gz
Make g_emblemed_icon_add_emblem() keep the list sorted
Fixes bug #628317.
Diffstat (limited to 'gio/gemblemedicon.c')
-rw-r--r--gio/gemblemedicon.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/gio/gemblemedicon.c b/gio/gemblemedicon.c
index fdf3b3a22..9a8073749 100644
--- a/gio/gemblemedicon.c
+++ b/gio/gemblemedicon.c
@@ -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)))