plugins/nightcolor: expose daylight property in DBus interface

So that the applet can provide more detail about the current status, now that there is a configurable day time temperature.
master
Natalie Clarius 11 months ago
parent 04766c384a
commit a5d1646590

@ -134,6 +134,24 @@ NightColorDBusInterface::NightColorDBusInterface(NightColorManager *parent)
QDBusConnection::sessionBus().send(message); QDBusConnection::sessionBus().send(message);
}); });
connect(m_manager, &NightColorManager::daylightChanged, this, [this] {
QVariantMap changedProperties;
changedProperties.insert(QStringLiteral("mode"), uint(m_manager->daylight()));
QDBusMessage message = QDBusMessage::createSignal(
QStringLiteral("/ColorCorrect"),
QStringLiteral("org.freedesktop.DBus.Properties"),
QStringLiteral("PropertiesChanged"));
message.setArguments({
QStringLiteral("org.kde.kwin.ColorCorrect"),
changedProperties,
QStringList(), // invalidated_properties
});
QDBusConnection::sessionBus().send(message);
});
connect(m_manager, &NightColorManager::previousTransitionTimingsChanged, this, [this] { connect(m_manager, &NightColorManager::previousTransitionTimingsChanged, this, [this] {
QVariantMap changedProperties; QVariantMap changedProperties;
changedProperties.insert(QStringLiteral("previousTransitionDateTime"), previousTransitionDateTime()); changedProperties.insert(QStringLiteral("previousTransitionDateTime"), previousTransitionDateTime());
@ -217,6 +235,11 @@ int NightColorDBusInterface::mode() const
return m_manager->mode(); return m_manager->mode();
} }
bool NightColorDBusInterface::daylight() const
{
return m_manager->daylight();
}
quint64 NightColorDBusInterface::previousTransitionDateTime() const quint64 NightColorDBusInterface::previousTransitionDateTime() const
{ {
const QDateTime dateTime = m_manager->previousTransitionDateTime(); const QDateTime dateTime = m_manager->previousTransitionDateTime();

@ -28,6 +28,7 @@ class NightColorDBusInterface : public QObject, public QDBusContext
Q_PROPERTY(int currentTemperature READ currentTemperature) Q_PROPERTY(int currentTemperature READ currentTemperature)
Q_PROPERTY(int targetTemperature READ targetTemperature) Q_PROPERTY(int targetTemperature READ targetTemperature)
Q_PROPERTY(int mode READ mode) Q_PROPERTY(int mode READ mode)
Q_PROPERTY(bool daylight READ daylight)
Q_PROPERTY(quint64 previousTransitionDateTime READ previousTransitionDateTime) Q_PROPERTY(quint64 previousTransitionDateTime READ previousTransitionDateTime)
Q_PROPERTY(quint32 previousTransitionDuration READ previousTransitionDuration) Q_PROPERTY(quint32 previousTransitionDuration READ previousTransitionDuration)
Q_PROPERTY(quint64 scheduledTransitionDateTime READ scheduledTransitionDateTime) Q_PROPERTY(quint64 scheduledTransitionDateTime READ scheduledTransitionDateTime)
@ -44,6 +45,7 @@ public:
int currentTemperature() const; int currentTemperature() const;
int targetTemperature() const; int targetTemperature() const;
int mode() const; int mode() const;
bool daylight() const;
quint64 previousTransitionDateTime() const; quint64 previousTransitionDateTime() const;
quint32 previousTransitionDuration() const; quint32 previousTransitionDuration() const;
quint64 scheduledTransitionDateTime() const; quint64 scheduledTransitionDateTime() const;

@ -491,6 +491,7 @@ void NightColorManager::updateTransitionTimings(bool force)
const auto oldNext = m_next; const auto oldNext = m_next;
if (m_mode == NightColorMode::Constant) { if (m_mode == NightColorMode::Constant) {
setDaylight(false);
m_next = DateTimes(); m_next = DateTimes();
m_prev = DateTimes(); m_prev = DateTimes();
} else if (m_mode == NightColorMode::Timings) { } else if (m_mode == NightColorMode::Timings) {
@ -502,11 +503,11 @@ void NightColorManager::updateTransitionTimings(bool force)
const QDateTime nextEveE = nextEveB.addSecs(m_trTime * 60); const QDateTime nextEveE = nextEveB.addSecs(m_trTime * 60);
if (nextEveB < nextMorB) { if (nextEveB < nextMorB) {
m_daylight = true; setDaylight(true);
m_next = DateTimes(nextEveB, nextEveE); m_next = DateTimes(nextEveB, nextEveE);
m_prev = DateTimes(nextMorB.addDays(-1), nextMorE.addDays(-1)); m_prev = DateTimes(nextMorB.addDays(-1), nextMorE.addDays(-1));
} else { } else {
m_daylight = false; setDaylight(false);
m_next = DateTimes(nextMorB, nextMorE); m_next = DateTimes(nextMorB, nextMorE);
m_prev = DateTimes(nextEveB.addDays(-1), nextEveE.addDays(-1)); m_prev = DateTimes(nextEveB.addDays(-1), nextEveE.addDays(-1));
} }
@ -526,12 +527,12 @@ void NightColorManager::updateTransitionTimings(bool force)
// first try by only switching the timings // first try by only switching the timings
if (m_prev.first.date() == m_next.first.date()) { if (m_prev.first.date() == m_next.first.date()) {
// next is evening // next is evening
m_daylight = true; setDaylight(true);
m_prev = m_next; m_prev = m_next;
m_next = getSunTimings(todayNow, lat, lng, false); m_next = getSunTimings(todayNow, lat, lng, false);
} else { } else {
// next is morning // next is morning
m_daylight = false; setDaylight(false);
m_prev = m_next; m_prev = m_next;
m_next = getSunTimings(todayNow.addDays(1), lat, lng, true); m_next = getSunTimings(todayNow.addDays(1), lat, lng, true);
} }
@ -541,17 +542,17 @@ void NightColorManager::updateTransitionTimings(bool force)
// in case this fails, reset them // in case this fails, reset them
DateTimes morning = getSunTimings(todayNow, lat, lng, true); DateTimes morning = getSunTimings(todayNow, lat, lng, true);
if (todayNow < morning.first) { if (todayNow < morning.first) {
m_daylight = false; setDaylight(false);
m_prev = getSunTimings(todayNow.addDays(-1), lat, lng, false); m_prev = getSunTimings(todayNow.addDays(-1), lat, lng, false);
m_next = morning; m_next = morning;
} else { } else {
DateTimes evening = getSunTimings(todayNow, lat, lng, false); DateTimes evening = getSunTimings(todayNow, lat, lng, false);
if (todayNow < evening.first) { if (todayNow < evening.first) {
m_daylight = true; setDaylight(true);
m_prev = morning; m_prev = morning;
m_next = evening; m_next = evening;
} else { } else {
m_daylight = false; setDaylight(false);
m_prev = evening; m_prev = evening;
m_next = getSunTimings(todayNow.addDays(1), lat, lng, true); m_next = getSunTimings(todayNow.addDays(1), lat, lng, true);
} }
@ -709,6 +710,15 @@ void NightColorManager::setMode(NightColorMode mode)
Q_EMIT modeChanged(); Q_EMIT modeChanged();
} }
void NightColorManager::setDaylight(bool daylight)
{
if (m_daylight == daylight) {
return;
}
m_daylight = daylight;
Q_EMIT daylightChanged();
}
} // namespace KWin } // namespace KWin
#include "moc_nightcolormanager.cpp" #include "moc_nightcolormanager.cpp"

@ -144,6 +144,11 @@ public:
*/ */
NightColorMode mode() const; NightColorMode mode() const;
/**
* Returns whether Night Color is currently on day time.
*/
bool daylight() const;
/** /**
* Returns the datetime that specifies when the previous screen color temperature transition * Returns the datetime that specifies when the previous screen color temperature transition
* had started. Notice that when Night Color operates in the Constant mode, the returned date * had started. Notice that when Night Color operates in the Constant mode, the returned date
@ -218,6 +223,11 @@ Q_SIGNALS:
*/ */
void modeChanged(); void modeChanged();
/**
* Emitted whenver night color has switched between day and night time.
*/
void daylightChanged();
/** /**
* Emitted whenever the timings of the previous color temperature transition have changed. * Emitted whenever the timings of the previous color temperature transition have changed.
*/ */
@ -248,7 +258,6 @@ private:
void updateTransitionTimings(bool force); void updateTransitionTimings(bool force);
DateTimes getSunTimings(const QDateTime &dateTime, double latitude, double longitude, bool morning) const; DateTimes getSunTimings(const QDateTime &dateTime, double latitude, double longitude, bool morning) const;
bool checkAutomaticSunTimings() const; bool checkAutomaticSunTimings() const;
bool daylight() const;
void commitGammaRamps(int temperature); void commitGammaRamps(int temperature);
@ -256,6 +265,7 @@ private:
void setRunning(bool running); void setRunning(bool running);
void setCurrentTemperature(int temperature); void setCurrentTemperature(int temperature);
void setMode(NightColorMode mode); void setMode(NightColorMode mode);
void setDaylight(bool daylight);
NightColorDBusInterface *m_iface; NightColorDBusInterface *m_iface;
ClockSkewNotifier *m_skewNotifier; ClockSkewNotifier *m_skewNotifier;

@ -90,6 +90,13 @@
--> -->
<property name="mode" type="u" access="read"/> <property name="mode" type="u" access="read"/>
<!--
This property holds a value to indicate whether nightcolor is currently on day or night time.
True = day time, false = night time
-->
<property name="daylight" type="b" access="read"/>
<!-- <!--
This property holds a Unix timestamp that specifies when the previous color This property holds a Unix timestamp that specifies when the previous color
temperature transition had started. Note that when Night Color operates in temperature transition had started. Note that when Night Color operates in

Loading…
Cancel
Save