summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2020-09-25 15:55:15 +0200
committerOndrej Holy <oholy@redhat.com>2020-09-25 15:55:15 +0200
commite3f3d77b465b11adde7ef8d257b980286d11331d (patch)
tree48d5c7a4fb292c2e86e830d570d8e0cbb4d33c36
parent7fb92e448dcf627b66c4326d7404671f4171ff11 (diff)
downloadgvfs-e3f3d77b465b11adde7ef8d257b980286d11331d.tar.gz
gvfsiconloadable: Fallback to session bus when peer-to-peer fails
g_vfs_icon_load_async fails if peer-to-peer connection can't be establised. Let's add fallback to session bus as it is implemented already on other places.
-rw-r--r--client/gvfsiconloadable.c58
1 files changed, 45 insertions, 13 deletions
diff --git a/client/gvfsiconloadable.c b/client/gvfsiconloadable.c
index e6a0a8f4..5050cfbe 100644
--- a/client/gvfsiconloadable.c
+++ b/client/gvfsiconloadable.c
@@ -196,20 +196,9 @@ async_proxy_new_cb (GObject *source_object,
}
static void
-async_got_connection_cb (GDBusConnection *connection,
- GError *io_error,
- gpointer callback_data)
+async_construct_proxy (GDBusConnection *connection,
+ AsyncPathCall *data)
{
- AsyncPathCall *data = callback_data;
-
- if (connection == NULL)
- {
- g_dbus_error_strip_remote_error (io_error);
- g_task_return_error (data->task, io_error);
- async_path_call_free (data);
- return;
- }
-
data->connection = g_object_ref (connection);
gvfs_dbus_mount_proxy_new (connection,
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
@@ -220,6 +209,49 @@ async_got_connection_cb (GDBusConnection *connection,
data);
}
+
+static void
+bus_get_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ AsyncPathCall *data = user_data;
+ GDBusConnection *connection;
+ GError *error = NULL;
+
+ connection = g_bus_get_finish (res, &error);
+
+ if (connection == NULL)
+ {
+ g_dbus_error_strip_remote_error (error);
+ g_task_return_error (data->task, error);
+ async_path_call_free (data);
+ return;
+ }
+
+ async_construct_proxy (connection, data);
+ g_object_unref (connection);
+}
+
+static void
+async_got_connection_cb (GDBusConnection *connection,
+ GError *io_error,
+ gpointer callback_data)
+{
+ AsyncPathCall *data = callback_data;
+
+ if (connection == NULL)
+ {
+ g_bus_get (G_BUS_TYPE_SESSION,
+ g_task_get_cancellable (data->task),
+ bus_get_cb,
+ data);
+ return;
+ }
+
+ async_construct_proxy (connection, data);
+}
+
static void
async_got_mount_info (GMountInfo *mount_info,
gpointer _data,