summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2014-09-07 21:46:15 -0700
committerCosimo Cecchi <cosimoc@gnome.org>2014-09-08 22:07:27 -0700
commita6b88ebde1eb82cf7692bf1c0a161ff6184e9188 (patch)
treecbbe3481218ec0c2aace265924250bf8c0211e7f
parent150cfb7a325e7b3668cf4c386a043593a8361ce0 (diff)
downloadnautilus-a6b88ebde1eb82cf7692bf1c0a161ff6184e9188.tar.gz
file: apply emblems in nautilus_file_get_gicon()
We have duplicated code between the views - consolidate it inside nautilus_file_get_gicon().
-rw-r--r--libnautilus-private/nautilus-file.c44
-rw-r--r--libnautilus-private/nautilus-file.h3
-rw-r--r--src/nautilus-canvas-view-container.c32
-rw-r--r--src/nautilus-list-model.c34
4 files changed, 39 insertions, 74 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;
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
index ce89f5029..0bd802590 100644
--- a/libnautilus-private/nautilus-file.h
+++ b/libnautilus-private/nautilus-file.h
@@ -80,7 +80,8 @@ typedef enum {
/* uses the icon of the mount if present */
NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON = (1<<6),
/* render emblems */
- NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS = (1<<7)
+ NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS = (1<<7),
+ NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM = (1<<8)
} NautilusFileIconFlags;
/* Emblems sometimes displayed for NautilusFiles. Do not localize. */
diff --git a/src/nautilus-canvas-view-container.c b/src/nautilus-canvas-view-container.c
index e8a6efd86..09e3ce6c3 100644
--- a/src/nautilus-canvas-view-container.c
+++ b/src/nautilus-canvas-view-container.c
@@ -58,10 +58,6 @@ nautilus_canvas_view_container_get_icon_images (NautilusCanvasContainer *contain
NautilusFile *file;
NautilusFileIconFlags flags;
NautilusIconInfo *icon_info;
- GdkPixbuf *pixbuf;
- GIcon *emblemed_icon;
- GEmblem *emblem;
- GList *emblem_icons, *l;
gint scale;
file = (NautilusFile *) data;
@@ -81,34 +77,6 @@ nautilus_canvas_view_container_get_icon_images (NautilusCanvasContainer *contain
scale = gtk_widget_get_scale_factor (GTK_WIDGET (canvas_view));
icon_info = nautilus_file_get_icon (file, size, scale, flags);
- emblem_icons = nautilus_file_get_emblem_icons (file);
-
- /* apply emblems */
- if (emblem_icons != NULL) {
- l = emblem_icons;
-
- emblem = g_emblem_new (l->data);
- pixbuf = nautilus_icon_info_get_pixbuf (icon_info);
- emblemed_icon = g_emblemed_icon_new (G_ICON (pixbuf), emblem);
- g_object_unref (emblem);
-
- for (l = l->next; l != NULL; l = l->next) {
- emblem = g_emblem_new (l->data);
- g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (emblemed_icon),
- emblem);
- g_object_unref (emblem);
- }
-
- g_clear_object (&icon_info);
- icon_info = nautilus_icon_info_lookup (emblemed_icon, size, scale);
-
- g_object_unref (pixbuf);
- g_object_unref (emblemed_icon);
- }
-
- if (emblem_icons != NULL) {
- g_list_free_full (emblem_icons, g_object_unref);
- }
return icon_info;
}
diff --git a/src/nautilus-list-model.c b/src/nautilus-list-model.c
index bf4b120bd..7da51501a 100644
--- a/src/nautilus-list-model.c
+++ b/src/nautilus-list-model.c
@@ -259,10 +259,6 @@ nautilus_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int
NautilusFile *file;
char *str;
GdkPixbuf *icon, *rendered_icon;
- GIcon *gicon, *emblemed_icon, *emblem_icon;
- NautilusIconInfo *icon_info;
- GEmblem *emblem;
- GList *emblem_icons, *l;
int icon_size, icon_scale;
NautilusZoomLevel zoom_level;
NautilusFileIconFlags flags;
@@ -303,7 +299,9 @@ nautilus_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int
flags = NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS |
NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE |
- NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS;
+ NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS |
+ NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM;
+
if (model->details->drag_view != NULL) {
GtkTreePath *path_a, *path_b;
@@ -322,31 +320,7 @@ nautilus_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int
}
}
- gicon = G_ICON (nautilus_file_get_icon_pixbuf (file, icon_size, TRUE, icon_scale, flags));
- emblem_icons = nautilus_file_get_emblem_icons (file);
-
- /* pick only the first emblem we can render for the list view */
- for (l = emblem_icons; l != NULL; l = l->next) {
- emblem_icon = l->data;
- if (nautilus_icon_theme_can_render (G_THEMED_ICON (emblem_icon))) {
- emblem = g_emblem_new (emblem_icon);
- emblemed_icon = g_emblemed_icon_new (gicon, emblem);
-
- g_object_unref (gicon);
- g_object_unref (emblem);
- gicon = emblemed_icon;
-
- break;
- }
- }
-
- g_list_free_full (emblem_icons, g_object_unref);
-
- icon_info = nautilus_icon_info_lookup (gicon, icon_size, icon_scale);
- icon = nautilus_icon_info_get_pixbuf_at_size (icon_info, icon_size);
-
- g_object_unref (icon_info);
- g_object_unref (gicon);
+ icon = nautilus_file_get_icon_pixbuf (file, icon_size, TRUE, icon_scale, flags);
if (model->details->highlight_files != NULL &&
g_list_find_custom (model->details->highlight_files,