Re: [PATCH] Fix special icons in thumbnail factory



Am Samstag, den 06.08.2005, 10:13 +0200 schrieb Jaap Haitsma:
> There is a leak in your code.

Scary. Thanks for pointing this out.

-- 
Christian Neumair <chris gnome-de org>
Index: libnautilus-private/nautilus-icon-factory.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-icon-factory.c,v
retrieving revision 1.314
diff -u -p -r1.314 nautilus-icon-factory.c
--- libnautilus-private/nautilus-icon-factory.c	21 May 2005 16:13:58 -0000	1.314
+++ libnautilus-private/nautilus-icon-factory.c	31 Jul 2005 19:31:38 -0000
@@ -800,11 +800,47 @@ should_show_thumbnail (NautilusFile *fil
 	return FALSE;
 }
 
+static char *
+get_special_icon_for_file (NautilusFile *file)
+{
+	char *uri, *ret;
+
+	if (file == NULL) {
+		return NULL;
+	}
+
+	if (nautilus_file_is_home (file)) {
+		return ICON_NAME_HOME;
+	}
+
+	ret = NULL;
+	uri = nautilus_file_get_uri (file);
+
+	if (strcmp (uri, "burn:///") == 0) {
+		ret = "gnome-dev-cdrom";
+	} else if (strcmp (uri, "computer:///") == 0) {
+		ret = "gnome-fs-client";
+	} else if ((strcmp (uri, "network:///") == 0)
+		   || (strcmp (uri, "smb:///") == 0)) {
+		ret = "gnome-fs-network";
+	} else if (strcmp (uri, EEL_TRASH_URI) == 0) {
+		if (nautilus_trash_monitor_is_empty ()) {
+			ret = ICON_NAME_TRASH_EMPTY;
+		} else {
+			ret = ICON_NAME_TRASH_FULL;
+		}
+	}
+
+	g_free (uri);
+
+	return ret;
+}
+
 /* key routine to get the icon for a file */
 char *
 nautilus_icon_factory_get_icon_for_file (NautilusFile *file, gboolean embedd_text)
 {
- 	char *custom_uri, *file_uri, *icon_name, *mime_type, *custom_icon;
+ 	char *custom_uri, *file_uri, *icon_name, *mime_type, *custom_icon, *special_icon;
 	NautilusIconFactory *factory;
 	GnomeIconLookupResultFlags lookup_result;
 	GnomeVFSFileInfo *file_info;
@@ -827,28 +863,13 @@ nautilus_icon_factory_get_icon_for_file 
 	}
  	g_free (custom_uri);
 
-	file_uri = nautilus_file_get_uri (file);
-
-	if (strcmp (file_uri, "burn:///") == 0) {
-		g_free (file_uri);
-		return  g_strdup ("gnome-dev-cdrom");
-	}
-	if (strcmp (file_uri, "computer:///") == 0) {
-		g_free (file_uri);
-		return  g_strdup ("gnome-fs-client");
-	}
-	
-	if (strcmp (file_uri, EEL_TRASH_URI) == 0) {
-		g_free (file_uri);
-		return  g_strdup (nautilus_trash_monitor_is_empty ()
-				  ? ICON_NAME_TRASH_EMPTY : ICON_NAME_TRASH_FULL);
+	special_icon = get_special_icon_for_file (file);
+	if (special_icon != NULL) {
+		return g_strdup (special_icon);
 	}
 
-	if (nautilus_file_is_home (file)) {
-		g_free (file_uri);
-		return g_strdup (ICON_NAME_HOME);
-	}
-		
+	file_uri = nautilus_file_get_uri (file);
+
 	mime_type = nautilus_file_get_mime_type (file);
 	
 	file_info = nautilus_file_peek_vfs_file_info (file);
@@ -924,7 +945,8 @@ nautilus_icon_factory_is_icon_ready_for_
 	gboolean result;
 
 	attributes = nautilus_icon_factory_get_required_file_attributes ();
-	result = nautilus_file_check_if_ready (file, attributes);
+	result = nautilus_file_check_if_ready (file, attributes) ||
+		 (get_special_icon_for_file (file) != NULL);
 
 	return result;
 }

Attachment: signature.asc
Description: This is a digitally signed message part



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