diff --git a/src/gui/osutils/nixutils/NixUtils.cpp b/src/gui/osutils/nixutils/NixUtils.cpp index d96a19bef..e75306000 100644 --- a/src/gui/osutils/nixutils/NixUtils.cpp +++ b/src/gui/osutils/nixutils/NixUtils.cpp @@ -74,6 +74,11 @@ NixUtils::NixUtils(QObject* parent) "SettingChanged", this, SLOT(handleColorSchemeChanged(QString, QString, QDBusVariant))); + + QDBusMessage msg = QDBusMessage::createMethodCall( + "org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop", "org.freedesktop.portal.Settings", "Read"); + msg << QVariant("org.freedesktop.appearance") << QVariant("color-scheme"); + sessionBus.callWithCallback(msg, this, SLOT(handleColorSchemeRead(QDBusVariant))); } NixUtils::~NixUtils() @@ -83,7 +88,7 @@ NixUtils::~NixUtils() bool NixUtils::isDarkMode() const { // prefer freedesktop "org.freedesktop.appearance color-scheme" setting - if (m_systemColorschemePref != ColorschemePref::PreferNone) { + if (m_systemColorschemePrefExists) { return m_systemColorschemePref == ColorschemePref::PreferDark; } @@ -299,10 +304,22 @@ bool NixUtils::unregisterGlobalShortcut(const QString& name) return true; } +void NixUtils::handleColorSchemeRead(QDBusVariant value) +{ + value = qvariant_cast(value.variant()); + setColorScheme(value); +} + void NixUtils::handleColorSchemeChanged(QString ns, QString key, QDBusVariant value) { if (ns == "org.freedesktop.appearance" && key == "color-scheme") { - m_systemColorschemePref = static_cast(value.variant().toInt()); - emit interfaceThemeChanged(); + setColorScheme(value); } } + +void NixUtils::setColorScheme(QDBusVariant value) +{ + m_systemColorschemePref = static_cast(value.variant().toInt()); + m_systemColorschemePrefExists = true; + emit interfaceThemeChanged(); +} diff --git a/src/gui/osutils/nixutils/NixUtils.h b/src/gui/osutils/nixutils/NixUtils.h index ed54f9b53..e3a17b950 100644 --- a/src/gui/osutils/nixutils/NixUtils.h +++ b/src/gui/osutils/nixutils/NixUtils.h @@ -50,6 +50,7 @@ public: } private slots: + void handleColorSchemeRead(QDBusVariant value); void handleColorSchemeChanged(QString ns, QString key, QDBusVariant value); private: @@ -79,6 +80,9 @@ private: PreferLight }; ColorschemePref m_systemColorschemePref = ColorschemePref::PreferNone; + bool m_systemColorschemePrefExists; + + void setColorScheme(QDBusVariant value); Q_DISABLE_COPY(NixUtils) };