]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - liblightdm-qt/power.cpp
Add support for Mir sessions and greeters.
[sojka/lightdm.git] / liblightdm-qt / power.cpp
index 3df5cbd5047b3f89a8f0153e1539b66e5ff48bbd..eb0c82cd2d207bae9fafc8e54618b76b4a393e0e 100644 (file)
@@ -15,6 +15,7 @@
 #include <QtCore/QVariant>
 #include <QtDBus/QDBusInterface>
 #include <QtDBus/QDBusReply>
+#include <QDebug>
 
 #include "config.h"
 
@@ -26,11 +27,13 @@ public:
     PowerInterfacePrivate();
     QScopedPointer<QDBusInterface> powerManagementInterface;
     QScopedPointer<QDBusInterface> consoleKitInterface;
+    QScopedPointer<QDBusInterface> login1Interface;
 };
 
 PowerInterface::PowerInterfacePrivate::PowerInterfacePrivate() :
     powerManagementInterface(new QDBusInterface("org.freedesktop.UPower","/org/freedesktop/UPower", "org.freedesktop.UPower", QDBusConnection::systemBus())),
-    consoleKitInterface(new QDBusInterface("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", QDBusConnection::systemBus()))
+    consoleKitInterface(new QDBusInterface("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", QDBusConnection::systemBus())),
+    login1Interface(new QDBusInterface("org.freedesktop.login1", "/org/freedesktop/login1", "org.freedesktop.login1.Manager", QDBusConnection::systemBus()))
 {
 }
 
@@ -48,6 +51,17 @@ PowerInterface::~PowerInterface()
 
 bool PowerInterface::canSuspend()
 {
+    if (d->login1Interface->isValid())
+    {
+       QDBusReply<QString> reply = d->login1Interface->call("CanSuspend");
+       if (reply.isValid())
+       {
+           return reply.value() == "yes";
+       }
+    }
+
+    qWarning() << d->login1Interface->lastError();
+
     QDBusReply<bool> reply = d->powerManagementInterface->call("SuspendAllowed");
     if (reply.isValid()) {
         return reply.value();
@@ -57,13 +71,30 @@ bool PowerInterface::canSuspend()
     }
 }
 
-void PowerInterface::suspend()
+bool PowerInterface::suspend()
 {
-    d->powerManagementInterface->call("Suspend");
+    QDBusReply<void> reply;
+    if (d->login1Interface->isValid())
+        reply = d->login1Interface->call("Suspend", false);
+    else
+        reply = d->powerManagementInterface->call("Suspend");
+
+    return reply.isValid ();
 }
 
 bool PowerInterface::canHibernate()
 {
+    if (d->login1Interface->isValid())
+    {
+        QDBusReply<QString> reply = d->login1Interface->call("CanHibernate");
+        if (reply.isValid())
+        {
+            return reply.value() == "yes";
+        }
+    }
+
+    qWarning() << d->login1Interface->lastError();
+
     QDBusReply<bool> reply = d->powerManagementInterface->call("HibernateAllowed");
     if (reply.isValid()) {
         return reply.value();
@@ -73,41 +104,71 @@ bool PowerInterface::canHibernate()
     }
 }
 
-void PowerInterface::hibernate()
+bool PowerInterface::hibernate()
 {
-    d->powerManagementInterface->call("Hibernate");
+    QDBusReply<void> reply;
+    if (d->login1Interface->isValid())
+        reply = d->login1Interface->call("Hibernate", false);
+    else
+        reply = d->powerManagementInterface->call("Hibernate");
+
+    return reply.isValid ();
 }
 
 bool PowerInterface::canShutdown()
 {
+    if (d->login1Interface->isValid()) {
+        QDBusReply<QString> reply1 = d->login1Interface->call("CanPowerOff");
+        if (reply1.isValid()) {
+            return reply1.value() == "yes";
+        }
+    }
+    qWarning() << d->login1Interface->lastError();
+
     QDBusReply<bool> reply = d->consoleKitInterface->call("CanStop");
     if (reply.isValid()) {
         return reply.value();
     }
-    else {
-        return false;
-    }
+
+    return false;
 }
 
-void PowerInterface::shutdown()
+bool PowerInterface::shutdown()
 {
-    d->consoleKitInterface->call("Stop");
+    QDBusReply<void> reply;
+    if (d->login1Interface->isValid())
+        reply = d->login1Interface->call("PowerOff", false);
+    else
+        reply = d->consoleKitInterface->call("Stop");
+    return reply.isValid();
 }
 
 bool PowerInterface::canRestart()
 {
+    if (d->login1Interface->isValid()) {
+        QDBusReply<QString> reply1 = d->login1Interface->call("CanReboot");
+        if (reply1.isValid()) {
+            return reply1.value() == "yes";
+        }
+    }
+    qWarning() << d->login1Interface->lastError();
+  
     QDBusReply<bool> reply = d->consoleKitInterface->call("CanRestart");
     if (reply.isValid()) {
         return reply.value();
     }
-    else {
-        return false;
-    }
+
+    return false;
 }
 
-void PowerInterface::restart()
+bool PowerInterface::restart()
 {
-    d->consoleKitInterface->call("Restart");
+    QDBusReply<void> reply;
+    if (d->login1Interface->isValid())
+        reply = d->login1Interface->call("Reboot", false);
+    else
+        reply = d->consoleKitInterface->call("Restart");
+    return reply.isValid();
 }
 
 #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)