summaryrefslogtreecommitdiff
path: root/extra/xfce4-power-manager/xfce4-power-manager-1.2.0-logind-support-for-suspend-hibernate.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/xfce4-power-manager/xfce4-power-manager-1.2.0-logind-support-for-suspend-hibernate.patch')
-rw-r--r--extra/xfce4-power-manager/xfce4-power-manager-1.2.0-logind-support-for-suspend-hibernate.patch156
1 files changed, 156 insertions, 0 deletions
diff --git a/extra/xfce4-power-manager/xfce4-power-manager-1.2.0-logind-support-for-suspend-hibernate.patch b/extra/xfce4-power-manager/xfce4-power-manager-1.2.0-logind-support-for-suspend-hibernate.patch
new file mode 100644
index 000000000..431489588
--- /dev/null
+++ b/extra/xfce4-power-manager/xfce4-power-manager-1.2.0-logind-support-for-suspend-hibernate.patch
@@ -0,0 +1,156 @@
+From 244d0f09561eace29cbef819c2deb55b13701e25 Mon Sep 17 00:00:00 2001
+From: Mikhail Efremov <sem@altlinux.org>
+Date: Mon, 8 Apr 2013 21:04:30 +0400
+Subject: [PATCH] Add systemd-logind support for suspend/hibernate.
+
+---
+ configure.ac.in | 20 +++++++++++++++++
+ src/xfpm-power-common.h | 8 +++++++
+ src/xfpm-power.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 84 insertions(+), 1 deletion(-)
+
+diff --git a/src/xfpm-power-common.h b/src/xfpm-power-common.h
+index 1040aed..11eaedc 100644
+--- a/src/xfpm-power-common.h
++++ b/src/xfpm-power-common.h
+@@ -33,9 +33,17 @@
+ #define UPOWER_PATH_WAKEUPS "/org/freedesktop/UPower/Wakeups"
+ #define UPOWER_IFACE_WAKEUPS "org.freedesktop.UPower.Wakeups"
+
++#ifdef WITH_SLEEP_MANAGER_UPOWER
+ #define POLKIT_AUTH_SUSPEND "org.freedesktop.upower.suspend"
+ #define POLKIT_AUTH_HIBERNATE "org.freedesktop.upower.hibernate"
++#else
++#define LOGIND_NAME "org.freedesktop.login1"
++#define LOGIND_PATH "/org/freedesktop/login1"
++#define LOGIND_IFACE "org.freedesktop.login1.Manager"
+
++#define POLKIT_AUTH_SUSPEND "org.freedesktop.login1.suspend"
++#define POLKIT_AUTH_HIBERNATE "org.freedesktop.login1.hibernate"
++#endif
+
+ GPtrArray *xfpm_power_enumerate_devices (DBusGProxy *proxy);
+
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index 796bef8..4a91e33 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -72,7 +72,10 @@ struct XfpmPowerPrivate
+
+ DBusGProxy *proxy;
+ DBusGProxy *proxy_prop;
+-
++#ifndef WITH_SLEEP_MANAGER_UPOWER
++ DBusGProxy *proxy_logind;
++#endif
++
+ GHashTable *hash;
+
+ XfpmConsoleKit *console;
+@@ -153,6 +156,7 @@ xfpm_power_check_polkit_auth (XfpmPower *power)
+ }
+ #endif
+
++#ifdef WITH_SLEEP_MANAGER_UPOWER
+ static void
+ xfpm_power_check_pm (XfpmPower *power, GHashTable *props)
+ {
+@@ -186,6 +190,32 @@ xfpm_power_check_pm (XfpmPower *power, GHashTable *props)
+ power->priv->can_hibernate = ret;
+ }
+ }
++#else
++static gboolean
++xfpm_power_can_sleep_method (XfpmPower *power, const char *method)
++{
++ GError *error = NULL;
++ char *retstr = NULL;
++ gboolean ret = FALSE;
++
++ if (!dbus_g_proxy_call (power->priv->proxy_logind, method, &error,
++ G_TYPE_INVALID,
++ G_TYPE_STRING, &retstr,
++ G_TYPE_INVALID))
++ {
++ g_warning ("Unable to check %s method: %s", method, error->message);
++ g_error_free (error);
++
++ return FALSE;
++ }
++
++ if (retstr && !strcmp (retstr, "yes"))
++ ret = TRUE;
++ g_free (retstr);
++
++ return ret;
++}
++#endif
+
+ static void
+ xfpm_power_check_power (XfpmPower *power, GHashTable *props)
+@@ -276,7 +306,12 @@ xfpm_power_get_properties (XfpmPower *power)
+
+ props = xfpm_power_get_interface_properties (power->priv->proxy_prop, UPOWER_IFACE);
+
++#ifdef WITH_SLEEP_MANAGER_UPOWER
+ xfpm_power_check_pm (power, props);
++#else
++ power->priv->can_suspend = xfpm_power_can_sleep_method (power, "CanSuspend");
++ power->priv->can_hibernate = xfpm_power_can_sleep_method (power, "CanHibernate");
++#endif
+ xfpm_power_check_lid (power, props);
+ xfpm_power_check_power (power, props);
+
+@@ -347,9 +382,16 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+ xfpm_lock_screen ();
+ }
+
++#ifdef WITH_SLEEP_MANAGER_UPOWER
+ dbus_g_proxy_call (power->priv->proxy, sleep_time, &error,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID);
++#else
++ dbus_g_proxy_call (power->priv->proxy_logind, sleep_time, &error,
++ G_TYPE_BOOLEAN, TRUE,
++ G_TYPE_INVALID,
++ G_TYPE_INVALID);
++#endif
+
+ if ( error )
+ {
+@@ -1360,12 +1402,20 @@ xfpm_power_init (XfpmPower *power)
+ UPOWER_NAME,
+ UPOWER_PATH,
+ DBUS_INTERFACE_PROPERTIES);
++
+ if (power->priv->proxy_prop == NULL)
+ {
+ g_critical ("Unable to create proxy for %s", UPOWER_NAME);
+ goto out;
+ }
+
++#ifndef WITH_SLEEP_MANAGER_UPOWER
++ power->priv->proxy_logind = dbus_g_proxy_new_for_name (power->priv->bus,
++ LOGIND_NAME,
++ LOGIND_PATH,
++ LOGIND_IFACE);
++#endif
++
+ xfpm_power_get_power_devices (power);
+ xfpm_power_get_properties (power);
+ #ifdef ENABLE_POLKIT
+@@ -1467,6 +1517,11 @@ xfpm_power_finalize (GObject *object)
+ if ( power->priv->proxy_prop )
+ g_object_unref (power->priv->proxy_prop);
+
++#ifndef WITH_SLEEP_MANAGER_UPOWER
++ if ( power->priv->proxy_logind )
++ g_object_unref (power->priv->proxy_logind);
++#endif
++
+ g_hash_table_destroy (power->priv->hash);
+
+ #ifdef ENABLE_POLKIT
+--
+1.8.1.5
+