diff options
author | Guido Günther <agx@sigxcpu.org> | 2021-05-26 17:08:03 +0200 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2021-05-26 18:47:38 +0200 |
commit | 3aa34c1211b84a3e26e0f4b88d5d7e4e5d83e2fd (patch) | |
tree | 0b500aa343c0ba4f72e46719ecdf8910b47ca807 | |
parent | 24f0ae1d3981f8d7b5ab6a3980f7999ef0600c65 (diff) | |
download | gtk+-3aa34c1211b84a3e26e0f4b88d5d7e4e5d83e2fd.tar.gz |
gtkapplication-dbus: Fetch inital screen saver state async
Avoid a sync call that can make the application block for no good
reason.
Fixes 6bfe17105828b0b2eb0f4a362d3039d9416e3519
-rw-r--r-- | gtk/gtkapplication-dbus.c | 54 |
1 files changed, 32 insertions, 22 deletions
diff --git a/gtk/gtkapplication-dbus.c b/gtk/gtkapplication-dbus.c index 812163f8f2..0b77e36b0e 100644 --- a/gtk/gtkapplication-dbus.c +++ b/gtk/gtkapplication-dbus.c @@ -255,6 +255,30 @@ screensaver_signal_portal (GDBusConnection *connection, } static void +ss_get_active_cb (GObject *source, + GAsyncResult *result, + gpointer data) +{ + GtkApplicationImplDBus *dbus = (GtkApplicationImplDBus *) data; + GDBusProxy *proxy = G_DBUS_PROXY (source); + GError *error = NULL; + GVariant *ret; + gboolean active; + + ret = g_dbus_proxy_call_finish (proxy, result, &error); + if (ret == NULL) + { + g_warning ("Getting screensaver status failed: %s", error->message); + g_error_free (error); + return; + } + + g_variant_get (ret, "(b)", &active); + g_variant_unref (ret); + gtk_application_set_screensaver_active (dbus->impl.application, active); +} + +static void create_monitor_cb (GObject *source, GAsyncResult *result, gpointer data) @@ -359,31 +383,17 @@ gtk_application_impl_dbus_startup (GtkApplicationImpl *impl, if (dbus->ss_proxy) { - GVariant *active_var; - gboolean active; - g_signal_connect (dbus->ss_proxy, "g-signal", G_CALLBACK (screensaver_signal_session), impl->application); - active_var = g_dbus_proxy_call_sync (dbus->ss_proxy, - "GetActive", - NULL, - G_DBUS_CALL_FLAGS_NONE, - G_MAXINT, - NULL, - &error); - if (!active_var) - { - g_debug ("Error calling GetActive on GNOME screensaver: %s", - error->message); - g_clear_error (&error); - } - else - { - g_variant_get (active_var, "(b)", &active); - g_variant_unref (active_var); - gtk_application_set_screensaver_active (dbus->impl.application, active); - } + g_dbus_proxy_call (dbus->ss_proxy, + "GetActive", + NULL, + G_DBUS_CALL_FLAGS_NONE, + G_MAXINT, + NULL, + ss_get_active_cb, + dbus); } g_debug ("Registering client '%s' '%s'", dbus->application_id, client_id); |