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-06-01 14:32:58 +0200
commit72ab4c46edbcbbf8985f42f5f0cee1b799ce5a91 (patch)
tree523d922ac169f6c3b1ba3f08b77cc960a87bb93d
parent1308bc613149edcfdfceea7aff70910c9d36fa4c (diff)
downloadgtk+-72ab4c46edbcbbf8985f42f5f0cee1b799ce5a91.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 6f6b5faaa216feed666b659d1cdfacd0c5c393d9
-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 a270354119..4951b1f558 100644
--- a/gtk/gtkapplication-dbus.c
+++ b/gtk/gtkapplication-dbus.c
@@ -228,6 +228,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)
@@ -329,31 +353,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);