From 0f40f7e2e66b2d19e324f825aff847ccb54c1758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20J=C3=BCrgens?= Date: Sun, 13 Apr 2014 02:21:30 +0200 Subject: [PATCH] Added systemd hibernation support. --- xfce4-session/xfsm-shutdown.c | 11 +++++++++++ xfce4-session/xfsm-systemd.c | 25 +++++++++++++++++++++++++ xfce4-session/xfsm-systemd.h | 7 +++++++ 3 files changed, 43 insertions(+) diff --git a/xfce4-session/xfsm-shutdown.c b/xfce4-session/xfsm-shutdown.c index 4c483a7..1912a89 100644 --- a/xfce4-session/xfsm-shutdown.c +++ b/xfce4-session/xfsm-shutdown.c @@ -703,7 +703,11 @@ xfsm_shutdown_try_hibernate (XfsmShutdown *shutdown, { g_return_val_if_fail (XFSM_IS_SHUTDOWN (shutdown), FALSE); +#ifdef HAVE_SYSTEMD + return xfsm_systemd_try_hibernate (shutdown->systemd, error); +#else return xfsm_upower_try_hibernate (shutdown->upower, error); +#endif } @@ -804,8 +808,15 @@ xfsm_shutdown_can_hibernate (XfsmShutdown *shutdown, return TRUE; } +#ifdef HAVE_SYSTEMD + if (xfsm_systemd_can_hibernate (shutdown->systemd, can_hibernate, + error)) + *auth_hibernate = TRUE; + return TRUE; +#else return xfsm_upower_can_hibernate (shutdown->upower, can_hibernate, auth_hibernate, error); +#endif } diff --git a/xfce4-session/xfsm-systemd.c b/xfce4-session/xfsm-systemd.c index 7bdd39d..e3a6c3b 100644 --- a/xfce4-session/xfsm-systemd.c +++ b/xfce4-session/xfsm-systemd.c @@ -33,8 +33,10 @@ #define SYSTEMD_DBUS_INTERFACE "org.freedesktop.login1.Manager" #define SYSTEMD_REBOOT_ACTION "Reboot" #define SYSTEMD_POWEROFF_ACTION "PowerOff" +#define SYSTEMD_HIBERNATE_ACTION "Hibernate" #define SYSTEMD_REBOOT_TEST "org.freedesktop.login1.reboot" #define SYSTEMD_POWEROFF_TEST "org.freedesktop.login1.power-off" +#define SYSTEMD_HIBERNATE_TEST "org.freedesktop.login1.hibernate" @@ -205,6 +207,17 @@ xfsm_systemd_try_shutdown (XfsmSystemd *systemd, gboolean +xfsm_systemd_try_hibernate (XfsmSystemd *systemd, + GError **error) +{ + return xfsm_systemd_try_method (systemd, + SYSTEMD_HIBERNATE_ACTION, + error); +} + + + +gboolean xfsm_systemd_can_restart (XfsmSystemd *systemd, gboolean *can_restart, GError **error) @@ -227,3 +240,15 @@ xfsm_systemd_can_shutdown (XfsmSystemd *systemd, SYSTEMD_POWEROFF_TEST, error); } + + +gboolean +xfsm_systemd_can_hibernate (XfsmSystemd *systemd, + gboolean *can_hibernate, + GError **error) +{ + return xfsm_systemd_can_method (systemd, + can_hibernate, + SYSTEMD_HIBERNATE_TEST, + error); +} diff --git a/xfce4-session/xfsm-systemd.h b/xfce4-session/xfsm-systemd.h index 8223622..be9d0aa 100644 --- a/xfce4-session/xfsm-systemd.h +++ b/xfce4-session/xfsm-systemd.h @@ -42,6 +42,9 @@ gboolean xfsm_systemd_try_restart (XfsmSystemd *systemd, gboolean xfsm_systemd_try_shutdown (XfsmSystemd *systemd, GError **error); +gboolean xfsm_systemd_try_hibernate (XfsmSystemd *systemd, + GError **error); + gboolean xfsm_systemd_can_restart (XfsmSystemd *systemd, gboolean *can_restart, GError **error); @@ -50,6 +53,10 @@ gboolean xfsm_systemd_can_shutdown (XfsmSystemd *systemd, gboolean *can_shutdown, GError **error); +gboolean xfsm_systemd_can_hibernate (XfsmSystemd *systemd, + gboolean *can_hiberate, + GError **error); + G_END_DECLS #endif /* __XFSM_SYSTEMD_H__ */ -- 1.8.3.2