diff options
author | Ondrej Holy <oholy@redhat.com> | 2020-09-25 15:55:15 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2020-12-08 12:56:05 +0100 |
commit | dc0c335636f24db541944623c597c9c1af73ae0b (patch) | |
tree | b32b253dde76ca56637be1a0ad75b1f5c04cac50 /client | |
parent | 29a00938055d3c7c11533bdda3f84ec51d4cbb32 (diff) | |
download | gvfs-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.c | 58 |
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, |