gtkapplication-dbus: Initialise screensaver-active property
authorBob Ham <bob.ham@puri.sm>
Fri, 6 Sep 2019 13:59:27 +0000 (14:59 +0100)
committerBob Ham <bob.ham@puri.sm>
Fri, 6 Sep 2019 13:59:27 +0000 (14:59 +0100)
When GtkApplication starts listening to the screensaver's D-Bus
status, the screensaver-active property is not initialised and
applications making use of the property are out of sync until the
first state change.  Any application starting when the screensaver is
active will think it's inactive.

To fix this, we set the property when we first start monitoring the
screensaver.

gtk/gtkapplication-dbus.c

index b73d86046c7206fce68ec94b61503799e9b43b06..a58112a503d1c11be7ec9f11ce8effd6aa66c373 100644 (file)
@@ -358,8 +358,31 @@ 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_debug ("Registering client '%s' '%s'", dbus->application_id, client_id);