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