[nautilus] icon-container: apply emblems from FmIconContainer



commit 59670a59c9b53a59ef587767c3e7be247b0f11cf
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Sat Dec 4 20:21:59 2010 +0100

    icon-container: apply emblems from FmIconContainer
    
    This simplifies the code a bit, and also fixes emblem sizes for
    thumbnails.

 libnautilus-private/nautilus-icon-container.c |   35 +---------------
 libnautilus-private/nautilus-icon-container.h |    1 -
 src/file-manager/fm-icon-container.c          |   53 +++++++++++++++++++-----
 3 files changed, 45 insertions(+), 44 deletions(-)
---
diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c
index 9083831..9e2ebd3 100644
--- a/libnautilus-private/nautilus-icon-container.c
+++ b/libnautilus-private/nautilus-icon-container.c
@@ -6852,7 +6852,6 @@ static NautilusIconInfo *
 nautilus_icon_container_get_icon_images (NautilusIconContainer *container,
 					 NautilusIconData      *data,
 					 int                    size,
-					 GList                **emblem_icons,
 					 char                 **embedded_text,
 					 gboolean               for_drag_accept,
 					 gboolean               need_large_embeddded_text,
@@ -6864,7 +6863,7 @@ nautilus_icon_container_get_icon_images (NautilusIconContainer *container,
 	klass = NAUTILUS_ICON_CONTAINER_GET_CLASS (container);
 	g_assert (klass->get_icon_images != NULL);
 
-	return klass->get_icon_images (container, data, size, emblem_icons, embedded_text, for_drag_accept, need_large_embeddded_text, embedded_text_needs_loading, has_open_window);
+	return klass->get_icon_images (container, data, size, embedded_text, for_drag_accept, need_large_embeddded_text, embedded_text_needs_loading, has_open_window);
 }
 
 static void
@@ -7023,15 +7022,12 @@ nautilus_icon_container_update_icon (NautilusIconContainer *container,
 	int n_attach_points;
 	gboolean has_embedded_text_rect;
 	GdkPixbuf *pixbuf;
-	GList *emblem_icons, *l;
 	char *editable_text, *additional_text;
 	char *embedded_text;
 	GdkRectangle embedded_text_rect;
 	gboolean large_embedded_text;
 	gboolean embedded_text_needs_loading;
 	gboolean has_open_window;
-	GIcon *emblemed_icon;
-	GEmblem *emblem;
 	
 	if (icon == NULL) {
 		return;
@@ -7054,12 +7050,12 @@ nautilus_icon_container_update_icon (NautilusIconContainer *container,
 	icon_size = MAX (icon_size, min_image_size);
 	icon_size = MIN (icon_size, max_image_size);
 
+	DEBUG ("Icon size, getting for size %d", icon_size);
+
 	/* Get the icons. */
-	emblem_icons = NULL;
 	embedded_text = NULL;
 	large_embedded_text = icon_size > ICON_SIZE_FOR_LARGE_EMBEDDED_TEXT;
 	icon_info = nautilus_icon_container_get_icon_images (container, icon->data, icon_size,
-							     &emblem_icons,
 							     &embedded_text,
 							     icon == details->drop_target,							     
 							     large_embedded_text, &embedded_text_needs_loading,
@@ -7075,30 +7071,6 @@ nautilus_icon_container_update_icon (NautilusIconContainer *container,
 	has_embedded_text_rect = nautilus_icon_info_get_embedded_rect (icon_info,
 								       &embedded_text_rect);
 
-	/* apply emblems */
-	if (emblem_icons != NULL) {
-		l = emblem_icons;
-
-		emblem = g_emblem_new (l->data);
-		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_object_unref (icon_info);
-		g_object_unref (pixbuf);
-
-		icon_info = nautilus_icon_info_lookup (emblemed_icon, icon_size);
-		pixbuf = nautilus_icon_info_get_pixbuf_at_size (icon_info, icon_size);
-
-		g_object_unref (emblemed_icon);
-	}
-
 	g_object_unref (icon_info);
  
 	if (has_embedded_text_rect && embedded_text_needs_loading) {
@@ -7136,7 +7108,6 @@ nautilus_icon_container_update_icon (NautilusIconContainer *container,
 
 	/* Let the pixbufs go. */
 	g_object_unref (pixbuf);
-	g_list_free_full (emblem_icons, g_object_unref);
 
 	g_free (editable_text);
 	g_free (additional_text);
diff --git a/libnautilus-private/nautilus-icon-container.h b/libnautilus-private/nautilus-icon-container.h
index e8a066a..711a591 100644
--- a/libnautilus-private/nautilus-icon-container.h
+++ b/libnautilus-private/nautilus-icon-container.h
@@ -141,7 +141,6 @@ typedef struct {
 	NautilusIconInfo *(* get_icon_images)     (NautilusIconContainer *container,
 						   NautilusIconData *data,
 						   int icon_size,
-						   GList **emblem_icons,
 						   char **embedded_text,
 						   gboolean for_drag_accept,
 						   gboolean need_large_embeddded_text,
diff --git a/src/file-manager/fm-icon-container.c b/src/file-manager/fm-icon-container.c
index 02e3249..fb5f602 100644
--- a/src/file-manager/fm-icon-container.c
+++ b/src/file-manager/fm-icon-container.c
@@ -52,7 +52,6 @@ static NautilusIconInfo *
 fm_icon_container_get_icon_images (NautilusIconContainer *container,
 				   NautilusIconData      *data,
 				   int                    size,
-				   GList                **emblem_icons,
 				   char                 **embedded_text,
 				   gboolean               for_drag_accept,
 				   gboolean               need_large_embeddded_text,
@@ -64,6 +63,11 @@ fm_icon_container_get_icon_images (NautilusIconContainer *container,
 	NautilusFile *file;
 	gboolean use_embedding;
 	NautilusFileIconFlags flags;
+	NautilusIconInfo *icon_info;
+	GdkPixbuf *pixbuf;
+	GIcon *emblemed_icon;
+	GEmblem *emblem;
+	GList *emblem_icons, *l;
 
 	file = (NautilusFile *) data;
 
@@ -77,14 +81,6 @@ fm_icon_container_get_icon_images (NautilusIconContainer *container,
 		use_embedding = *embedded_text != NULL;
 	}
 	
-	if (emblem_icons != NULL) {
-		emblems_to_ignore = fm_directory_view_get_emblem_names_to_exclude 
-			(FM_DIRECTORY_VIEW (icon_view));
-		*emblem_icons = nautilus_file_get_emblem_icons (file,
-								emblems_to_ignore);
-		g_strfreev (emblems_to_ignore);
-	}
-
 	*has_window_open = nautilus_file_has_open_window (file);
 
 	flags = NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON_AS_EMBLEM;
@@ -102,8 +98,43 @@ fm_icon_container_get_icon_images (NautilusIconContainer *container,
 	if (for_drag_accept) {
 		flags |= NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT;
 	}
-	
-	return nautilus_file_get_icon (file, size, flags);
+
+	emblems_to_ignore = fm_directory_view_get_emblem_names_to_exclude 
+		(FM_DIRECTORY_VIEW (icon_view));
+	emblem_icons = nautilus_file_get_emblem_icons (file,
+						       emblems_to_ignore);
+	g_strfreev (emblems_to_ignore);
+
+	icon_info = nautilus_file_get_icon (file, size, flags);
+	pixbuf = nautilus_icon_info_get_pixbuf (icon_info);
+
+	/* apply emblems */
+	if (emblem_icons != NULL) {
+		l = emblem_icons;
+
+		emblem = g_emblem_new (l->data);
+		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);
+
+		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;
 }
 
 static char *



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