Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfelipdsa21 <93343201+felipdsa21@users.noreply.github.com>2022-09-17 01:58:48 +0300
committerJonathan White <support@dmapps.us>2022-10-02 17:26:33 +0300
commite7fe3ff9687e041755540150871360de3fbcaa86 (patch)
treefbb41f59d973b69386ee245b54db64881296b88c
parent5caf68988e72b77f6ec58e985a2678417144906a (diff)
Fix dark mode detection on Linux
Fixes #7817
-rw-r--r--src/gui/osutils/nixutils/NixUtils.cpp23
-rw-r--r--src/gui/osutils/nixutils/NixUtils.h4
2 files changed, 24 insertions, 3 deletions
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<QDBusVariant>(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<ColorschemePref>(value.variant().toInt());
- emit interfaceThemeChanged();
+ setColorScheme(value);
}
}
+
+void NixUtils::setColorScheme(QDBusVariant value)
+{
+ m_systemColorschemePref = static_cast<ColorschemePref>(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)
};