[gtk/gtk-3-24: 1/2] gtkapplication-dbus: Fetch inital screen saver state async




commit 72ab4c46edbcbbf8985f42f5f0cee1b799ce5a91
Author: Guido Günther <agx sigxcpu org>
Date:   Wed May 26 17:08:03 2021 +0200

    gtkapplication-dbus: Fetch inital screen saver state async
    
    Avoid a sync call that can make the application block for no good
    reason.
    
    Fixes 6f6b5faaa216feed666b659d1cdfacd0c5c393d9

 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 a270354119..4951b1f558 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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]