Commit 264455d0 authored by Guido Gunther's avatar Guido Gunther
Browse files

gtkapplication-dbus: Fetch inital screen saver state async

parent f6335925
Pipeline #68082 passed with stages
in 69 minutes and 11 seconds
From: =?utf-8?q?Guido_G=C3=BCnther?= <agx@sigxcpu.org>
Date: Wed, 26 May 2021 17:08:03 +0200
Subject: gtkapplication-dbus: Fetch inital screen saver state async
Avoid a sync call that can make the application block for no good
reason.
Fixes 6bfe17105828b0b2eb0f4a362d3039d9416e3519
---
gtk/gtkapplication-dbus.c | 54 ++++++++++++++++++++++++++++-------------------
1 file changed, 32 insertions(+), 22 deletions(-)
diff --git a/gtk/gtkapplication-dbus.c b/gtk/gtkapplication-dbus.c
index a270354..4951b1f 100644
--- a/gtk/gtkapplication-dbus.c
+++ b/gtk/gtkapplication-dbus.c
@@ -227,6 +227,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,
@@ -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);
......@@ -40,3 +40,4 @@ window-Disable-window-dragging-on-phones.patch
events-Compress-touch-update-events.patch
librem5-Make-GtkShortcutsWindow-adaptive.patch
gdk-wayland-Take-transform-into-account-when-setting-phys.patch
gtkapplication-dbus-Fetch-inital-screen-saver-state-async.patch
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment