lxqtpower: Allow disabling of lxqt-session provider
authorPalo Kisa <palo.kisa@gmail.com>
Wed, 28 Jun 2017 07:25:43 +0000 (09:25 +0200)
committerPalo Kisa <palo.kisa@gmail.com>
Fri, 7 Jul 2017 07:10:42 +0000 (09:10 +0200)
To allow usage of LXQt::Power object inside of lxqt-session (handling
the called method of LXQtSessionProvider) we need to avoid recurently
calling lxqt-session itself.

lxqtpower/lxqtpower.cpp
lxqtpower/lxqtpower.h
lxqtpower/lxqtpowerproviders.cpp

index 742793b..07cd19e 100644 (file)
 
 using namespace LXQt;
 
-Power::Power(QObject *parent) :
+Power::Power(bool useLxqtSessionProvider, QObject * parent /*= nullptr*/) :
     QObject(parent)
 {
     mProviders.append(new CustomProvider(this));
+    if (useLxqtSessionProvider)
+        mProviders.append(new LXQtProvider(this));
     mProviders.append(new SystemdProvider(this));
     mProviders.append(new UPowerProvider(this));
     mProviders.append(new ConsoleKitProvider(this));
     mProviders.append(new LxSessionProvider(this));
-    mProviders.append(new LXQtProvider(this));
+}
+
+Power::Power(QObject * parent /*= nullptr*/)
+    : Power(true, parent)
+{
 }
 
 
index f738b46..98b021e 100644 (file)
@@ -56,8 +56,16 @@ public:
         PowerSuspend    /// Suspend the computer
     };
 
-    /// Constructs a Power with parent.
-    explicit Power(QObject *parent = 0);
+    /*!
+     * Constructs the Power object.
+     * \param useLxqtSessionProvider indicates if the DBus methods
+     * provided by lxqt-session should be considered. This is useful to
+     * avoid recursion if the lxqt-session wants to provide some of the
+     * methods by itself with internal use of this object.
+     */
+    explicit Power(bool useLxqtSessionProvider, QObject *parent = nullptr);
+    /// Constructs a Power with using the lxqt-session provider.
+    explicit Power(QObject *parent = nullptr);
 
     /// Destroys the object.
     virtual ~Power();
index 1304e05..3907cc7 100644 (file)
@@ -500,31 +500,45 @@ LXQtProvider::~LXQtProvider()
 
 bool LXQtProvider::canAction(Power::Action action) const
 {
+    QString command;
     switch (action)
     {
         case Power::PowerLogout:
-            // there can be case when razo-session does not run
-            return dbusCall(LXQT_SERVICE, LXQT_PATH, LXQT_SERVICE,
-                            QDBusConnection::sessionBus(), "canLogout",
-                            PowerProvider::DontCheckDBUS);
+            command = "canLogout";
+            break;
+        case Power::PowerReboot:
+            command = "canReboot";
+            break;
+        case Power::PowerShutdown:
+            command = "canPowerOff";
+            break;
         default:
             return false;
     }
+
+    // there can be case when lxqtsession-session does not run
+    return dbusCall(LXQT_SERVICE, LXQT_PATH, LXQT_SERVICE,
+            QDBusConnection::sessionBus(), command,
+            PowerProvider::DontCheckDBUS);
 }
 
 
 bool LXQtProvider::doAction(Power::Action action)
 {
     QString command;
-
     switch (action)
     {
-    case Power::PowerLogout:
-        command = "logout";
-        break;
-
-    default:
-        return false;
+        case Power::PowerLogout:
+            command = "logout";
+            break;
+        case Power::PowerReboot:
+            command = "reboot";
+            break;
+        case Power::PowerShutdown:
+            command = "powerOff";
+            break;
+        default:
+            return false;
     }
 
     return dbusCall(LXQT_SERVICE,