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
* 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
* 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
**/
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);
}
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)
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;
}
}
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,
{
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
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;
+}
+
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__ */