summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2020-09-25 15:55:15 +0200
committerOndrej Holy <oholy@redhat.com>2020-12-08 12:56:05 +0100
commitdc0c335636f24db541944623c597c9c1af73ae0b (patch)
treeb32b253dde76ca56637be1a0ad75b1f5c04cac50 /client
parent29a00938055d3c7c11533bdda3f84ec51d4cbb32 (diff)
downloadgvfs-dc0c335636f24db541944623c597c9c1af73ae0b.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.
Diffstat (limited to 'client')
-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,