[gnome-settings-daemon/rhel/account-and-subman-plugins: 2/23] account: reshow the notification when screen unlocks




commit f273e27da098fbc8b2732509cb6cfd610e598b30
Author: Ray Strode <rstrode redhat com>
Date:   Mon Nov 6 15:49:58 2017 -0500

    account: reshow the notification when screen unlocks

 plugins/account/gsd-account-manager.c | 48 +++++++++++++++++++++++++++++++----
 1 file changed, 43 insertions(+), 5 deletions(-)
---
diff --git a/plugins/account/gsd-account-manager.c b/plugins/account/gsd-account-manager.c
index 40b91cb6..cb37f466 100644
--- a/plugins/account/gsd-account-manager.c
+++ b/plugins/account/gsd-account-manager.c
@@ -38,6 +38,7 @@
 #include <libnotify/notify.h>
 
 #include "gnome-settings-profile.h"
+#include "gnome-settings-bus.h"
 #include "gsd-account-manager.h"
 #include "org.freedesktop.Accounts.h"
 #include "org.freedesktop.Accounts.User.h"
@@ -50,6 +51,8 @@ struct GsdAccountManagerPrivate
         GsdAccountsUser      *accounts_user_proxy;
         GCancellable         *cancellable;
 
+        GsdScreenSaver       *screensaver_proxy;
+
         gint64                expiration_time;
         gint64                last_change_time;
         gint64                min_days_between_changes;
@@ -248,6 +251,36 @@ out:
         gnome_settings_profile_end (NULL);
 }
 
+static void
+fetch_password_expiration_policy (GsdAccountManager *manager)
+{
+        gsd_accounts_user_call_get_password_expiration_policy (manager->priv->accounts_user_proxy,
+                                                               manager->priv->cancellable,
+                                                               (GAsyncReadyCallback)
+                                                               on_got_password_expiration_policy,
+                                                               manager);
+}
+
+static void
+on_screensaver_signal (GDBusProxy  *proxy,
+                       const gchar *sender_name,
+                       const gchar *signal_name,
+                       GVariant    *parameters,
+                       gpointer     user_data)
+{
+        GsdAccountManager *manager = user_data;
+
+        if (g_strcmp0 (signal_name, "ActiveChanged") == 0) {
+                gboolean active;
+
+                g_variant_get (parameters, "(b)", &active);
+
+                if (!active) {
+                        fetch_password_expiration_policy (manager);
+                }
+        }
+}
+
 static void
 on_got_accounts_user_proxy (GObject      *source_object,
                             GAsyncResult *res,
@@ -260,11 +293,15 @@ on_got_accounts_user_proxy (GObject      *source_object,
         manager->priv->accounts_user_proxy = gsd_accounts_user_proxy_new_finish (res, &error);
 
         if (manager->priv->accounts_user_proxy != NULL) {
-                gsd_accounts_user_call_get_password_expiration_policy (manager->priv->accounts_user_proxy,
-                                                                       manager->priv->cancellable,
-                                                                       (GAsyncReadyCallback)
-                                                                       on_got_password_expiration_policy,
-                                                                       manager);
+                fetch_password_expiration_policy (manager);
+
+                manager->priv->screensaver_proxy = gnome_settings_bus_get_screen_saver_proxy ();
+
+                g_signal_connect (manager->priv->screensaver_proxy,
+                                  "g-signal",
+                                  G_CALLBACK (on_screensaver_signal),
+                                  manager);
+
         } else {
                 g_warning ("Failed to get user proxy to accounts service: %s", error->message);
                 goto out;
@@ -370,6 +407,7 @@ gsd_account_manager_stop (GsdAccountManager *manager)
         g_clear_object (&manager->priv->accounts_proxy);
         g_clear_object (&manager->priv->accounts_user_proxy);
         g_clear_object (&manager->priv->notification);
+        g_clear_object (&manager->priv->screensaver_proxy);
 }
 
 static void


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