RazorPower => LxQt::Power
authorAlexander Sokolov <sokoloff.a@gmail.com>
Sun, 6 Oct 2013 06:45:54 +0000 (10:45 +0400)
committerAlexander Sokolov <sokoloff.a@gmail.com>
Sun, 6 Oct 2013 06:45:54 +0000 (10:45 +0400)
CMakeLists.txt
lxqtpower/lxqtpower.cpp [new file with mode: 0644]
lxqtpower/lxqtpower.h [new file with mode: 0644]
lxqtpower/lxqtpowerproviders.cpp [new file with mode: 0644]
lxqtpower/lxqtpowerproviders.h [new file with mode: 0644]
powermanager.cpp
powermanager.h
razorpower/razorpower.cpp [deleted file]
razorpower/razorpower.h [deleted file]
razorpower/razorpowerproviders.cpp [deleted file]
razorpower/razorpowerproviders.h [deleted file]

index 389c8d9..0362bfe 100644 (file)
@@ -16,15 +16,11 @@ set(PUB_HDRS
     addplugindialog/addplugindialog.h
     screensaver.h
     razorapplication.h
-    # upower. Maybe standalone lib?
-    #librazor-upower/battery.h
-    #librazor-upower/ucpufreq.h
-    #librazor-upower/upower.h
     libtranslate.h
     pageselectwidget.h
     programfinder.h
     razorconfigdialog.h
-    razorpower/razorpower.h
+    lxqtpower/lxqtpower.h
     razornotification.h
     razorautostartentry.h
     translatorsinfo/translatorsinfo.h
@@ -51,15 +47,11 @@ set(SRCS
     razorsettings.cpp
     screensaver.cpp
     razorapplication.cpp
-    # upower. Maybe standalone lib?
-    #librazor-upower/battery.cpp
-    #librazor-upower/ucpufreq.cpp
-    #librazor-upower/upower.cpp
     pageselectwidget.cpp
     programfinder.cpp
     razorconfigdialog.cpp
-    razorpower/razorpower.cpp
-    razorpower/razorpowerproviders.cpp
+    lxqtpower/lxqtpower.cpp
+    lxqtpower/lxqtpowerproviders.cpp
     razornotification.cpp
     razorautostartentry.cpp
     translatorsinfo/translatorsinfo.cpp
@@ -75,16 +67,12 @@ set(MOCS
     razorsettings.h
     screensaver.h
     razorapplication.h
-    # upower. Maybe standalone lib?
-    #librazor-upower/battery.h
-    #librazor-upower/ucpufreq.h
-    #librazor-upower/upower.h
     pageselectwidget.h
     razorconfigdialog.h
     razornotification.h
     razornotification_p.h
-    razorpower/razorpower.h
-    razorpower/razorpowerproviders.h
+    lxqtpower/lxqtpower.h
+    lxqtpower/lxqtpowerproviders.h
     razorgridlayout.h
     rotatedwidget.h
 )
@@ -96,7 +84,7 @@ set(FORMS
 )
 
 
-find_package(Qt4 REQUIRED)
+find_package(Qt4 REQUIRED QUIET)
 include(${QT_USE_FILE})
 
 QT4_ADD_DBUS_INTERFACE(SRCS
@@ -104,9 +92,9 @@ QT4_ADD_DBUS_INTERFACE(SRCS
     notifications_interface
 )
 
-find_package(X11 REQUIRED)
+find_package(X11 REQUIRED QUIET)
 
-find_package(QTXDG REQUIRED)
+find_package(QTXDG REQUIRED QUIET)
 include(${QTXDG_USE_FILE})
 
 
diff --git a/lxqtpower/lxqtpower.cpp b/lxqtpower/lxqtpower.cpp
new file mode 100644 (file)
index 0000000..d511c8f
--- /dev/null
@@ -0,0 +1,89 @@
+/* BEGIN_COMMON_COPYRIGHT_HEADER
+ * (c)LGPL2+
+ *
+ * Razor - a lightweight, Qt based, desktop toolset
+ * http://razor-qt.org
+ *
+ * Copyright: 2010-2011 Razor team
+ * Authors:
+ *   Alexander Sokoloff <sokoloff.a@gmail.com>
+ *
+ * This program or library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ *
+ * END_COMMON_COPYRIGHT_HEADER */
+
+
+#include "lxqtpower.h"
+#include "lxqtpowerproviders.h"
+#include <QtCore/QtAlgorithms>
+#include <QtCore/QDebug>
+
+using namespace LxQt;
+\
+Power::Power(QObject *parent) :
+    QObject(parent)
+{
+    mProviders.append(new CustomProvider(this));
+    mProviders.append(new UPowerProvider(this));
+    mProviders.append(new ConsoleKitProvider(this));
+    mProviders.append(new SystemdProvider(this));
+    mProviders.append(new RazorProvider(this));
+}
+
+
+Power::~Power()
+{
+}
+
+
+bool Power::canAction(Power::Action action) const
+{
+    foreach(PowerProvider* provider, mProviders)
+    {
+        if (provider->canAction(action))
+            return true;
+    }
+
+    return false;
+}
+
+
+bool Power::doAction(Power::Action action)
+{
+    foreach(PowerProvider* provider, mProviders)
+    {
+        if (provider->canAction(action) &&
+            provider->doAction(action)
+           )
+        {
+            return true;
+        }
+    }
+    return false;
+}
+
+
+bool Power::canLogout()    const { return canAction(PowerLogout);    }
+bool Power::canHibernate() const { return canAction(PowerHibernate); }
+bool Power::canReboot()    const { return canAction(PowerReboot);    }
+bool Power::canShutdown()  const { return canAction(PowerShutdown);  }
+bool Power::canSuspend()   const { return canAction(PowerSuspend);   }
+
+bool Power::logout()       { return doAction(PowerLogout);    }
+bool Power::hibernate()    { return doAction(PowerHibernate); }
+bool Power::reboot()       { return doAction(PowerReboot);    }
+bool Power::shutdown()     { return doAction(PowerShutdown);  }
+bool Power::suspend()      { return doAction(PowerSuspend);   }
diff --git a/lxqtpower/lxqtpower.h b/lxqtpower/lxqtpower.h
new file mode 100644 (file)
index 0000000..a5a4d2b
--- /dev/null
@@ -0,0 +1,106 @@
+/* BEGIN_COMMON_COPYRIGHT_HEADER
+ * (c)LGPL2+
+ *
+ * Razor - a lightweight, Qt based, desktop toolset
+ * http://razor-qt.org
+ *
+ * Copyright: 2010-2011 Razor team
+ * Authors:
+ *   Alexander Sokoloff <sokoloff.a@gmail.com>
+ *
+ * This program or library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ *
+ * END_COMMON_COPYRIGHT_HEADER */
+
+
+#ifndef LXQTPOWER_H
+#define LXQTPOWER_H
+
+#include <QtCore/QObject>
+#include <QtCore/QList>
+
+namespace LxQt
+{
+
+
+class PowerProvider;
+
+/*! Power class provides an interface to control system-wide power and session management.
+    It allows logout from the user session, hibernate, reboot, shutdown and suspend computer.
+    This is a wrapper class. All the real work is done in the PowerWorker classes.
+*/
+class Power : public QObject
+{
+    Q_OBJECT
+public:
+    /// Power can perform next actions:
+    enum Action{
+        PowerLogout,    /// Close the current user session.
+        PowerHibernate, /// Hibernate the comupter
+        PowerReboot,    /// Reboot the computer
+        PowerShutdown,  /// Shutdown the computer
+        PowerSuspend    /// Suspend the computer
+    };
+
+    /// Constructs a Power with parent.
+    explicit Power(QObject *parent = 0);
+
+    /// Destroys the object.
+    virtual ~Power();
+
+    /// Returns true if the Power can perform action.
+    bool canAction(Action action) const;
+
+    //! This function is provided for convenience. It's equivalent to calling canAction(PowerLogout).
+    bool canLogout() const;
+
+    //! This function is provided for convenience. It's equivalent to calling canAction(PowerHibernate).
+    bool canHibernate() const;
+
+    //! This function is provided for convenience. It's equivalent to calling canAction(PowerReboot).
+    bool canReboot() const;
+
+    //! This function is provided for convenience. It's equivalent to calling canAction(PowerShutdown).
+    bool canShutdown() const;
+
+    //! This function is provided for convenience. It's equivalent to calling canAction(PowerSuspend).
+    bool canSuspend() const;
+
+public slots:
+    /// Performs the requested action.
+    bool doAction(Action action);
+
+    //! This function is provided for convenience. It's equivalent to calling doAction(PowerLogout).
+    bool logout();
+
+    //! This function is provided for convenience. It's equivalent to calling doAction(PowerHibernate).
+    bool hibernate();
+
+    //! This function is provided for convenience. It's equivalent to calling doAction(PowerReboot).
+    bool reboot();
+
+    //! This function is provided for convenience. It's equivalent to calling doAction(PowerShutdown).
+    bool shutdown();
+
+    //! This function is provided for convenience. It's equivalent to calling doAction(PowerSuspend).
+    bool suspend();
+
+private:
+    QList<PowerProvider*> mProviders;
+};
+
+} // namespace
+#endif // LXQTPOWER_H
diff --git a/lxqtpower/lxqtpowerproviders.cpp b/lxqtpower/lxqtpowerproviders.cpp
new file mode 100644 (file)
index 0000000..bc7620a
--- /dev/null
@@ -0,0 +1,615 @@
+/* BEGIN_COMMON_COPYRIGHT_HEADER
+ * (c)LGPL2+
+ *
+ * Razor - a lightweight, Qt based, desktop toolset
+ * http://razor-qt.org
+ *
+ * Copyright: 2010-2011 Razor team
+ * Authors:
+ *   Alexander Sokoloff <sokoloff.a@gmail.com>
+ *   Petr Vanek <petr@scribus.info>
+ *
+ * This program or library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ *
+ * END_COMMON_COPYRIGHT_HEADER */
+
+
+#include "lxqtpowerproviders.h"
+#include <QtDBus/QDBusInterface>
+#include <QtCore/QProcess>
+#include <QtCore/QDebug>
+#include "razornotification.h"
+
+#define UPOWER_SERVICE          "org.freedesktop.UPower"
+#define UPOWER_PATH             "/org/freedesktop/UPower"
+#define UPOWER_INTERFACE        UPOWER_SERVICE
+
+#define CONSOLEKIT_SERVICE      "org.freedesktop.ConsoleKit"
+#define CONSOLEKIT_PATH         "/org/freedesktop/ConsoleKit/Manager"
+#define CONSOLEKIT_INTERFACE    "org.freedesktop.ConsoleKit.Manager"
+
+#define SYSTEMD_SERVICE         "org.freedesktop.login1"
+#define SYSTEMD_PATH            "/org/freedesktop/login1"
+#define SYSTEMD_INTERFACE       "org.freedesktop.login1.Manager"
+
+#define RAZOR_SERVICE      "org.razorqt.session"
+#define RAZOR_PATH         "/RazorSession"
+#define RAZOR_INTERFACE    "org.razorqt.session"
+
+
+#define PROPERTIES_INTERFACE    "org.freedesktop.DBus.Properties"
+
+using namespace LxQt;
+
+/************************************************
+ Helper func
+ ************************************************/
+void printDBusMsg(const QDBusMessage &msg)
+{
+    qWarning() << "** Dbus error **************************";
+    qWarning() << "Error name " << msg.errorName();
+    qWarning() << "Error msg  " << msg.errorMessage();
+    qWarning() << "****************************************";
+}
+
+
+/************************************************
+ Helper func
+ ************************************************/
+bool dbusCall(const QString &service,
+              const QString &path,
+              const QString &interface,
+              const QDBusConnection &connection,
+              const QString & method,
+              PowerProvider::DbusErrorCheck errorCheck = PowerProvider::CheckDBUS
+              )
+{
+    QDBusInterface dbus(service, path, interface, connection);
+    if (!dbus.isValid())
+    {
+        qWarning() << "dbusCall: QDBusInterface is invalid" << service << path << interface << method;
+        if (errorCheck == PowerProvider::CheckDBUS)
+        {
+            RazorNotification::notify(
+                                    QObject::tr("Power Manager Error"),
+                                    QObject::tr("QDBusInterface is invalid")+ "\n\n" + service + " " + path + " " + interface + " " + method,
+                                    "razor-logo.png");
+        }
+        return false;
+    }
+
+    QDBusMessage msg = dbus.call(method);
+
+    if (!msg.errorName().isEmpty())
+    {
+        printDBusMsg(msg);
+        if (errorCheck == PowerProvider::CheckDBUS)
+        {
+            RazorNotification::notify(
+                                    QObject::tr("Power Manager Error (D-BUS call)"),
+                                    msg.errorName() + "\n\n" + msg.errorMessage(),
+                                    "razor-logo.png");
+        }
+    }
+
+    // If the method no returns value, we believe that it was successful.
+    return msg.arguments().isEmpty() ||
+           msg.arguments().first().isNull() ||
+           msg.arguments().first().toBool();
+}
+
+/************************************************
+ Helper func
+
+ Just like dbusCall(), except that systemd
+ returns a string instead of a bool, and it takes
+ an "interactivity boolean" as an argument.
+ ************************************************/
+bool dbusCallSystemd(const QString &service,
+                     const QString &path,
+                     const QString &interface,
+                     const QDBusConnection &connection,
+                     const QString &method,
+                     PowerProvider::DbusErrorCheck errorCheck = PowerProvider::CheckDBUS
+                     )
+{
+    QDBusInterface dbus(service, path, interface, connection);
+    if (!dbus.isValid())
+    {
+        qWarning() << "dbusCall: QDBusInterface is invalid" << service << path << interface << method;
+        if (errorCheck == PowerProvider::CheckDBUS)
+        {
+            RazorNotification::notify(
+                                    QObject::tr("Power Manager Error"),
+                                    QObject::tr("QDBusInterface is invalid")+ "\n\n" + service + " " + path + " " + interface + " " + method,
+                                    "razor-logo.png");
+        }
+        return false;
+    }
+
+    QDBusMessage msg = dbus.call(method, true);
+
+    if (!msg.errorName().isEmpty())
+    {
+        printDBusMsg(msg);
+        if (errorCheck == PowerProvider::CheckDBUS)
+        {
+            RazorNotification::notify(
+                                    QObject::tr("Power Manager Error (D-BUS call)"),
+                                    msg.errorName() + "\n\n" + msg.errorMessage(),
+                                    "razor-logo.png");
+        }
+    }
+
+    // If the method no returns value, we believe that it was successful.
+    if (msg.arguments().isEmpty() || msg.arguments().first().isNull())
+        return true;
+
+    QString response = msg.arguments().first().toString();
+    qDebug() << "systemd:" << method << "=" << response;
+    return response == "yes" || response == "challenge";
+}
+
+
+/************************************************
+ Helper func
+ ************************************************/
+bool dbusGetProperty(const QString &service,
+                     const QString &path,
+                     const QString &interface,
+                     const QDBusConnection &connection,
+                     const QString & property
+                    )
+{
+    QDBusInterface dbus(service, path, interface, connection);
+    if (!dbus.isValid())
+    {
+        qWarning() << "dbusGetProperty: QDBusInterface is invalid" << service << path << interface << property;
+//        RazorNotification::notify(QObject::tr("Razor Power Manager"),
+//                                  "razor-logo.png",
+//                                  QObject::tr("Power Manager Error"),
+//                                  QObject::tr("QDBusInterface is invalid")+ "\n\n" + service +" " + path +" " + interface +" " + property);
+
+        return false;
+    }
+
+    QDBusMessage msg = dbus.call("Get", dbus.interface(), property);
+
+    if (!msg.errorName().isEmpty())
+    {
+        printDBusMsg(msg);
+//        RazorNotification::notify(QObject::tr("Razor Power Manager"),
+//                                  "razor-logo.png",
+//                                  QObject::tr("Power Manager Error (Get Property)"),
+//                                  msg.errorName() + "\n\n" + msg.errorMessage());
+    }
+
+    return !msg.arguments().isEmpty() &&
+            msg.arguments().first().value<QDBusVariant>().variant().toBool();
+}
+
+
+
+
+/************************************************
+ PowerProvider
+ ************************************************/
+PowerProvider::PowerProvider(QObject *parent):
+    QObject(parent)
+{
+}
+
+
+PowerProvider::~PowerProvider()
+{
+}
+
+
+
+/************************************************
+ UPowerProvider
+ ************************************************/
+UPowerProvider::UPowerProvider(QObject *parent):
+    PowerProvider(parent)
+{
+}
+
+
+UPowerProvider::~UPowerProvider()
+{
+}
+
+
+bool UPowerProvider::canAction(Power::Action action) const
+{
+    QString command;
+    QString property;
+    switch (action)
+    {
+    case Power::PowerHibernate:
+        property = "CanHibernate";
+        command  = "HibernateAllowed";
+        break;
+
+    case Power::PowerSuspend:
+        property = "CanSuspend";
+        command  = "SuspendAllowed";
+        break;
+
+    default:
+        return false;
+    }
+
+    return  dbusGetProperty(  // Whether the system is able to hibernate.
+                UPOWER_SERVICE,
+                UPOWER_PATH,
+                PROPERTIES_INTERFACE,
+                QDBusConnection::systemBus(),
+                property
+            )
+            &&
+            dbusCall( // Check if the caller has (or can get) the PolicyKit privilege to call command.
+                UPOWER_SERVICE,
+                UPOWER_PATH,
+                UPOWER_INTERFACE,
+                QDBusConnection::systemBus(),
+                command,
+                // canAction should be always silent because it can freeze
+                // g_main_context_iteration Qt event loop in QMessageBox
+                // on panel startup if there is no DBUS running.
+                PowerProvider::DontCheckDBUS
+            );
+}
+
+
+bool UPowerProvider::doAction(Power::Action action)
+{
+    QString command;
+
+    switch (action)
+    {
+    case Power::PowerHibernate:
+        command = "Hibernate";
+        break;
+
+    case Power::PowerSuspend:
+        command = "Suspend";
+        break;
+
+    default:
+        return false;
+    }
+
+
+    return dbusCall(UPOWER_SERVICE,
+             UPOWER_PATH,
+             UPOWER_INTERFACE,
+             QDBusConnection::systemBus(),
+             command );
+}
+
+
+
+/************************************************
+ ConsoleKitProvider
+ ************************************************/
+ConsoleKitProvider::ConsoleKitProvider(QObject *parent):
+    PowerProvider(parent)
+{
+}
+
+
+ConsoleKitProvider::~ConsoleKitProvider()
+{
+}
+
+
+bool ConsoleKitProvider::canAction(Power::Action action) const
+{
+    QString command;
+
+    switch (action)
+    {
+    case Power::PowerReboot:
+        command = "CanRestart";
+        break;
+
+    case Power::PowerShutdown:
+        command = "CanStop";
+        break;
+
+    default:
+        return false;
+    }
+
+    return dbusCall(CONSOLEKIT_SERVICE,
+                    CONSOLEKIT_PATH,
+                    CONSOLEKIT_INTERFACE,
+                    QDBusConnection::systemBus(),
+                    command,
+                    // canAction should be always silent because it can freeze
+                    // g_main_context_iteration Qt event loop in QMessageBox
+                    // on panel startup if there is no DBUS running.
+                    PowerProvider::DontCheckDBUS
+                   );
+}
+
+
+bool ConsoleKitProvider::doAction(Power::Action action)
+{
+    QString command;
+
+    switch (action)
+    {
+    case Power::PowerReboot:
+        command = "Restart";
+        break;
+
+    case Power::PowerShutdown:
+        command = "Stop";
+        break;
+
+    default:
+        return false;
+    }
+
+    return dbusCall(CONSOLEKIT_SERVICE,
+             CONSOLEKIT_PATH,
+             CONSOLEKIT_INTERFACE,
+             QDBusConnection::systemBus(),
+             command
+            );
+}
+
+/************************************************
+  SystemdProvider
+
+  http://www.freedesktop.org/wiki/Software/systemd/logind
+ ************************************************/
+
+SystemdProvider::SystemdProvider(QObject *parent):
+    PowerProvider(parent)
+{
+}
+
+
+SystemdProvider::~SystemdProvider()
+{
+}
+
+
+bool SystemdProvider::canAction(Power::Action action) const
+{
+    QString command;
+
+    switch (action)
+    {
+    case Power::PowerReboot:
+        command = "CanReboot";
+        break;
+
+    case Power::PowerShutdown:
+        command = "CanPowerOff";
+        break;
+
+    case Power::PowerSuspend:
+        command = "CanSuspend";
+        break;
+
+    case Power::PowerHibernate:
+        command = "CanHibernate";
+        break;
+
+    default:
+        return false;
+    }
+
+    return dbusCallSystemd(SYSTEMD_SERVICE,
+                    SYSTEMD_PATH,
+                    SYSTEMD_INTERFACE,
+                    QDBusConnection::systemBus(),
+                    command,
+                    // canAction should be always silent because it can freeze
+                    // g_main_context_iteration Qt event loop in QMessageBox
+                    // on panel startup if there is no DBUS running.
+                    PowerProvider::DontCheckDBUS
+                   );
+}
+
+
+bool SystemdProvider::doAction(Power::Action action)
+{
+    QString command;
+
+    switch (action)
+    {
+    case Power::PowerReboot:
+        command = "Reboot";
+        break;
+
+    case Power::PowerShutdown:
+        command = "PowerOff";
+        break;
+
+    case Power::PowerSuspend:
+        command = "Suspend";
+        break;
+
+    case Power::PowerHibernate:
+        command = "Hibernate";
+        break;
+
+    default:
+        return false;
+    }
+
+    return dbusCallSystemd(SYSTEMD_SERVICE,
+             SYSTEMD_PATH,
+             SYSTEMD_INTERFACE,
+             QDBusConnection::systemBus(),
+             command
+            );
+}
+
+
+/************************************************
+  RazorProvider
+ ************************************************/
+RazorProvider::RazorProvider(QObject *parent):
+    PowerProvider(parent)
+{
+}
+
+
+RazorProvider::~RazorProvider()
+{
+}
+
+
+bool RazorProvider::canAction(Power::Action action) const
+{
+    switch (action)
+    {
+        case Power::PowerLogout:
+            // there can be case when razo-session does not run
+            return dbusCall(RAZOR_SERVICE, RAZOR_PATH, RAZOR_SERVICE,
+                            QDBusConnection::sessionBus(), "canLogout",
+                            PowerProvider::DontCheckDBUS);
+        default:
+            return false;
+    }
+}
+
+
+bool RazorProvider::doAction(Power::Action action)
+{
+    QString command;
+
+    switch (action)
+    {
+    case Power::PowerLogout:
+        command = "logout";
+        break;
+
+    default:
+        return false;
+    }
+
+    return dbusCall(RAZOR_SERVICE,
+             RAZOR_PATH,
+             RAZOR_INTERFACE,
+             QDBusConnection::sessionBus(),
+             command
+            );
+}
+
+
+
+/************************************************
+  HalProvider
+ ************************************************/
+HalProvider::HalProvider(QObject *parent):
+    PowerProvider(parent)
+{
+}
+
+
+HalProvider::~HalProvider()
+{
+}
+
+
+bool HalProvider::canAction(Power::Action action) const
+{
+    return false;
+}
+
+
+bool HalProvider::doAction(Power::Action action)
+{
+    return false;
+}
+
+
+/************************************************
+  CustomProvider
+ ************************************************/
+CustomProvider::CustomProvider(QObject *parent):
+    PowerProvider(parent),
+    mSettings("power")
+{
+}
+
+CustomProvider::~CustomProvider()
+{
+}
+
+bool CustomProvider::canAction(Power::Action action) const
+{
+    switch (action)
+    {
+    case Power::PowerShutdown:
+        return mSettings.contains("shutdownCommand");
+
+    case Power::PowerReboot:
+        return mSettings.contains("rebootCommand");
+
+    case Power::PowerHibernate:
+        return mSettings.contains("hibernateCommand");
+
+    case Power::PowerSuspend:
+        return mSettings.contains("suspendCommand");
+
+    case Power::PowerLogout:
+        return mSettings.contains("logoutCommand");
+
+    default:
+        return false;
+    }
+}
+
+bool CustomProvider::doAction(Power::Action action)
+{
+    QString command;
+
+    switch(action)
+    {
+    case Power::PowerShutdown:
+        command = mSettings.value("shutdownCommand").toString();
+        break;
+
+    case Power::PowerReboot:
+        command = mSettings.value("rebootCommand").toString();
+        break;
+
+    case Power::PowerHibernate:
+        command = mSettings.value("hibernateCommand").toString();
+        break;
+
+    case Power::PowerSuspend:
+        command = mSettings.value("suspendCommand").toString();
+        break;
+
+    case Power::PowerLogout:
+        command = mSettings.value("logoutCommand").toString();
+        break;
+
+    default:
+        return false;
+    }
+
+    return QProcess::startDetached(command);
+}
diff --git a/lxqtpower/lxqtpowerproviders.h b/lxqtpower/lxqtpowerproviders.h
new file mode 100644 (file)
index 0000000..cda9648
--- /dev/null
@@ -0,0 +1,145 @@
+/* BEGIN_COMMON_COPYRIGHT_HEADER
+ * (c)LGPL2+
+ *
+ * Razor - a lightweight, Qt based, desktop toolset
+ * http://razor-qt.org
+ *
+ * Copyright: 2010-2011 Razor team
+ * Authors:
+ *   Alexander Sokoloff <sokoloff.a@gmail.com>
+ *
+ * This program or library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ *
+ * END_COMMON_COPYRIGHT_HEADER */
+
+
+#ifndef LXQTPOWER_PROVIDERS_H
+#define LXQTPOWER_PROVIDERS_H
+
+#include <QtCore/QObject>
+#include <razorsettings.h>
+#include "lxqtpower.h"
+
+namespace LxQt
+{
+
+
+class PowerProvider: public QObject
+{
+    Q_OBJECT
+public:
+    
+    enum DbusErrorCheck {
+        CheckDBUS,
+        DontCheckDBUS
+    };
+    
+    explicit PowerProvider(QObject *parent = 0);
+    virtual ~PowerProvider();
+
+    /*! Returns true if the Power can perform action.
+        This is a pure virtual function, and must be reimplemented in subclasses. */
+    virtual bool canAction(Power::Action action) const = 0 ;
+
+public slots:
+    /*! Performs the requested action.
+        This is a pure virtual function, and must be reimplemented in subclasses. */
+    virtual bool doAction(Power::Action action) = 0;
+};
+
+
+class UPowerProvider: public PowerProvider
+{
+    Q_OBJECT
+public:
+    UPowerProvider(QObject *parent = 0);
+    ~UPowerProvider();
+    bool canAction(Power::Action action) const;
+
+public slots:
+    bool doAction(Power::Action action);
+};
+
+
+class ConsoleKitProvider: public PowerProvider
+{
+    Q_OBJECT
+public:
+    ConsoleKitProvider(QObject *parent = 0);
+    ~ConsoleKitProvider();
+    bool canAction(Power::Action action) const;
+
+public slots:
+    bool doAction(Power::Action action);
+};
+
+
+class SystemdProvider: public PowerProvider
+{
+    Q_OBJECT
+public:
+    SystemdProvider(QObject *parent = 0);
+    ~SystemdProvider();
+    bool canAction(Power::Action action) const;
+
+public slots:
+    bool doAction(Power::Action action);
+};
+
+
+class RazorProvider: public PowerProvider
+{
+    Q_OBJECT
+public:
+    RazorProvider(QObject *parent = 0);
+    ~RazorProvider();
+    bool canAction(Power::Action action) const;
+
+public slots:
+    bool doAction(Power::Action action);
+};
+
+
+class HalProvider: public PowerProvider
+{
+    Q_OBJECT
+public:
+    HalProvider(QObject *parent = 0);
+    ~HalProvider();
+    bool canAction(Power::Action action) const;
+
+public slots:
+    bool doAction(Power::Action action);
+};
+
+
+class CustomProvider: public PowerProvider
+{
+    Q_OBJECT
+public:
+    CustomProvider(QObject *parent = 0);
+    ~CustomProvider();
+    bool canAction(Power::Action action) const;
+
+public slots:
+    bool doAction(Power::Action action);
+
+private:
+    RazorSettings mSettings;
+};
+
+}
+#endif // LXQTPOWER_PROVIDERS_H
index 2694812..8585d9c 100644 (file)
@@ -26,7 +26,7 @@
  * END_COMMON_COPYRIGHT_HEADER */
 
 #include "powermanager.h"
-#include "razorpower/razorpower.h"
+#include "lxqtpower/lxqtpower.h"
 #include <qtxdg/xdgicon.h>
 #include <QDBusInterface>
 #include <QMessageBox>
@@ -35,6 +35,8 @@
 #include <QtDebug>
 #include "libtranslate.h"
 
+using namespace LxQt;
+
 class MessageBox: public QMessageBox
 {
 public:
@@ -82,7 +84,7 @@ PowerManager::PowerManager(QObject * parent, bool skipWarning)
         m_skipWarning(skipWarning)
 {
     libTranslate("librazorqt");
-    m_power = new RazorPower(this);
+    m_power = new Power(this);
 //    connect(m_power, SIGNAL(suspendFail()), this, SLOT(suspendFailed()));
 //    connect(m_power, SIGNAL(hibernateFail()), this, SLOT(hibernateFailed()));
 //    connect(m_power, SIGNAL(monitoring(const QString &)),
index a550a86..f3c17dd 100644 (file)
 #include <QObject>
 #include <QAction>
 
-class RazorPower;
-
+namespace LxQt
+{
+class Power;
+}
 /*! QAction centric menu aware wrapper around razorpower
 */
 class PowerManager : public QObject
@@ -57,7 +59,7 @@ public:
     bool skipWarning() const { return m_skipWarning; }
 
 private:
-    RazorPower * m_power;
+    LxQt::Power * m_power;
     bool m_skipWarning;
 
 private slots:
diff --git a/razorpower/razorpower.cpp b/razorpower/razorpower.cpp
deleted file mode 100644 (file)
index 0f63c16..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* BEGIN_COMMON_COPYRIGHT_HEADER
- * (c)LGPL2+
- *
- * Razor - a lightweight, Qt based, desktop toolset
- * http://razor-qt.org
- *
- * Copyright: 2010-2011 Razor team
- * Authors:
- *   Alexander Sokoloff <sokoloff.a@gmail.com>
- *
- * This program or library is free software; you can redistribute it
- * and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
-
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * END_COMMON_COPYRIGHT_HEADER */
-
-
-#include "razorpower.h"
-#include "razorpowerproviders.h"
-#include <QtCore/QtAlgorithms>
-#include <QtCore/QDebug>
-
-RazorPower::RazorPower(QObject *parent) :
-    QObject(parent)
-{
-    mProviders.append(new CustomProvider(this));
-    mProviders.append(new UPowerProvider(this));
-    mProviders.append(new ConsoleKitProvider(this));
-    mProviders.append(new SystemdProvider(this));
-    mProviders.append(new RazorProvider(this));
-}
-
-
-RazorPower::~RazorPower()
-{
-}
-
-
-bool RazorPower::canAction(RazorPower::Action action) const
-{
-    foreach(RazorPowerProvider* provider, mProviders)
-    {
-        if (provider->canAction(action))
-            return true;
-    }
-
-    return false;
-}
-
-
-bool RazorPower::doAction(RazorPower::Action action)
-{
-    foreach(RazorPowerProvider* provider, mProviders)
-    {
-        if (provider->canAction(action) &&
-            provider->doAction(action)
-           )
-        {
-            return true;
-        }
-    }
-    return false;
-}
-
-
-bool RazorPower::canLogout()    const { return canAction(PowerLogout);    }
-bool RazorPower::canHibernate() const { return canAction(PowerHibernate); }
-bool RazorPower::canReboot()    const { return canAction(PowerReboot);    }
-bool RazorPower::canShutdown()  const { return canAction(PowerShutdown);  }
-bool RazorPower::canSuspend()   const { return canAction(PowerSuspend);   }
-
-bool RazorPower::logout()       { return doAction(PowerLogout);    }
-bool RazorPower::hibernate()    { return doAction(PowerHibernate); }
-bool RazorPower::reboot()       { return doAction(PowerReboot);    }
-bool RazorPower::shutdown()     { return doAction(PowerShutdown);  }
-bool RazorPower::suspend()      { return doAction(PowerSuspend);   }
diff --git a/razorpower/razorpower.h b/razorpower/razorpower.h
deleted file mode 100644 (file)
index ac3fe64..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/* BEGIN_COMMON_COPYRIGHT_HEADER
- * (c)LGPL2+
- *
- * Razor - a lightweight, Qt based, desktop toolset
- * http://razor-qt.org
- *
- * Copyright: 2010-2011 Razor team
- * Authors:
- *   Alexander Sokoloff <sokoloff.a@gmail.com>
- *
- * This program or library is free software; you can redistribute it
- * and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
-
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * END_COMMON_COPYRIGHT_HEADER */
-
-
-#ifndef RAZORPOWER_H
-#define RAZORPOWER_H
-
-#include <QtCore/QObject>
-#include <QtCore/QList>
-
-class RazorPowerProvider;
-
-/*! RazorPower class provides an interface to control system-wide power and session management.
-    It allows logout from the user session, hibernate, reboot, shutdown and suspend computer.
-    This is a wrapper class. All the real work is done in the RazorPowerWorker classes.
-*/
-class RazorPower : public QObject
-{
-    Q_OBJECT
-public:
-    /// RazorPower can perform next actions:
-    enum Action{
-        PowerLogout,    /// Close the current user session.
-        PowerHibernate, /// Hibernate the comupter
-        PowerReboot,    /// Reboot the computer
-        PowerShutdown,  /// Shutdown the computer
-        PowerSuspend    /// Suspend the computer
-    };
-
-    /// Constructs a RazorPower with parent.
-    explicit RazorPower(QObject *parent = 0);
-
-    /// Destroys the object.
-    virtual ~RazorPower();
-
-    /// Returns true if the RazorPower can perform action.
-    bool canAction(Action action) const;
-
-    //! This function is provided for convenience. It's equivalent to calling canAction(PowerLogout).
-    bool canLogout() const;
-
-    //! This function is provided for convenience. It's equivalent to calling canAction(PowerHibernate).
-    bool canHibernate() const;
-
-    //! This function is provided for convenience. It's equivalent to calling canAction(PowerReboot).
-    bool canReboot() const;
-
-    //! This function is provided for convenience. It's equivalent to calling canAction(PowerShutdown).
-    bool canShutdown() const;
-
-    //! This function is provided for convenience. It's equivalent to calling canAction(PowerSuspend).
-    bool canSuspend() const;
-
-public slots:
-    /// Performs the requested action.
-    bool doAction(Action action);
-
-    //! This function is provided for convenience. It's equivalent to calling doAction(PowerLogout).
-    bool logout();
-
-    //! This function is provided for convenience. It's equivalent to calling doAction(PowerHibernate).
-    bool hibernate();
-
-    //! This function is provided for convenience. It's equivalent to calling doAction(PowerReboot).
-    bool reboot();
-
-    //! This function is provided for convenience. It's equivalent to calling doAction(PowerShutdown).
-    bool shutdown();
-
-    //! This function is provided for convenience. It's equivalent to calling doAction(PowerSuspend).
-    bool suspend();
-
-private:
-    QList<RazorPowerProvider*> mProviders;
-};
-
-#endif // RAZORPOWER_H
diff --git a/razorpower/razorpowerproviders.cpp b/razorpower/razorpowerproviders.cpp
deleted file mode 100644 (file)
index b9287fb..0000000
+++ /dev/null
@@ -1,614 +0,0 @@
-/* BEGIN_COMMON_COPYRIGHT_HEADER
- * (c)LGPL2+
- *
- * Razor - a lightweight, Qt based, desktop toolset
- * http://razor-qt.org
- *
- * Copyright: 2010-2011 Razor team
- * Authors:
- *   Alexander Sokoloff <sokoloff.a@gmail.com>
- *   Petr Vanek <petr@scribus.info>
- *
- * This program or library is free software; you can redistribute it
- * and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
-
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * END_COMMON_COPYRIGHT_HEADER */
-
-
-#include "razorpowerproviders.h"
-#include <QtDBus/QDBusInterface>
-#include <QtCore/QProcess>
-#include <QtCore/QDebug>
-#include "razornotification.h"
-
-#define UPOWER_SERVICE          "org.freedesktop.UPower"
-#define UPOWER_PATH             "/org/freedesktop/UPower"
-#define UPOWER_INTERFACE        UPOWER_SERVICE
-
-#define CONSOLEKIT_SERVICE      "org.freedesktop.ConsoleKit"
-#define CONSOLEKIT_PATH         "/org/freedesktop/ConsoleKit/Manager"
-#define CONSOLEKIT_INTERFACE    "org.freedesktop.ConsoleKit.Manager"
-
-#define SYSTEMD_SERVICE         "org.freedesktop.login1"
-#define SYSTEMD_PATH            "/org/freedesktop/login1"
-#define SYSTEMD_INTERFACE       "org.freedesktop.login1.Manager"
-
-#define RAZOR_SERVICE      "org.razorqt.session"
-#define RAZOR_PATH         "/RazorSession"
-#define RAZOR_INTERFACE    "org.razorqt.session"
-
-
-#define PROPERTIES_INTERFACE    "org.freedesktop.DBus.Properties"
-
-
-/************************************************
- Helper func
- ************************************************/
-void printDBusMsg(const QDBusMessage &msg)
-{
-    qWarning() << "** Dbus error **************************";
-    qWarning() << "Error name " << msg.errorName();
-    qWarning() << "Error msg  " << msg.errorMessage();
-    qWarning() << "****************************************";
-}
-
-
-/************************************************
- Helper func
- ************************************************/
-bool dbusCall(const QString &service,
-              const QString &path,
-              const QString &interface,
-              const QDBusConnection &connection,
-              const QString & method,
-              RazorPowerProvider::DbusErrorCheck errorCheck = RazorPowerProvider::CheckDBUS
-              )
-{
-    QDBusInterface dbus(service, path, interface, connection);
-    if (!dbus.isValid())
-    {
-        qWarning() << "dbusCall: QDBusInterface is invalid" << service << path << interface << method;
-        if (errorCheck == RazorPowerProvider::CheckDBUS)
-        {
-            RazorNotification::notify(
-                                    QObject::tr("Power Manager Error"),
-                                    QObject::tr("QDBusInterface is invalid")+ "\n\n" + service + " " + path + " " + interface + " " + method,
-                                    "razor-logo.png");
-        }
-        return false;
-    }
-
-    QDBusMessage msg = dbus.call(method);
-
-    if (!msg.errorName().isEmpty())
-    {
-        printDBusMsg(msg);
-        if (errorCheck == RazorPowerProvider::CheckDBUS)
-        {
-            RazorNotification::notify(
-                                    QObject::tr("Power Manager Error (D-BUS call)"),
-                                    msg.errorName() + "\n\n" + msg.errorMessage(),
-                                    "razor-logo.png");
-        }
-    }
-
-    // If the method no returns value, we believe that it was successful.
-    return msg.arguments().isEmpty() ||
-           msg.arguments().first().isNull() ||
-           msg.arguments().first().toBool();
-}
-
-/************************************************
- Helper func
-
- Just like dbusCall(), except that systemd
- returns a string instead of a bool, and it takes
- an "interactivity boolean" as an argument.
- ************************************************/
-bool dbusCallSystemd(const QString &service,
-                     const QString &path,
-                     const QString &interface,
-                     const QDBusConnection &connection,
-                     const QString &method,
-                     RazorPowerProvider::DbusErrorCheck errorCheck = RazorPowerProvider::CheckDBUS
-                     )
-{
-    QDBusInterface dbus(service, path, interface, connection);
-    if (!dbus.isValid())
-    {
-        qWarning() << "dbusCall: QDBusInterface is invalid" << service << path << interface << method;
-        if (errorCheck == RazorPowerProvider::CheckDBUS)
-        {
-            RazorNotification::notify(
-                                    QObject::tr("Power Manager Error"),
-                                    QObject::tr("QDBusInterface is invalid")+ "\n\n" + service + " " + path + " " + interface + " " + method,
-                                    "razor-logo.png");
-        }
-        return false;
-    }
-
-    QDBusMessage msg = dbus.call(method, true);
-
-    if (!msg.errorName().isEmpty())
-    {
-        printDBusMsg(msg);
-        if (errorCheck == RazorPowerProvider::CheckDBUS)
-        {
-            RazorNotification::notify(
-                                    QObject::tr("Power Manager Error (D-BUS call)"),
-                                    msg.errorName() + "\n\n" + msg.errorMessage(),
-                                    "razor-logo.png");
-        }
-    }
-
-    // If the method no returns value, we believe that it was successful.
-    if (msg.arguments().isEmpty() || msg.arguments().first().isNull())
-        return true;
-
-    QString response = msg.arguments().first().toString();
-    qDebug() << "systemd:" << method << "=" << response;
-    return response == "yes" || response == "challenge";
-}
-
-
-/************************************************
- Helper func
- ************************************************/
-bool dbusGetProperty(const QString &service,
-                     const QString &path,
-                     const QString &interface,
-                     const QDBusConnection &connection,
-                     const QString & property
-                    )
-{
-    QDBusInterface dbus(service, path, interface, connection);
-    if (!dbus.isValid())
-    {
-        qWarning() << "dbusGetProperty: QDBusInterface is invalid" << service << path << interface << property;
-//        RazorNotification::notify(QObject::tr("Razor Power Manager"),
-//                                  "razor-logo.png",
-//                                  QObject::tr("Power Manager Error"),
-//                                  QObject::tr("QDBusInterface is invalid")+ "\n\n" + service +" " + path +" " + interface +" " + property);
-
-        return false;
-    }
-
-    QDBusMessage msg = dbus.call("Get", dbus.interface(), property);
-
-    if (!msg.errorName().isEmpty())
-    {
-        printDBusMsg(msg);
-//        RazorNotification::notify(QObject::tr("Razor Power Manager"),
-//                                  "razor-logo.png",
-//                                  QObject::tr("Power Manager Error (Get Property)"),
-//                                  msg.errorName() + "\n\n" + msg.errorMessage());
-    }
-
-    return !msg.arguments().isEmpty() &&
-            msg.arguments().first().value<QDBusVariant>().variant().toBool();
-}
-
-
-
-
-/************************************************
- RazorPowerProvider
- ************************************************/
-RazorPowerProvider::RazorPowerProvider(QObject *parent):
-    QObject(parent)
-{
-}
-
-
-RazorPowerProvider::~RazorPowerProvider()
-{
-}
-
-
-
-/************************************************
- UPowerProvider
- ************************************************/
-UPowerProvider::UPowerProvider(QObject *parent):
-    RazorPowerProvider(parent)
-{
-}
-
-
-UPowerProvider::~UPowerProvider()
-{
-}
-
-
-bool UPowerProvider::canAction(RazorPower::Action action) const
-{
-    QString command;
-    QString property;
-    switch (action)
-    {
-    case RazorPower::PowerHibernate:
-        property = "CanHibernate";
-        command  = "HibernateAllowed";
-        break;
-
-    case RazorPower::PowerSuspend:
-        property = "CanSuspend";
-        command  = "SuspendAllowed";
-        break;
-
-    default:
-        return false;
-    }
-
-    return  dbusGetProperty(  // Whether the system is able to hibernate.
-                UPOWER_SERVICE,
-                UPOWER_PATH,
-                PROPERTIES_INTERFACE,
-                QDBusConnection::systemBus(),
-                property
-            )
-            &&
-            dbusCall( // Check if the caller has (or can get) the PolicyKit privilege to call command.
-                UPOWER_SERVICE,
-                UPOWER_PATH,
-                UPOWER_INTERFACE,
-                QDBusConnection::systemBus(),
-                command,
-                // canAction should be always silent because it can freeze
-                // g_main_context_iteration Qt event loop in QMessageBox
-                // on panel startup if there is no DBUS running.
-                RazorPowerProvider::DontCheckDBUS
-            );
-}
-
-
-bool UPowerProvider::doAction(RazorPower::Action action)
-{
-    QString command;
-
-    switch (action)
-    {
-    case RazorPower::PowerHibernate:
-        command = "Hibernate";
-        break;
-
-    case RazorPower::PowerSuspend:
-        command = "Suspend";
-        break;
-
-    default:
-        return false;
-    }
-
-
-    return dbusCall(UPOWER_SERVICE,
-             UPOWER_PATH,
-             UPOWER_INTERFACE,
-             QDBusConnection::systemBus(),
-             command );
-}
-
-
-
-/************************************************
- ConsoleKitProvider
- ************************************************/
-ConsoleKitProvider::ConsoleKitProvider(QObject *parent):
-    RazorPowerProvider(parent)
-{
-}
-
-
-ConsoleKitProvider::~ConsoleKitProvider()
-{
-}
-
-
-bool ConsoleKitProvider::canAction(RazorPower::Action action) const
-{
-    QString command;
-
-    switch (action)
-    {
-    case RazorPower::PowerReboot:
-        command = "CanRestart";
-        break;
-
-    case RazorPower::PowerShutdown:
-        command = "CanStop";
-        break;
-
-    default:
-        return false;
-    }
-
-    return dbusCall(CONSOLEKIT_SERVICE,
-                    CONSOLEKIT_PATH,
-                    CONSOLEKIT_INTERFACE,
-                    QDBusConnection::systemBus(),
-                    command,
-                    // canAction should be always silent because it can freeze
-                    // g_main_context_iteration Qt event loop in QMessageBox
-                    // on panel startup if there is no DBUS running.
-                    RazorPowerProvider::DontCheckDBUS
-                   );
-}
-
-
-bool ConsoleKitProvider::doAction(RazorPower::Action action)
-{
-    QString command;
-
-    switch (action)
-    {
-    case RazorPower::PowerReboot:
-        command = "Restart";
-        break;
-
-    case RazorPower::PowerShutdown:
-        command = "Stop";
-        break;
-
-    default:
-        return false;
-    }
-
-    return dbusCall(CONSOLEKIT_SERVICE,
-             CONSOLEKIT_PATH,
-             CONSOLEKIT_INTERFACE,
-             QDBusConnection::systemBus(),
-             command
-            );
-}
-
-/************************************************
-  SystemdProvider
-
-  http://www.freedesktop.org/wiki/Software/systemd/logind
- ************************************************/
-
-SystemdProvider::SystemdProvider(QObject *parent):
-    RazorPowerProvider(parent)
-{
-}
-
-
-SystemdProvider::~SystemdProvider()
-{
-}
-
-
-bool SystemdProvider::canAction(RazorPower::Action action) const
-{
-    QString command;
-
-    switch (action)
-    {
-    case RazorPower::PowerReboot:
-        command = "CanReboot";
-        break;
-
-    case RazorPower::PowerShutdown:
-        command = "CanPowerOff";
-        break;
-
-    case RazorPower::PowerSuspend:
-        command = "CanSuspend";
-        break;
-
-    case RazorPower::PowerHibernate:
-        command = "CanHibernate";
-        break;
-
-    default:
-        return false;
-    }
-
-    return dbusCallSystemd(SYSTEMD_SERVICE,
-                    SYSTEMD_PATH,
-                    SYSTEMD_INTERFACE,
-                    QDBusConnection::systemBus(),
-                    command,
-                    // canAction should be always silent because it can freeze
-                    // g_main_context_iteration Qt event loop in QMessageBox
-                    // on panel startup if there is no DBUS running.
-                    RazorPowerProvider::DontCheckDBUS
-                   );
-}
-
-
-bool SystemdProvider::doAction(RazorPower::Action action)
-{
-    QString command;
-
-    switch (action)
-    {
-    case RazorPower::PowerReboot:
-        command = "Reboot";
-        break;
-
-    case RazorPower::PowerShutdown:
-        command = "PowerOff";
-        break;
-
-    case RazorPower::PowerSuspend:
-        command = "Suspend";
-        break;
-
-    case RazorPower::PowerHibernate:
-        command = "Hibernate";
-        break;
-
-    default:
-        return false;
-    }
-
-    return dbusCallSystemd(SYSTEMD_SERVICE,
-             SYSTEMD_PATH,
-             SYSTEMD_INTERFACE,
-             QDBusConnection::systemBus(),
-             command
-            );
-}
-
-
-/************************************************
-  RazorProvider
- ************************************************/
-RazorProvider::RazorProvider(QObject *parent):
-    RazorPowerProvider(parent)
-{
-}
-
-
-RazorProvider::~RazorProvider()
-{
-}
-
-
-bool RazorProvider::canAction(RazorPower::Action action) const
-{
-    switch (action)
-    {
-        case RazorPower::PowerLogout:
-            // there can be case when razo-session does not run
-            return dbusCall(RAZOR_SERVICE, RAZOR_PATH, RAZOR_SERVICE,
-                            QDBusConnection::sessionBus(), "canLogout",
-                            RazorPowerProvider::DontCheckDBUS);
-        default:
-            return false;
-    }
-}
-
-
-bool RazorProvider::doAction(RazorPower::Action action)
-{
-    QString command;
-
-    switch (action)
-    {
-    case RazorPower::PowerLogout:
-        command = "logout";
-        break;
-
-    default:
-        return false;
-    }
-
-    return dbusCall(RAZOR_SERVICE,
-             RAZOR_PATH,
-             RAZOR_INTERFACE,
-             QDBusConnection::sessionBus(),
-             command
-            );
-}
-
-
-
-/************************************************
-  HalProvider
- ************************************************/
-HalProvider::HalProvider(QObject *parent):
-    RazorPowerProvider(parent)
-{
-}
-
-
-HalProvider::~HalProvider()
-{
-}
-
-
-bool HalProvider::canAction(RazorPower::Action action) const
-{
-    return false;
-}
-
-
-bool HalProvider::doAction(RazorPower::Action action)
-{
-    return false;
-}
-
-
-/************************************************
-  CustomProvider
- ************************************************/
-CustomProvider::CustomProvider(QObject *parent):
-    RazorPowerProvider(parent),
-    mSettings("power")
-{
-}
-
-CustomProvider::~CustomProvider()
-{
-}
-
-bool CustomProvider::canAction(RazorPower::Action action) const
-{
-    switch (action)
-    {
-    case RazorPower::PowerShutdown:
-        return mSettings.contains("shutdownCommand");
-
-    case RazorPower::PowerReboot:
-        return mSettings.contains("rebootCommand");
-
-    case RazorPower::PowerHibernate:
-        return mSettings.contains("hibernateCommand");
-
-    case RazorPower::PowerSuspend:
-        return mSettings.contains("suspendCommand");
-
-    case RazorPower::PowerLogout:
-        return mSettings.contains("logoutCommand");
-
-    default:
-        return false;
-    }
-}
-
-bool CustomProvider::doAction(RazorPower::Action action)
-{
-    QString command;
-
-    switch(action)
-    {
-    case RazorPower::PowerShutdown:
-        command = mSettings.value("shutdownCommand").toString();
-        break;
-
-    case RazorPower::PowerReboot:
-        command = mSettings.value("rebootCommand").toString();
-        break;
-
-    case RazorPower::PowerHibernate:
-        command = mSettings.value("hibernateCommand").toString();
-        break;
-
-    case RazorPower::PowerSuspend:
-        command = mSettings.value("suspendCommand").toString();
-        break;
-
-    case RazorPower::PowerLogout:
-        command = mSettings.value("logoutCommand").toString();
-        break;
-
-    default:
-        return false;
-    }
-
-    return QProcess::startDetached(command);
-}
diff --git a/razorpower/razorpowerproviders.h b/razorpower/razorpowerproviders.h
deleted file mode 100644 (file)
index 9d45e9a..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/* BEGIN_COMMON_COPYRIGHT_HEADER
- * (c)LGPL2+
- *
- * Razor - a lightweight, Qt based, desktop toolset
- * http://razor-qt.org
- *
- * Copyright: 2010-2011 Razor team
- * Authors:
- *   Alexander Sokoloff <sokoloff.a@gmail.com>
- *
- * This program or library is free software; you can redistribute it
- * and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
-
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * END_COMMON_COPYRIGHT_HEADER */
-
-
-#ifndef RAZORPOWER_PROVIDERS_H
-#define RAZORPOWER_PROVIDERS_H
-
-#include <QtCore/QObject>
-#include <razorsettings.h>
-#include "razorpower.h"
-
-class RazorPowerProvider: public QObject
-{
-    Q_OBJECT
-public:
-    
-    enum DbusErrorCheck {
-        CheckDBUS,
-        DontCheckDBUS
-    };
-    
-    explicit RazorPowerProvider(QObject *parent = 0);
-    virtual ~RazorPowerProvider();
-
-    /*! Returns true if the RazorPower can perform action.
-        This is a pure virtual function, and must be reimplemented in subclasses. */
-    virtual bool canAction(RazorPower::Action action) const = 0 ;
-
-public slots:
-    /*! Performs the requested action.
-        This is a pure virtual function, and must be reimplemented in subclasses. */
-    virtual bool doAction(RazorPower::Action action) = 0;
-};
-
-
-class UPowerProvider: public RazorPowerProvider
-{
-    Q_OBJECT
-public:
-    UPowerProvider(QObject *parent = 0);
-    ~UPowerProvider();
-    bool canAction(RazorPower::Action action) const;
-
-public slots:
-    bool doAction(RazorPower::Action action);
-};
-
-
-class ConsoleKitProvider: public RazorPowerProvider
-{
-    Q_OBJECT
-public:
-    ConsoleKitProvider(QObject *parent = 0);
-    ~ConsoleKitProvider();
-    bool canAction(RazorPower::Action action) const;
-
-public slots:
-    bool doAction(RazorPower::Action action);
-};
-
-
-class SystemdProvider: public RazorPowerProvider
-{
-    Q_OBJECT
-public:
-    SystemdProvider(QObject *parent = 0);
-    ~SystemdProvider();
-    bool canAction(RazorPower::Action action) const;
-
-public slots:
-    bool doAction(RazorPower::Action action);
-};
-
-
-class RazorProvider: public RazorPowerProvider
-{
-    Q_OBJECT
-public:
-    RazorProvider(QObject *parent = 0);
-    ~RazorProvider();
-    bool canAction(RazorPower::Action action) const;
-
-public slots:
-    bool doAction(RazorPower::Action action);
-};
-
-
-class HalProvider: public RazorPowerProvider
-{
-    Q_OBJECT
-public:
-    HalProvider(QObject *parent = 0);
-    ~HalProvider();
-    bool canAction(RazorPower::Action action) const;
-
-public slots:
-    bool doAction(RazorPower::Action action);
-};
-
-
-class CustomProvider: public RazorPowerProvider
-{
-    Q_OBJECT
-public:
-    CustomProvider(QObject *parent = 0);
-    ~CustomProvider();
-    bool canAction(RazorPower::Action action) const;
-
-public slots:
-    bool doAction(RazorPower::Action action);
-
-private:
-    RazorSettings mSettings;
-};
-
-#endif // RAZORPOWER_PROVIDERS_H