void-packages/srcpkgs/xfce4-session/patches/xfce4-session-4.10.1-logind-support-for-suspend-hibernate.patch

276 lines
8.7 KiB
Diff

From b076b5592579b397b7d4888eb8062e646b9a4dec Mon Sep 17 00:00:00 2001
From: Mikhail Efremov <sem@altlinux.org>
Date: Wed, 10 Apr 2013 17:10:09 +0400
Subject: [PATCH] Add systemd-logind support for suspend/hibernate.
---
xfce4-session/Makefile.am | 8 +++----
xfce4-session/xfsm-shutdown.c | 42 +++++++++++++++++++++++++++-------
xfce4-session/xfsm-systemd.c | 52 +++++++++++++++++++++++++++++++++++++++++++
xfce4-session/xfsm-systemd.h | 14 ++++++++++++
4 files changed, 104 insertions(+), 12 deletions(-)
diff --git a/xfce4-session/Makefile.am b/xfce4-session/Makefile.am
index 5472b33..5e2973b 100644
--- xfce4-session/Makefile.am
+++ xfce4-session/Makefile.am
@@ -59,9 +59,7 @@ xfce4_session_SOURCES = \
xfsm-splash-screen.c \
xfsm-splash-screen.h \
xfsm-startup.c \
- xfsm-startup.h \
- xfsm-upower.c \
- xfsm-upower.h
+ xfsm-startup.h
if HAVE_SYSTEMD
xfce4_session_SOURCES += \
@@ -70,7 +68,9 @@ xfce4_session_SOURCES += \
else
xfce4_session_SOURCES += \
xfsm-consolekit.c \
- xfsm-consolekit.h
+ xfsm-consolekit.h \
+ xfsm-upower.c \
+ xfsm-upower.h
endif
xfce4_session_CFLAGS = \
diff --git a/xfce4-session/xfsm-shutdown.c b/xfce4-session/xfsm-shutdown.c
index 4c483a7..8a2ba8d 100644
--- xfce4-session/xfsm-shutdown.c
+++ xfce4-session/xfsm-shutdown.c
@@ -66,12 +66,12 @@
#include <xfce4-session/xfsm-fadeout.h>
#include <xfce4-session/xfsm-global.h>
#include <xfce4-session/xfsm-legacy.h>
-#include <xfce4-session/xfsm-upower.h>
#ifdef HAVE_SYSTEMD
#include <xfce4-session/xfsm-systemd.h>
#else
#include <xfce4-session/xfsm-consolekit.h>
+#include <xfce4-session/xfsm-upower.h>
#endif
static void xfsm_shutdown_finalize (GObject *object);
@@ -100,8 +100,8 @@ struct _XfsmShutdown
XfsmSystemd *systemd;
#else
XfsmConsolekit *consolekit;
-#endif
XfsmUPower *upower;
+#endif
/* kiosk settings */
gboolean kiosk_can_shutdown;
@@ -142,8 +142,8 @@ xfsm_shutdown_init (XfsmShutdown *shutdown)
shutdown->systemd = xfsm_systemd_get ();
#else
shutdown->consolekit = xfsm_consolekit_get ();
-#endif
shutdown->upower = xfsm_upower_get ();
+#endif
shutdown->helper_state = SUDO_NOT_INITIAZED;
shutdown->helper_require_password = FALSE;
@@ -165,8 +165,8 @@ xfsm_shutdown_finalize (GObject *object)
g_object_unref (G_OBJECT (shutdown->systemd));
#else
g_object_unref (G_OBJECT (shutdown->consolekit));
-#endif
g_object_unref (G_OBJECT (shutdown->upower));
+#endif
/* close down helper */
xfsm_shutdown_sudo_free (shutdown);
@@ -692,7 +692,11 @@ xfsm_shutdown_try_suspend (XfsmShutdown *shutdown,
{
g_return_val_if_fail (XFSM_IS_SHUTDOWN (shutdown), FALSE);
+#ifdef HAVE_SYSTEMD
+ return xfsm_systemd_try_suspend (shutdown->systemd, error);
+#else
return xfsm_upower_try_suspend (shutdown->upower, error);
+#endif
}
@@ -703,7 +707,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
}
@@ -776,6 +784,8 @@ xfsm_shutdown_can_suspend (XfsmShutdown *shutdown,
gboolean *auth_suspend,
GError **error)
{
+ gboolean ret;
+
g_return_val_if_fail (XFSM_IS_SHUTDOWN (shutdown), FALSE);
if (!xfsm_shutdown_kiosk_can_shutdown (shutdown, NULL))
@@ -784,8 +794,15 @@ xfsm_shutdown_can_suspend (XfsmShutdown *shutdown,
return TRUE;
}
- return xfsm_upower_can_suspend (shutdown->upower, can_suspend,
- auth_suspend, error);
+#ifdef HAVE_SYSTEMD
+ ret = xfsm_systemd_can_suspend (shutdown->systemd, can_suspend, error);
+ *auth_suspend = *can_suspend;
+#else
+ ret = xfsm_upower_can_suspend (shutdown->upower, can_suspend,
+ auth_suspend, error);
+#endif
+
+ return ret;
}
@@ -796,6 +813,8 @@ xfsm_shutdown_can_hibernate (XfsmShutdown *shutdown,
gboolean *auth_hibernate,
GError **error)
{
+ gboolean ret;
+
g_return_val_if_fail (XFSM_IS_SHUTDOWN (shutdown), FALSE);
if (!xfsm_shutdown_kiosk_can_shutdown (shutdown, NULL))
@@ -804,8 +823,15 @@ xfsm_shutdown_can_hibernate (XfsmShutdown *shutdown,
return TRUE;
}
- return xfsm_upower_can_hibernate (shutdown->upower, can_hibernate,
- auth_hibernate, error);
+#ifdef HAVE_SYSTEMD
+ ret = xfsm_systemd_can_hibernate (shutdown->systemd, can_hibernate, error);
+ *auth_hibernate = *can_hibernate;
+#else
+ ret = xfsm_upower_can_hibernate (shutdown->upower, can_hibernate,
+ auth_hibernate, error);
+#endif
+
+ return ret;
}
diff --git a/xfce4-session/xfsm-systemd.c b/xfce4-session/xfsm-systemd.c
index 7bdd39d..cfe7bf4 100644
--- xfce4-session/xfsm-systemd.c
+++ xfce4-session/xfsm-systemd.c
@@ -33,8 +33,12 @@
#define SYSTEMD_DBUS_INTERFACE "org.freedesktop.login1.Manager"
#define SYSTEMD_REBOOT_ACTION "Reboot"
#define SYSTEMD_POWEROFF_ACTION "PowerOff"
+#define SYSTEMD_SUSPEND_ACTION "Suspend"
+#define SYSTEMD_HIBERNATE_ACTION "Hibernate"
#define SYSTEMD_REBOOT_TEST "org.freedesktop.login1.reboot"
#define SYSTEMD_POWEROFF_TEST "org.freedesktop.login1.power-off"
+#define SYSTEMD_SUSPEND_TEST "org.freedesktop.login1.suspend"
+#define SYSTEMD_HIBERNATE_TEST "org.freedesktop.login1.hibernate"
@@ -205,6 +209,28 @@ xfsm_systemd_try_shutdown (XfsmSystemd *systemd,
gboolean
+xfsm_systemd_try_suspend (XfsmSystemd *systemd,
+ GError **error)
+{
+ return xfsm_systemd_try_method (systemd,
+ SYSTEMD_SUSPEND_ACTION,
+ error);
+}
+
+
+
+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 +253,29 @@ xfsm_systemd_can_shutdown (XfsmSystemd *systemd,
SYSTEMD_POWEROFF_TEST,
error);
}
+
+
+
+gboolean
+xfsm_systemd_can_suspend (XfsmSystemd *systemd,
+ gboolean *can_suspend,
+ GError **error)
+{
+ return xfsm_systemd_can_method (systemd,
+ can_suspend,
+ SYSTEMD_SUSPEND_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..6cf803f 100644
--- xfce4-session/xfsm-systemd.h
+++ xfce4-session/xfsm-systemd.h
@@ -42,6 +42,12 @@ gboolean xfsm_systemd_try_restart (XfsmSystemd *systemd,
gboolean xfsm_systemd_try_shutdown (XfsmSystemd *systemd,
GError **error);
+gboolean xfsm_systemd_try_suspend (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 +56,14 @@ gboolean xfsm_systemd_can_shutdown (XfsmSystemd *systemd,
gboolean *can_shutdown,
GError **error);
+gboolean xfsm_systemd_can_suspend (XfsmSystemd *systemd,
+ gboolean *can_suspend,
+ GError **error);
+
+gboolean xfsm_systemd_can_hibernate (XfsmSystemd *systemd,
+ gboolean *can_hibernate,
+ GError **error);
+
G_END_DECLS
#endif /* __XFSM_SYSTEMD_H__ */
--
1.8.1.5