[Xfce4-commits] [xfce/xfce4-power-manager] 01/02: Add support for logind suspend/resume (Bug 9963)

noreply at xfce.org noreply at xfce.org
Sun Apr 13 04:47:35 CEST 2014


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository xfce/xfce4-power-manager.

commit 6cdc97e979b6924913ce270b06ad92d304e61ee4
Author: Eric Koegel <eric.koegel at gmail.com>
Date:   Sat Apr 12 18:32:49 2014 +0300

    Add support for logind suspend/resume (Bug 9963)
    
    This patch does runtime checks to see if we can use logind for
    suspend/resume same as poweroff/reboot. There's still full support
    for ConsoleKit.
---
 src/xfpm-power.c   |   28 ++++++++++++++++++++++++----
 src/xfpm-systemd.c |   47 +++++++++++++++++++++++++++++++++++++++++++----
 src/xfpm-systemd.h |    4 ++++
 3 files changed, 71 insertions(+), 8 deletions(-)

diff --git a/src/xfpm-power.c b/src/xfpm-power.c
index dd952bd..618944a 100644
--- a/src/xfpm-power.c
+++ b/src/xfpm-power.c
@@ -280,7 +280,20 @@ xfpm_power_get_properties (XfpmPower *power)
 
     props = xfpm_power_get_interface_properties (power->priv->proxy_prop, UPOWER_IFACE);
 
-    xfpm_power_check_pm (power, props);
+    if ( LOGIND_RUNNING () )
+    {
+        g_object_get (G_OBJECT (power->priv->systemd),
+                      "can-suspend", &power->priv->can_suspend,
+                      NULL);
+	g_object_get (G_OBJECT (power->priv->systemd),
+                      "can-hibernate", &power->priv->can_hibernate,
+                      NULL);
+    }
+    else
+    {
+	xfpm_power_check_pm (power, props);
+    }
+
     xfpm_power_check_lid (power, props);
     xfpm_power_check_power (power, props);
 
@@ -351,9 +364,16 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
 	xfpm_lock_screen ();
     }
 
-    dbus_g_proxy_call (power->priv->proxy, sleep_time, &error,
-		       G_TYPE_INVALID,
-		       G_TYPE_INVALID);
+    if ( LOGIND_RUNNING () )
+    {
+	xfpm_systemd_sleep (power->priv->systemd, sleep_time, &error);
+    }
+    else
+    {
+	dbus_g_proxy_call (power->priv->proxy, sleep_time, &error,
+			   G_TYPE_INVALID,
+			   G_TYPE_INVALID);
+    }
 
     if ( error )
     {
diff --git a/src/xfpm-systemd.c b/src/xfpm-systemd.c
index 2b840db..236d8cc 100644
--- a/src/xfpm-systemd.c
+++ b/src/xfpm-systemd.c
@@ -46,6 +46,8 @@ struct XfpmSystemdPrivate
 {
     gboolean         can_shutdown;
     gboolean         can_restart;
+    gboolean         can_suspend;
+    gboolean         can_hibernate;
 #ifdef ENABLE_POLKIT
     XfpmPolkit      *polkit;
 #endif
@@ -55,7 +57,9 @@ enum
 {
     PROP_0,
     PROP_CAN_RESTART,
-    PROP_CAN_SHUTDOWN
+    PROP_CAN_SHUTDOWN,
+    PROP_CAN_SUSPEND,
+    PROP_CAN_HIBERNATE,
 };
 
 G_DEFINE_TYPE (XfpmSystemd, xfpm_systemd, G_TYPE_OBJECT)
@@ -67,6 +71,8 @@ G_DEFINE_TYPE (XfpmSystemd, xfpm_systemd, G_TYPE_OBJECT)
 #define SYSTEMD_POWEROFF_ACTION         "PowerOff"
 #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"
 
 static void
 xfpm_systemd_class_init (XfpmSystemdClass *klass)
@@ -91,6 +97,20 @@ xfpm_systemd_class_init (XfpmSystemdClass *klass)
                                                            FALSE,
                                                            G_PARAM_READABLE));
 
+    g_object_class_install_property (object_class,
+                                     PROP_CAN_SUSPEND,
+                                     g_param_spec_boolean ("can-suspend",
+                                                           NULL, NULL,
+                                                           FALSE,
+                                                           G_PARAM_READABLE));
+
+    g_object_class_install_property (object_class,
+                                     PROP_CAN_HIBERNATE,
+                                     g_param_spec_boolean ("can-hibernate",
+                                                           NULL, NULL,
+                                                           FALSE,
+                                                           G_PARAM_READABLE));
+
     g_type_class_add_private (klass, sizeof (XfpmSystemdPrivate));
 }
 
@@ -126,6 +146,12 @@ xfpm_systemd_init (XfpmSystemd *systemd)
     xfpm_systemd_can_method (systemd,
                              &systemd->priv->can_restart,
                              SYSTEMD_REBOOT_TEST);
+    xfpm_systemd_can_method (systemd,
+                             &systemd->priv->can_suspend,
+                             SYSTEMD_SUSPEND_TEST);
+    xfpm_systemd_can_method (systemd,
+                             &systemd->priv->can_hibernate,
+                             SYSTEMD_HIBERNATE_TEST);
 }
 
 static void xfpm_systemd_get_property (GObject *object,
@@ -144,6 +170,12 @@ static void xfpm_systemd_get_property (GObject *object,
     case PROP_CAN_RESTART:
         g_value_set_boolean (value, systemd->priv->can_restart);
         break;
+    case PROP_CAN_SUSPEND:
+        g_value_set_boolean (value, systemd->priv->can_suspend);
+        break;
+    case PROP_CAN_HIBERNATE:
+        g_value_set_boolean (value, systemd->priv->can_hibernate);
+        break;
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
             break;
@@ -175,12 +207,12 @@ xfpm_systemd_new (void)
 
     if ( G_LIKELY (systemd_obj != NULL ) )
     {
-    g_object_ref (systemd_obj);
+        g_object_ref (systemd_obj);
     }
     else
     {
-    systemd_obj = g_object_new (XFPM_TYPE_SYSTEMD, NULL);
-    g_object_add_weak_pointer (systemd_obj, &systemd_obj);
+        systemd_obj = g_object_new (XFPM_TYPE_SYSTEMD, NULL);
+        g_object_add_weak_pointer (systemd_obj, &systemd_obj);
     }
 
     return XFPM_SYSTEMD (systemd_obj);
@@ -227,3 +259,10 @@ void xfpm_systemd_reboot (XfpmSystemd *systemd, GError **error)
                              SYSTEMD_REBOOT_ACTION,
                              error);
 }
+
+void xfpm_systemd_sleep (XfpmSystemd *systemd,
+                         const gchar *method,
+                         GError **error)
+{
+    xfpm_systemd_try_method (systemd, method, error);
+}
diff --git a/src/xfpm-systemd.h b/src/xfpm-systemd.h
index 7ade4f4..f50e9fd 100644
--- a/src/xfpm-systemd.h
+++ b/src/xfpm-systemd.h
@@ -57,6 +57,10 @@ void                xfpm_systemd_shutdown   (XfpmSystemd *systemd,
 void                xfpm_systemd_reboot (XfpmSystemd *systemd,
                                          GError **error);
 
+void                xfpm_systemd_sleep (XfpmSystemd *systemd,
+                                        const gchar *method,
+                                        GError **error);
+
 G_END_DECLS
 
 #endif /* __XFPM_SYSTEMD_H */

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list