placesview: Present FUSE-reachable network shares in Other Locations
The documentation about gtk_file_chooser_set_local_only() states that "non-native files may still be available using the native filesystem via a userspace filesystem (FUSE)." The code that made this possible in GTK+2 was missing from GTK+3 and that represented a regression for Linux users in numerous applications (Firefox, Thunderbird, Chromium, ...) https://bugzilla.gnome.org/show_bug.cgi?id=787128
This commit is contained in:
committed by
Matthias Clasen
parent
86dd1e37a7
commit
279b81d202
@@ -1183,8 +1183,7 @@ update_places (GtkPlacesView *view)
|
|||||||
populate_servers (view);
|
populate_servers (view);
|
||||||
|
|
||||||
/* fetch networks and add them asynchronously */
|
/* fetch networks and add them asynchronously */
|
||||||
if (!gtk_places_view_get_local_only (view))
|
fetch_networks (view);
|
||||||
fetch_networks (view);
|
|
||||||
|
|
||||||
update_view_mode (view);
|
update_view_mode (view);
|
||||||
/* Check whether we still are in a loading state */
|
/* Check whether we still are in a loading state */
|
||||||
@@ -1904,6 +1903,30 @@ on_listbox_row_activated (GtkPlacesView *view,
|
|||||||
activate_row (view, row, priv->current_open_flags);
|
activate_row (view, row, priv->current_open_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
is_mount_locally_accessible (GMount *mount)
|
||||||
|
{
|
||||||
|
GFile *base_file;
|
||||||
|
gchar *path;
|
||||||
|
|
||||||
|
if (mount == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
base_file = g_mount_get_root (mount);
|
||||||
|
|
||||||
|
if (base_file == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
path = g_file_get_path (base_file);
|
||||||
|
g_object_unref (base_file);
|
||||||
|
|
||||||
|
if (path == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
g_free (path);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
listbox_filter_func (GtkListBoxRow *row,
|
listbox_filter_func (GtkListBoxRow *row,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
@@ -1911,6 +1934,7 @@ listbox_filter_func (GtkListBoxRow *row,
|
|||||||
GtkPlacesViewPrivate *priv;
|
GtkPlacesViewPrivate *priv;
|
||||||
gboolean is_network;
|
gboolean is_network;
|
||||||
gboolean is_placeholder;
|
gboolean is_placeholder;
|
||||||
|
gboolean is_local = FALSE;
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
gboolean searching;
|
gboolean searching;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
@@ -1923,7 +1947,20 @@ listbox_filter_func (GtkListBoxRow *row,
|
|||||||
is_network = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), "is-network"));
|
is_network = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), "is-network"));
|
||||||
is_placeholder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), "is-placeholder"));
|
is_placeholder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), "is-placeholder"));
|
||||||
|
|
||||||
if (is_network && priv->local_only)
|
if (GTK_IS_PLACES_VIEW_ROW (row))
|
||||||
|
{
|
||||||
|
GtkPlacesViewRow *placesviewrow;
|
||||||
|
GMount *mount;
|
||||||
|
|
||||||
|
placesviewrow = GTK_PLACES_VIEW_ROW (row);
|
||||||
|
g_object_get(G_OBJECT (placesviewrow), "mount", &mount, NULL);
|
||||||
|
|
||||||
|
is_local = is_mount_locally_accessible (mount);
|
||||||
|
|
||||||
|
g_clear_object (&mount);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_network && priv->local_only && !is_local)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (is_placeholder && searching)
|
if (is_placeholder && searching)
|
||||||
|
|||||||
Reference in New Issue
Block a user