[nautilus] file: apply emblems in nautilus_file_get_gicon()



commit a6b88ebde1eb82cf7692bf1c0a161ff6184e9188
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Sun Sep 7 21:46:15 2014 -0700

    file: apply emblems in nautilus_file_get_gicon()
    
    We have duplicated code between the views - consolidate it inside
    nautilus_file_get_gicon().

 libnautilus-private/nautilus-file.c  |   44 +++++++++++++++++++++++++--------
 libnautilus-private/nautilus-file.h  |    3 +-
 src/nautilus-canvas-view-container.c |   32 ------------------------
 src/nautilus-list-model.c            |   34 +++-----------------------
 4 files changed, 39 insertions(+), 74 deletions(-)
---
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index a2f2a6a..c63105d 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 ce89f50..0bd8025 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 e8a6efd..09e3ce6 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 bf4b120..7da5150 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,


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