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 9a1c54d580
commit cf216d780c
5 changed files with 43 additions and 8 deletions

View File

@ -907,6 +907,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
@ -1345,7 +1349,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
**/
@ -1360,7 +1366,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

@ -1854,7 +1854,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)
@ -1976,16 +1976,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;
}
}
@ -7338,7 +7338,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

@ -558,7 +558,7 @@ set_completion_folder (GtkFileChooserEntry *chooser_entry,
{
if (folder_file &&
chooser_entry->local_only
&& !g_file_is_native (folder_file))
&& _gtk_file_is_path_not_local (folder_file))
folder_file = NULL;
if ((chooser_entry->current_folder_file

View File

@ -1273,3 +1273,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

@ -128,6 +128,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__ */