Add logout support for lxsession.
authorHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Wed, 30 Oct 2013 11:39:29 +0000 (19:39 +0800)
committerHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Wed, 30 Oct 2013 11:39:29 +0000 (19:39 +0800)
lxqtpower/lxqtpower.cpp
lxqtpower/lxqtpowerproviders.cpp
lxqtpower/lxqtpowerproviders.h

index d511c8f..ce309f3 100644 (file)
@@ -32,7 +32,7 @@
 #include <QtCore/QDebug>
 
 using namespace LxQt;
-\
+
 Power::Power(QObject *parent) :
     QObject(parent)
 {
@@ -40,6 +40,7 @@ Power::Power(QObject *parent) :
     mProviders.append(new UPowerProvider(this));
     mProviders.append(new ConsoleKitProvider(this));
     mProviders.append(new SystemdProvider(this));
+    mProviders.append(new LxSessionProvider(this));
     mProviders.append(new RazorProvider(this));
 }
 
index 6067ca8..7a75d09 100644 (file)
@@ -32,6 +32,7 @@
 #include <QtCore/QProcess>
 #include <QtCore/QDebug>
 #include "lxqtnotification.h"
+#include <signal.h> // for kill()
 
 #define UPOWER_SERVICE          "org.freedesktop.UPower"
 #define UPOWER_PATH             "/org/freedesktop/UPower"
@@ -49,6 +50,9 @@
 #define RAZOR_PATH         "/RazorSession"
 #define RAZOR_INTERFACE    "org.razorqt.session"
 
+#define LXSESSION_SERVICE      "org.lxde.SessionManager"
+#define LXSESSION_PATH         "/org/lxde/SessionManager"
+#define LXSESSION_INTERFACE    "org.lxde.SessionManager"
 
 #define PROPERTIES_INTERFACE    "org.freedesktop.DBus.Properties"
 
@@ -516,6 +520,46 @@ bool RazorProvider::doAction(Power::Action action)
             );
 }
 
+/************************************************
+  LxSessionProvider
+ ************************************************/
+LxSessionProvider::LxSessionProvider(QObject *parent):
+    PowerProvider(parent)
+{
+    pid = (Q_PID)qgetenv("_LXSESSION_PID").toLong();
+}
+
+
+LxSessionProvider::~LxSessionProvider()
+{
+}
+
+
+bool LxSessionProvider::canAction(Power::Action action) const
+{
+    switch (action)
+    {
+        case Power::PowerLogout:
+            return pid != 0;
+        default:
+            return false;
+    }
+}
+
+
+bool LxSessionProvider::doAction(Power::Action action)
+{
+    switch (action)
+    {
+    case Power::PowerLogout:
+        if(pid)
+            ::kill(pid, SIGTERM);
+        break;
+    default:
+        return false;
+    }
+       return true;
+}
 
 
 /************************************************
index 07677d6..d80a5f5 100644 (file)
@@ -32,6 +32,7 @@
 #include <QtCore/QObject>
 #include <lxqtsettings.h>
 #include "lxqtpower.h"
+#include <QProcess> // for PID_T
 
 namespace LxQt
 {
@@ -112,6 +113,19 @@ public slots:
     bool doAction(Power::Action action);
 };
 
+class LxSessionProvider: public PowerProvider
+{
+    Q_OBJECT
+public:
+    LxSessionProvider(QObject *parent = 0);
+    ~LxSessionProvider();
+    bool canAction(Power::Action action) const;
+
+public slots:
+    bool doAction(Power::Action action);
+private:
+    Q_PID pid;
+};
 
 class HalProvider: public PowerProvider
 {