Index: egg-recent-item.c
===================================================================
RCS file: /cvs/gnome/libegg/libegg/recent-files/egg-recent-item.c,v
retrieving revision 1.16
diff -u -p -r1.16 egg-recent-item.c
--- egg-recent-item.c	17 Aug 2004 15:24:10 -0000	1.16
+++ egg-recent-item.c	7 Oct 2004 10:32:09 -0000
@@ -39,6 +39,7 @@ egg_recent_item_new (void)
 	item->private_data = FALSE;
 	item->uri = NULL;
 	item->mime_type = NULL;
+	item->mime_type_is_explicit = FALSE;
 
 	item->refcount = 1;
 
@@ -97,11 +98,6 @@ egg_recent_item_new_from_uri (const gcha
 		return NULL;
 	}
 	
-	item->mime_type = gnome_vfs_get_mime_type (item->uri);
-
-	if (!item->mime_type)
-		item->mime_type = g_strdup (GNOME_VFS_MIME_TYPE_UNKNOWN);
-
 	return item;
 }
 
@@ -182,6 +178,21 @@ egg_recent_item_new_valist (const gchar 
 }
 */
 
+static void
+egg_recent_item_update_mime_type (EggRecentItem *item)
+{
+	if (!item->mime_type_is_explicit) {
+		g_free (item->mime_type);
+		item->mime_type = NULL;
+
+		if (item->uri)
+			item->mime_type = gnome_vfs_get_mime_type (item->uri);
+
+		if (!item->mime_type)
+			item->mime_type = g_strdup (GNOME_VFS_MIME_TYPE_UNKNOWN);
+	}
+}
+
 gboolean
 egg_recent_item_set_uri (EggRecentItem *item, const gchar *uri)
 {
@@ -208,6 +219,8 @@ egg_recent_item_set_uri (EggRecentItem *
 		g_free (utf8_uri);
 	}
 
+	egg_recent_item_update_mime_type (item);
+
 	return TRUE;
 }
 
@@ -334,7 +347,16 @@ egg_recent_item_get_short_name (const Eg
 void 
 egg_recent_item_set_mime_type (EggRecentItem *item, const gchar *mime)
 {
-	item->mime_type = g_strdup (mime);
+	g_free (item->mime_type);
+	item->mime_type = NULL;
+
+	if (mime && mime[0]) {
+		item->mime_type_is_explicit = TRUE;
+		item->mime_type             = g_strdup (mime);
+	} else {
+		item->mime_type_is_explicit = FALSE;
+		egg_recent_item_update_mime_type (item);
+	}
 }
 
 gchar * 
Index: egg-recent-item.h
===================================================================
RCS file: /cvs/gnome/libegg/libegg/recent-files/egg-recent-item.h,v
retrieving revision 1.11
diff -u -p -r1.11 egg-recent-item.h
--- egg-recent-item.h	2 Aug 2004 21:59:27 -0000	1.11
+++ egg-recent-item.h	7 Oct 2004 10:32:09 -0000
@@ -27,6 +27,8 @@ struct _EggRecentItem {
 	GList *groups;
 	
 	int refcount;
+
+	guint mime_type_is_explicit : 1;
 };
 
 GType		egg_recent_item_get_type (void) G_GNUC_CONST;
