Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:13.1:Update
xfce4-power-manager
xfce4-power-manager-systemd-suspend-hibernate-s...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xfce4-power-manager-systemd-suspend-hibernate-suport.patch of Package xfce4-power-manager
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(-) Index: xfce4-power-manager-1.2.0/configure.ac =================================================================== --- xfce4-power-manager-1.2.0.orig/configure.ac +++ xfce4-power-manager-1.2.0/configure.ac @@ -150,6 +150,25 @@ fi AC_MSG_RESULT([$ac_network_manager]) #=======================================================# +# Suspend/hibernate support # +#=======================================================# +AC_ARG_WITH([sleep-manager], AS_HELP_STRING([--with-sleep-manager=systemd|upower], + [Build with specific suspend/hibernate support (default: systemd)]), + [], [with_sleep_manager=systemd]) +AC_MSG_CHECKING([for suspend/hibernate support]) +case "$with_sleep_manager" in + systemd) + ;; + upower) + AC_DEFINE(WITH_SLEEP_MANAGER_UPOWER, 1 , [Use upower for suspend/hibernate]) + ;; + *) + AC_MSG_ERROR(--with-sleep-manager must be one of [upower, systemd]) + ;; +esac +AC_MSG_RESULT([$with_sleep_manager]) + +#=======================================================# # Panel plugins ? # #=======================================================# AC_ARG_ENABLE([panel_plugins], @@ -250,6 +269,7 @@ echo "xdg autostart: ${sysconfdir}/xdg/ echo "POLKIT: ${polkit}" echo "DPMS: ${have_dpms}" echo "Network manager: ${ac_network_manager}" +echo "Suspend/hibernate: ${with_sleep_manager}" echo "Build panel plugins: ${build_panel_plugins}" echo "Debug: ${enable_debug}" echo "Configuration finished, type make to compile" Index: xfce4-power-manager-1.2.0/src/xfpm-power-common.h =================================================================== --- xfce4-power-manager-1.2.0.orig/src/xfpm-power-common.h +++ xfce4-power-manager-1.2.0/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); Index: xfce4-power-manager-1.2.0/src/xfpm-power.c =================================================================== --- xfce4-power-manager-1.2.0.orig/src/xfpm-power.c +++ xfce4-power-manager-1.2.0/src/xfpm-power.c @@ -76,7 +76,10 @@ struct XfpmPowerPrivate DBusGProxy *proxy; DBusGProxy *proxy_prop; - +#ifndef WITH_SLEEP_MANAGER_UPOWER + DBusGProxy *proxy_logind; +#endif + GHashTable *hash; #ifdef HAVE_SYSTEMD @@ -160,6 +163,7 @@ xfpm_power_check_polkit_auth (XfpmPower } #endif +#ifdef WITH_SLEEP_MANAGER_UPOWER static void xfpm_power_check_pm (XfpmPower *power, GHashTable *props) { @@ -193,6 +197,33 @@ xfpm_power_check_pm (XfpmPower *power, G 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 ((g_strcmp0 (retstr, "yes") == 0) || + (g_strcmp0 (retstr, "challenge") == 0)) + ret = TRUE; + g_free (retstr); + + return ret; +} +#endif static void xfpm_power_check_power (XfpmPower *power, GHashTable *props) @@ -283,7 +314,12 @@ xfpm_power_get_properties (XfpmPower *po 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); @@ -354,9 +390,16 @@ xfpm_power_sleep (XfpmPower *power, cons 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 ) { @@ -1394,12 +1437,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 @@ -1506,6 +1557,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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor