summaryrefslogtreecommitdiff
path: root/src/gpm-control.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpm-control.c')
-rw-r--r--src/gpm-control.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/gpm-control.c b/src/gpm-control.c
index 221ed60..38f476f 100644
--- a/src/gpm-control.c
+++ b/src/gpm-control.c
@@ -368,6 +368,13 @@ gpm_control_hibernate (GpmControl *control, GError **error)
EggConsoleKit *console;
GpmScreensaver *screensaver;
guint32 throttle_cookie = 0;
+#ifdef WITH_LIBSECRET
+ gboolean lock_libsecret;
+ GCancellable *libsecret_cancellable = NULL;
+ SecretService *secretservice_proxy = NULL;
+ gint num_secrets_locked;
+ GList *libsecret_collections = NULL;
+#endif /* WITH_LIBSECRET */
#ifdef WITH_KEYRING
gboolean lock_gnome_keyring;
GnomeKeyringResult keyres;
@@ -391,6 +398,36 @@ gpm_control_hibernate (GpmControl *control, GError **error)
}
}
+#ifdef WITH_LIBSECRET
+ /* we should perhaps lock keyrings when sleeping #375681 */
+ lock_libsecret = g_settings_get_boolean (control->priv->settings,
+ GPM_SETTINGS_LOCK_KEYRING_SUSPEND);
+ if (lock_libsecret) {
+ libsecret_cancellable = g_cancellable_new ();
+ secretservice_proxy = secret_service_get_sync (SECRET_SERVICE_LOAD_COLLECTIONS,
+ libsecret_cancellable,
+ error);
+ if (secretservice_proxy == NULL) {
+ g_warning ("failed to connect to secret service");
+ } else {
+ libsecret_collections = secret_service_get_collections (secretservice_proxy);
+ if ( libsecret_collections == NULL) {
+ g_warning ("failed to get secret collections");
+ } else {
+ num_secrets_locked = secret_service_lock_sync (secretservice_proxy,
+ libsecret_collections,
+ libsecret_cancellable,
+ NULL,
+ error);
+ if (num_secrets_locked <= 0)
+ g_warning ("could not lock keyring");
+ g_list_free (libsecret_collections);
+ }
+ g_object_unref (secretservice_proxy);
+ }
+ g_object_unref (libsecret_cancellable);
+ }
+#endif /* WITH_LIBSECRET */
#ifdef WITH_KEYRING
/* we should perhaps lock keyrings when sleeping #375681 */
lock_gnome_keyring = g_settings_get_boolean (control->priv->settings, GPM_SETTINGS_LOCK_KEYRING_HIBERNATE);