summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-file.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-private/nautilus-file.c')
-rw-r--r--libnautilus-private/nautilus-file.c44
1 files changed, 33 insertions, 11 deletions
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index a2f2a6ab1..c63105de6 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -4094,7 +4094,8 @@ nautilus_file_get_gicon (NautilusFile *file,
const char *name;
GPtrArray *prepend_array;
GMount *mount;
- GIcon *icon, *mount_icon = NULL, *emblemed_icon;
+ GList *emblems, *l;
+ GIcon *icon, *mount_icon = NULL, *emblemed_icon = NULL;
GEmblem *emblem;
int i;
gboolean is_folder = FALSE, is_preview = FALSE, is_inode_directory = FALSE;
@@ -4196,19 +4197,40 @@ nautilus_file_get_gicon (NautilusFile *file,
mount_icon != NULL) {
g_object_unref (icon);
icon = mount_icon;
- } else if ((flags & NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS) &&
- mount_icon != NULL && !g_icon_equal (mount_icon, icon)) {
+ } else if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS) {
+ emblems = nautilus_file_get_emblem_icons (file);
- emblem = g_emblem_new (mount_icon);
- emblemed_icon = g_emblemed_icon_new (icon, emblem);
+ if (mount_icon != NULL) {
+ emblems = g_list_prepend (emblems, mount_icon);
+ }
- g_object_unref (emblem);
- g_object_unref (icon);
- g_object_unref (mount_icon);
+ for (l = emblems; l != NULL; l = l->next) {
+ if (g_icon_equal (l->data, icon)) {
+ continue;
+ }
+
+ emblem = g_emblem_new (l->data);
+
+ if (emblemed_icon == NULL) {
+ emblemed_icon = g_emblemed_icon_new (icon, emblem);
+ } else {
+ g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (emblemed_icon), emblem);
+ }
- icon = emblemed_icon;
- } else if (mount_icon != NULL) {
- g_object_unref (mount_icon);
+ if (emblemed_icon != NULL &&
+ (flags & NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM)) {
+ break;
+ }
+ }
+
+ if (emblemed_icon != NULL) {
+ g_object_unref (icon);
+ icon = emblemed_icon;
+ }
+
+ if (emblems != NULL) {
+ g_list_free_full (emblems, g_object_unref);
+ }
}
return icon;