diff --git a/components/mobileshell/qml/actiondrawer/quicksettings/BrightnessItem.qml b/components/mobileshell/qml/actiondrawer/quicksettings/BrightnessItem.qml index 05e22938..cf00865e 100644 --- a/components/mobileshell/qml/actiondrawer/quicksettings/BrightnessItem.qml +++ b/components/mobileshell/qml/actiondrawer/quicksettings/BrightnessItem.qml @@ -17,6 +17,7 @@ import org.kde.plasma.private.mobileshell.screenbrightnessplugin as ScreenBright Item { id: root implicitHeight: brightnessRow.implicitHeight + visible: screenBrightness.brightnessAvailable ScreenBrightness.ScreenBrightnessUtil { id: screenBrightness diff --git a/components/screenbrightnessplugin/CMakeLists.txt b/components/screenbrightnessplugin/CMakeLists.txt index 1f2096ed..13f3c9f1 100644 --- a/components/screenbrightnessplugin/CMakeLists.txt +++ b/components/screenbrightnessplugin/CMakeLists.txt @@ -20,6 +20,7 @@ target_link_libraries(screenbrightnessplugin PRIVATE KF6::ConfigGui KF6::I18n KF6::Screen + QCoro::DBus ) ecm_finalize_qml_module(screenbrightnessplugin) diff --git a/components/screenbrightnessplugin/screenbrightnessutil.cpp b/components/screenbrightnessplugin/screenbrightnessutil.cpp index 7e25d29a..dd6db7f7 100644 --- a/components/screenbrightnessplugin/screenbrightnessutil.cpp +++ b/components/screenbrightnessplugin/screenbrightnessutil.cpp @@ -15,9 +15,6 @@ ScreenBrightnessUtil::ScreenBrightnessUtil(QObject *parent) QDBusConnection::sessionBus(), this); - fetchBrightness(); - fetchMaxBrightness(); - connect(m_brightnessInterface, &org::kde::Solid::PowerManagement::Actions::BrightnessControl::brightnessChanged, this, @@ -27,6 +24,9 @@ ScreenBrightnessUtil::ScreenBrightnessUtil(QObject *parent) this, &ScreenBrightnessUtil::fetchMaxBrightness); + fetchBrightness(); + fetchMaxBrightness(); + // watch for brightness interface m_brightnessInterfaceWatcher = new QDBusServiceWatcher(QStringLiteral("org.kde.Solid.PowerManagement.Actions.BrightnessControl"), QDBusConnection::sessionBus(), @@ -34,6 +34,8 @@ ScreenBrightnessUtil::ScreenBrightnessUtil(QObject *parent) this); connect(m_brightnessInterfaceWatcher, &QDBusServiceWatcher::serviceRegistered, this, [this]() -> void { + fetchBrightness(); + fetchMaxBrightness(); Q_EMIT brightnessAvailableChanged(); }); @@ -64,34 +66,32 @@ bool ScreenBrightnessUtil::brightnessAvailable() const void ScreenBrightnessUtil::fetchBrightness() { - QDBusPendingReply reply = m_brightnessInterface->brightness(); - QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); + QDBusPendingReply pendingReply = m_brightnessInterface->brightness(); + const auto reply = co_await pendingReply; - connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) { - QDBusPendingReply reply = *watcher; - if (reply.isError()) { - qWarning() << "Getting brightness failed:" << reply.error().name() << reply.error().message(); - } else if (m_brightness != reply.value()) { - m_brightness = reply.value(); - Q_EMIT brightnessChanged(); - } - watcher->deleteLater(); - }); + if (reply.isError()) { + qWarning() << "Getting brightness failed:" << reply.error().name() << reply.error().message(); + return; + } + + if (m_brightness != reply.value()) { + m_brightness = reply.value(); + Q_EMIT brightnessChanged(); + } } void ScreenBrightnessUtil::fetchMaxBrightness() { QDBusPendingReply reply = m_brightnessInterface->brightnessMax(); - QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); + const auto reply = co_await pendingReply; - connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) { - QDBusPendingReply reply = *watcher; - if (reply.isError()) { - qWarning() << "Getting max brightness failed:" << reply.error().name() << reply.error().message(); - } else if (m_maxBrightness != reply.value()) { - m_maxBrightness = reply.value(); - Q_EMIT maxBrightnessChanged(); - } - watcher->deleteLater(); - }); + if (reply.isError()) { + qWarning() << "Getting max brightness failed:" << reply.error().name() << reply.error().message(); + return; + } + + if (m_maxBrightness != reply.value()) { + m_maxBrightness = reply.value(); + Q_EMIT maxBrightnessChanged(); + } } diff --git a/components/screenbrightnessplugin/screenbrightnessutil.h b/components/screenbrightnessplugin/screenbrightnessutil.h index 7e9f7e5c..c83920e5 100644 --- a/components/screenbrightnessplugin/screenbrightnessutil.h +++ b/components/screenbrightnessplugin/screenbrightnessutil.h @@ -42,8 +42,8 @@ private Q_SLOTS: void fetchMaxBrightness(); private: - int m_brightness; - int m_maxBrightness; + int m_brightness{0}; + int m_maxBrightness{0}; org::kde::Solid::PowerManagement::Actions::BrightnessControl *m_brightnessInterface; QDBusServiceWatcher *m_brightnessInterfaceWatcher;