diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index baecc10aaa..3a0dc6e41b 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -637,28 +637,36 @@ _gtk_file_chooser_extract_recent_folders (GList *infos) for (l = infos; l; l = l->next) { GtkRecentInfo *info = l->data; - const char *uri; - GFile *parent; + const char *uri, *mime_type; + GFile *dir; GFile *file; - uri = gtk_recent_info_get_uri (info); - - if (!g_str_has_prefix (uri, "file://")) + if (!gtk_recent_info_is_local (info)) continue; + uri = gtk_recent_info_get_uri (info); file = g_file_new_for_uri (uri); - parent = g_file_get_parent (file); - g_object_unref (file); - if (parent) + mime_type = gtk_recent_info_get_mime_type (info); + if (strcmp (mime_type, "inode/directory") != 0) { - if (!g_hash_table_lookup (folders, parent)) + dir = g_file_get_parent (file); + g_object_unref (file); + } + else + { + dir = file; + } + + if (dir) + { + if (!g_hash_table_lookup (folders, dir)) { - g_hash_table_insert (folders, parent, (gpointer) 1); - result = g_list_prepend (result, g_object_ref (parent)); + g_hash_table_insert (folders, dir, (gpointer) 1); + result = g_list_prepend (result, g_object_ref (dir)); } - g_object_unref (parent); + g_object_unref (dir); } } @@ -5996,8 +6004,7 @@ recent_start_loading (GtkFileChooserWidget *impl) GtkRecentInfo *info = l->data; GFile *file; - const char *uri = gtk_recent_info_get_uri (info); - if (!g_str_has_prefix (uri, "file://")) + if (!gtk_recent_info_is_local (info)) continue; if (gtk_recent_info_get_private_hint (info) &&