From 751c6f7c81b88936fcc136aaa17112239fdcabf4 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Wed, 10 Dec 2014 10:37:24 +0100 Subject: [PATCH] Update brightness availability at runtime This should eventually allow us to react to hotplugging a keyboard and provide brightness controls then. It does not yet watch for PowerDevil's availability on DBus (eg. when kded takes a bit longer to startup), and also PowerDevil's brightness controls don't support on-demand activation yet REVIEW: 121365 --- .../powermanagement/powermanagementengine.cpp | 79 +++++++++++-------- .../powermanagement/powermanagementengine.h | 5 +- 2 files changed, 48 insertions(+), 36 deletions(-) diff --git a/dataengines/powermanagement/powermanagementengine.cpp b/dataengines/powermanagement/powermanagementengine.cpp index ae10a0c10..5bf24a3ab 100644 --- a/dataengines/powermanagement/powermanagementengine.cpp +++ b/dataengines/powermanagement/powermanagementengine.cpp @@ -69,27 +69,43 @@ void PowermanagementEngine::init() if (QDBusConnection::sessionBus().interface()->isServiceRegistered(SOLID_POWERMANAGEMENT_SERVICE)) { if (!QDBusConnection::sessionBus().connect(SOLID_POWERMANAGEMENT_SERVICE, - "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", - "org.kde.Solid.PowerManagement.Actions.BrightnessControl", - "brightnessValueChanged", this, + QStringLiteral("/org/kde/Solid/PowerManagement/Actions/BrightnessControl"), + QStringLiteral("org.kde.Solid.PowerManagement.Actions.BrightnessControl"), + QStringLiteral("brightnessValueChanged"), this, SLOT(screenBrightnessChanged(int)))) { qDebug() << "error connecting to Brightness changes via dbus"; } if (!QDBusConnection::sessionBus().connect(SOLID_POWERMANAGEMENT_SERVICE, - "/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl", - "org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl", - "keyboardBrightnessValueChanged", this, + QStringLiteral("/org/kde/Solid/PowerManagement/Actions/BrightnessControl"), + QStringLiteral("org.kde.Solid.PowerManagement.Actions.BrightnessControl"), + QStringLiteral("brightnessValueMaxChanged"), this, + SLOT(maximumScreenBrightnessChanged(int)))) { + qDebug() << "error connecting to max brightness changes via dbus"; + } + + if (!QDBusConnection::sessionBus().connect(SOLID_POWERMANAGEMENT_SERVICE, + QStringLiteral("/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl"), + QStringLiteral("org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl"), + QStringLiteral("keyboardBrightnessValueChanged"), this, SLOT(keyboardBrightnessChanged(int)))) { qDebug() << "error connecting to Keyboard Brightness changes via dbus"; } + if (!QDBusConnection::sessionBus().connect(SOLID_POWERMANAGEMENT_SERVICE, + QStringLiteral("/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl"), + QStringLiteral("org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl"), + QStringLiteral("keyboardBrightnessValueMaxChanged"), this, + SLOT(maximumKeyboardBrightnessChanged(int)))) { + qDebug() << "error connecting to max keyboard Brightness changes via dbus"; + } + sourceRequestEvent("PowerDevil"); if (!QDBusConnection::sessionBus().connect(SOLID_POWERMANAGEMENT_SERVICE, - "/org/kde/Solid/PowerManagement", + QStringLiteral("/org/kde/Solid/PowerManagement"), SOLID_POWERMANAGEMENT_SERVICE, - "batteryRemainingTimeChanged", this, + QStringLiteral("batteryRemainingTimeChanged"), this, SLOT(batteryRemainingTimeChanged(qulonglong)))) { qDebug() << "error connecting to remaining time changes"; } @@ -181,13 +197,10 @@ bool PowermanagementEngine::sourceRequestEvent(const QString &name) setData("Sleep States", "Hibernate", sleepstates.contains(Solid::PowerManagement::HibernateState)); setData("Sleep States", "HybridSuspend", sleepstates.contains(Solid::PowerManagement::HybridSuspendState)); } else if (name == "PowerDevil") { - setScreenBrightnessAvailable(false); - setKeyboardBrightnessAvailable(false); - QDBusMessage screenMsg = QDBusMessage::createMethodCall(SOLID_POWERMANAGEMENT_SERVICE, - "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", - "org.kde.Solid.PowerManagement.Actions.BrightnessControl", - "brightnessValue"); + QStringLiteral("/org/kde/Solid/PowerManagement/Actions/BrightnessControl"), + QStringLiteral("org.kde.Solid.PowerManagement.Actions.BrightnessControl"), + QStringLiteral("brightnessValue")); QDBusPendingReply screenReply = QDBusConnection::sessionBus().asyncCall(screenMsg); QDBusPendingCallWatcher *screenWatcher = new QDBusPendingCallWatcher(screenReply, this); QObject::connect(screenWatcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) { @@ -199,24 +212,23 @@ bool PowermanagementEngine::sourceRequestEvent(const QString &name) }); QDBusMessage maxScreenMsg = QDBusMessage::createMethodCall(SOLID_POWERMANAGEMENT_SERVICE, - "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", - "org.kde.Solid.PowerManagement.Actions.BrightnessControl", - "brightnessValueMax"); + QStringLiteral("/org/kde/Solid/PowerManagement/Actions/BrightnessControl"), + QStringLiteral("org.kde.Solid.PowerManagement.Actions.BrightnessControl"), + QStringLiteral("brightnessValueMax")); QDBusPendingReply maxScreenReply = QDBusConnection::sessionBus().asyncCall(maxScreenMsg); QDBusPendingCallWatcher *maxScreenWatcher = new QDBusPendingCallWatcher(maxScreenReply, this); QObject::connect(maxScreenWatcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { - setData("PowerDevil", "Maximum Screen Brightness", reply.value()); - setScreenBrightnessAvailable(reply.value() > 0); + maximumScreenBrightnessChanged(reply.value()); } watcher->deleteLater(); }); QDBusMessage keyboardMsg = QDBusMessage::createMethodCall(SOLID_POWERMANAGEMENT_SERVICE, - "/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl", - "org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl", - "keyboardBrightnessValue"); + QStringLiteral("/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl"), + QStringLiteral("org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl"), + QStringLiteral("keyboardBrightnessValue")); QDBusPendingReply keyboardReply = QDBusConnection::sessionBus().asyncCall(keyboardMsg); QDBusPendingCallWatcher *keyboardWatcher = new QDBusPendingCallWatcher(keyboardReply, this); QObject::connect(keyboardWatcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) { @@ -228,16 +240,15 @@ bool PowermanagementEngine::sourceRequestEvent(const QString &name) }); QDBusMessage maxKeyboardMsg = QDBusMessage::createMethodCall(SOLID_POWERMANAGEMENT_SERVICE, - "/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl", - "org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl", - "keyboardBrightnessValueMax"); + QStringLiteral("/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl"), + QStringLiteral("org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl"), + QStringLiteral("keyboardBrightnessValueMax")); QDBusPendingReply maxKeyboardReply = QDBusConnection::sessionBus().asyncCall(maxKeyboardMsg); QDBusPendingCallWatcher *maxKeyboardWatcher = new QDBusPendingCallWatcher(maxKeyboardReply, this); QObject::connect(maxKeyboardWatcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { - setData("PowerDevil", "Maximum Keyboard Brightness", reply.value()); - setKeyboardBrightnessAvailable(reply.value() > 0); + maximumKeyboardBrightnessChanged(reply.value()); } watcher->deleteLater(); }); @@ -447,19 +458,21 @@ void PowermanagementEngine::screenBrightnessChanged(int brightness) setData("PowerDevil", "Screen Brightness", brightness); } -void PowermanagementEngine::keyboardBrightnessChanged(int brightness) +void PowermanagementEngine::maximumScreenBrightnessChanged(int maximumBrightness) { - setData("PowerDevil", "Keyboard Brightness", brightness); + setData("PowerDevil", "Maximum Screen Brightness", maximumBrightness); + setData("PowerDevil", "Screen Brightness Available", maximumBrightness > 0); } -void PowermanagementEngine::setScreenBrightnessAvailable(bool available) +void PowermanagementEngine::keyboardBrightnessChanged(int brightness) { - setData("PowerDevil", "Screen Brightness Available", available); + setData("PowerDevil", "Keyboard Brightness", brightness); } -void PowermanagementEngine::setKeyboardBrightnessAvailable(bool available) +void PowermanagementEngine::maximumKeyboardBrightnessChanged(int maximumBrightness) { - setData("PowerDevil", "Keyboard Brightness Available", available); + setData("PowerDevil", "Maximum Keyboard Brightness", maximumBrightness); + setData("PowerDevil", "Keyboard Brightness Available", maximumBrightness > 0); } K_EXPORT_PLASMA_DATAENGINE_WITH_JSON(powermanagement, PowermanagementEngine, "plasma-dataengine-powermanagement.json") diff --git a/dataengines/powermanagement/powermanagementengine.h b/dataengines/powermanagement/powermanagementengine.h index 8088209ea..802677803 100644 --- a/dataengines/powermanagement/powermanagementengine.h +++ b/dataengines/powermanagement/powermanagementengine.h @@ -61,15 +61,14 @@ private Q_SLOTS: void deviceAdded(const QString& udi); void batteryRemainingTimeChanged(qulonglong time); void screenBrightnessChanged(int brightness); + void maximumScreenBrightnessChanged(int maximumBrightness); void keyboardBrightnessChanged(int brightness); + void maximumKeyboardBrightnessChanged(int maximumBrightness); private: QString batteryType(const Solid::Battery *battery) const; QStringList basicSourceNames() const; - void setScreenBrightnessAvailable(bool available); - void setKeyboardBrightnessAvailable(bool available); - QStringList m_sources; QHash m_batterySources; //