summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2021-05-26 17:08:03 +0200
committerGuido Günther <agx@sigxcpu.org>2021-05-26 18:47:38 +0200
commit3aa34c1211b84a3e26e0f4b88d5d7e4e5d83e2fd (patch)
tree0b500aa343c0ba4f72e46719ecdf8910b47ca807
parent24f0ae1d3981f8d7b5ab6a3980f7999ef0600c65 (diff)
downloadgtk+-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.c54
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);