1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
// SPDX-FileCopyrightText: 2024 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: GPL-2.0-or-later
#include "screenbrightnessutil.h"
#include <QDBusPendingCallWatcher>
#include <QDBusPendingReply>
ScreenBrightnessUtil::ScreenBrightnessUtil(QObject *parent)
: QObject{parent}
{
m_brightnessInterface =
new org::kde::Solid::PowerManagement::Actions::BrightnessControl(QStringLiteral("org.kde.Solid.PowerManagement"),
QStringLiteral("/org/kde/Solid/PowerManagement/Actions/BrightnessControl"),
QDBusConnection::sessionBus(),
this);
connect(m_brightnessInterface,
&org::kde::Solid::PowerManagement::Actions::BrightnessControl::brightnessChanged,
this,
&ScreenBrightnessUtil::fetchBrightness);
connect(m_brightnessInterface,
&org::kde::Solid::PowerManagement::Actions::BrightnessControl::brightnessMaxChanged,
this,
&ScreenBrightnessUtil::fetchMaxBrightness);
fetchBrightness();
fetchMaxBrightness();
// watch for brightness interface
m_brightnessInterfaceWatcher = new QDBusServiceWatcher(QStringLiteral("org.kde.Solid.PowerManagement.Actions.BrightnessControl"),
QDBusConnection::sessionBus(),
QDBusServiceWatcher::WatchForOwnerChange,
this);
connect(m_brightnessInterfaceWatcher, &QDBusServiceWatcher::serviceRegistered, this, [this]() -> void {
fetchBrightness();
fetchMaxBrightness();
Q_EMIT brightnessAvailableChanged();
});
connect(m_brightnessInterfaceWatcher, &QDBusServiceWatcher::serviceUnregistered, this, [this]() -> void {
Q_EMIT brightnessAvailableChanged();
});
}
int ScreenBrightnessUtil::brightness() const
{
return m_brightness;
}
void ScreenBrightnessUtil::setBrightness(int brightness)
{
m_brightnessInterface->setBrightness(brightness);
}
int ScreenBrightnessUtil::maxBrightness() const
{
return m_maxBrightness;
}
bool ScreenBrightnessUtil::brightnessAvailable() const
{
return m_brightnessInterface->isValid();
}
void ScreenBrightnessUtil::fetchBrightness()
{
QDBusPendingReply<int> reply = m_brightnessInterface->brightness();
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) {
QDBusPendingReply<int> 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();
});
}
void ScreenBrightnessUtil::fetchMaxBrightness()
{
QDBusPendingReply<int> reply = m_brightnessInterface->brightnessMax();
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) {
QDBusPendingReply<int> 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();
});
}
|