diff options
author | Mario Limonciello <mario.limonciello@dell.com> | 2018-03-08 08:17:07 -0600 |
---|---|---|
committer | Benjamin Berg <bberg@redhat.com> | 2018-04-12 14:01:15 +0200 |
commit | a6e3ee40d90294c603e1108e19ef8fe8e6af61eb (patch) | |
tree | f7099a61eb225bdf86b8c6d4c8bde66a7d5270ee /plugins/power/gsd-power-manager.c | |
parent | b9ca35714ceb48652e8207c7b73b565ee7346219 (diff) | |
download | gnome-settings-daemon-a6e3ee40d90294c603e1108e19ef8fe8e6af61eb.tar.gz |
power: Add Suspend then Hibernate
Systemd recently merged supported for suspending then hibernate
which is a new sleep type that will suspend the system followed by
hibernate after a period of time.
If the system supports it (new enough systemd and hibernation supported)
choose this when the system is configured to suspend.
Diffstat (limited to 'plugins/power/gsd-power-manager.c')
-rw-r--r-- | plugins/power/gsd-power-manager.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c index 82d81e96..78ec8890 100644 --- a/plugins/power/gsd-power-manager.c +++ b/plugins/power/gsd-power-manager.c @@ -900,12 +900,35 @@ action_poweroff (GsdPowerManager *manager) static void action_suspend (GsdPowerManager *manager) { + const gchar *action = "Suspend"; + g_autoptr(GVariant) retval = NULL; + g_autoptr(GError) error = NULL; + if (manager->priv->logind_proxy == NULL) { g_warning ("no systemd support"); return; } + + retval = g_dbus_proxy_call_sync (manager->priv->logind_proxy, + "CanSuspendThenHibernate", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, + manager->priv->cancellable, + &error); + if (retval == NULL) { + g_warning ("Failed to query CanSuspendThenHibernate: %s", error->message); + } else { + const gchar *s2h = NULL; + + g_variant_get (retval, "(s)", &s2h); + if (g_strcmp0 (s2h, "yes") == 0) + action = "SuspendThenHibernate"; + } + g_debug ("Choosing suspend action: %s", action); + g_dbus_proxy_call (manager->priv->logind_proxy, - "Suspend", + action, g_variant_new ("(b)", FALSE), G_DBUS_CALL_FLAGS_NONE, G_MAXINT, @@ -1061,6 +1084,7 @@ backlight_disable (GsdPowerManager *manager) g_error_free (error); } + g_debug("Is tablet: %d", manager->priv->is_tablet); if (manager->priv->is_tablet) action_suspend (manager); else @@ -1073,6 +1097,7 @@ static void do_power_action_type (GsdPowerManager *manager, GsdPowerActionType action_type) { + g_debug("Running power action type %d", action_type); switch (action_type) { case GSD_POWER_ACTION_SUSPEND: action_suspend (manager); |