filechooser: Show FUSE mounted locations in shortcuts

Since FUSE locations can be handled safely by applications show these mounted locations regardless of whether gtk_file_chooser_set_local_only()
is set to TRUE

https://bugzilla.gnome.org/show_bug.cgi?id=586367
This commit is contained in:
Timothy Arceri 2012-11-18 19:39:11 +11:00 committed by Federico Mena Quintero
parent 776fc82bd5
commit 5d32c05578
5 changed files with 43 additions and 8 deletions

View File

@ -934,6 +934,10 @@ gtk_file_chooser_get_action (GtkFileChooser *chooser)
* rather than the URI functions like
* gtk_file_chooser_get_uri(),
*
* On some systems non-native files may still be
* available using the native filesystem via a userspace
* filesystem (FUSE).
*
* Since: 2.4
**/
void
@ -1368,7 +1372,9 @@ gtk_file_chooser_set_current_name (GtkFileChooser *chooser,
* folder.
*
* Return value: The currently selected URI, or %NULL
* if no file is selected. Free with g_free()
* if no file is selected. If gtk_file_chooser_set_local_only() is set to %TRUE
* (the default) a local URI will be returned for any FUSE locations.
* Free with g_free()
*
* Since: 2.4
**/
@ -1383,7 +1389,19 @@ gtk_file_chooser_get_uri (GtkFileChooser *chooser)
file = gtk_file_chooser_get_file (chooser);
if (file)
{
result = g_file_get_uri (file);
if (gtk_file_chooser_get_local_only (chooser))
{
gchar *local = g_file_get_path (file);
if (local)
{
result = g_filename_to_uri (local, NULL, NULL);
g_free (local);
}
}
else
{
result = g_file_get_uri (file);
}
g_object_unref (file);
}

View File

@ -1873,7 +1873,7 @@ shortcuts_append_bookmarks (GtkFileChooserDefault *impl,
file = bookmarks->data;
if (impl->local_only && !g_file_is_native (file))
if (impl->local_only && _gtk_file_is_path_not_local (file))
continue;
if (shortcut_find_position (impl, file) != -1)
@ -2000,16 +2000,16 @@ shortcuts_add_volumes (GtkFileChooserDefault *impl)
if (_gtk_file_system_volume_is_mounted (volume))
{
GFile *base_file;
gboolean base_is_native = TRUE;
gboolean base_is_not_local = FALSE;
base_file = _gtk_file_system_volume_get_root (volume);
if (base_file != NULL)
{
base_is_native = g_file_is_native (base_file);
base_is_not_local = _gtk_file_is_path_not_local (base_file);
g_object_unref (base_file);
}
if (!base_is_native)
if (base_is_not_local)
continue;
}
}
@ -7240,7 +7240,7 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser *chooser,
operation_mode_set (impl, OPERATION_MODE_BROWSE);
if (impl->local_only && !g_file_is_native (file))
if (impl->local_only && _gtk_file_is_path_not_local (file))
{
g_set_error_literal (error,
GTK_FILE_CHOOSER_ERROR,

View File

@ -1467,7 +1467,7 @@ start_loading_current_folder (GtkFileChooserEntry *chooser_entry)
g_assert (chooser_entry->load_folder_cancellable == NULL);
if (chooser_entry->local_only
&& !g_file_is_native (chooser_entry->current_folder_file))
&& !_gtk_file_is_path_not_local (chooser_entry->current_folder_file))
{
g_object_unref (chooser_entry->current_folder_file);
chooser_entry->current_folder_file = NULL;

View File

@ -1927,3 +1927,17 @@ _gtk_file_info_consider_as_directory (GFileInfo *info)
type == G_FILE_TYPE_SHORTCUT);
}
gboolean
_gtk_file_is_path_not_local (GFile *file)
{
char *local_file_path;
gboolean is_not_local;
/* Don't use is_native(), as we want to support fuse paths if available */
local_file_path = g_file_get_path (file);
is_not_local = (local_file_path == NULL);
g_free (local_file_path);
return is_not_local;
}

View File

@ -175,6 +175,9 @@ GdkPixbuf * _gtk_file_info_render_icon (GFileInfo *info,
gboolean _gtk_file_info_consider_as_directory (GFileInfo *info);
/* GFile helper functions */
gboolean _gtk_file_is_path_not_local (GFile *file);
G_END_DECLS
#endif /* __GTK_FILE_SYSTEM_H__ */