[gnome-settings-daemon] Use systemd to shutdown if power runs low



commit bdc1a6439bcc7965a1dcd40b4130d250acc527aa
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Dec 23 23:04:58 2011 -0500

    Use systemd to shutdown if power runs low
    
    When --enable-systemd is passed to configure, talk to logind
    instead of ConsoleKit to power the machine off.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=666787

 plugins/power/gsd-power-manager.c |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)
---
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index 8d12c2c..0809daa 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -52,6 +52,10 @@
 #define CONSOLEKIT_DBUS_PATH_MANAGER            "/org/freedesktop/ConsoleKit/Manager"
 #define CONSOLEKIT_DBUS_INTERFACE_MANAGER       "org.freedesktop.ConsoleKit.Manager"
 
+#define SYSTEMD_DBUS_NAME                       "org.freedesktop.login1"
+#define SYSTEMD_DBUS_PATH                       "/org/freedesktop/login1"
+#define SYSTEMD_DBUS_INTERFACE                  "org.freedesktop.login1.Manager"
+
 #define UPOWER_DBUS_NAME                        "org.freedesktop.UPower"
 #define UPOWER_DBUS_PATH                        "/org/freedesktop/UPower"
 #define UPOWER_DBUS_PATH_KBDBACKLIGHT           "/org/freedesktop/UPower/KbdBacklight"
@@ -1955,6 +1959,26 @@ gnome_session_shutdown (void)
         g_object_unref (proxy);
 }
 
+#ifdef HAVE_SYSTEMD
+
+static void
+systemd_stop (void)
+{
+        GDBusConnection *bus;
+
+        bus = g_bus_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+        g_dbus_connection_call (bus,
+                                SYSTEMD_DBUS_NAME,
+                                SYSTEMD_DBUS_PATH,
+                                SYSTEMD_DBUS_INTERFACE,
+                                "PowerOff",
+                                g_variant_new ("(b)", FALSE),
+                                NULL, 0, G_MAXINT, NULL, NULL, NULL);
+        g_object_unref (bus);
+}
+
+#else
+
 static void
 consolekit_stop_cb (GObject *source_object,
                     GAsyncResult *res,
@@ -2003,6 +2027,7 @@ consolekit_stop (void)
                            consolekit_stop_cb, NULL);
         g_object_unref (proxy);
 }
+#endif
 
 static void
 upower_sleep_cb (GObject *source_object,
@@ -2055,7 +2080,11 @@ do_power_action_type (GsdPowerManager *manager,
                 /* this is only used on critically low battery where
                  * hibernate is not available and is marginally better
                  * than just powering down the computer mid-write */
+#ifdef HAVE_SYSTEMD
+                systemd_stop ();
+#else
                 consolekit_stop ();
+#endif
                 break;
         case GSD_POWER_ACTION_BLANK:
                 ret = gnome_rr_screen_set_dpms_mode (manager->priv->x11_screen,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]