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:
authorJanek Bevendorff <janek@jbev.net>2020-12-24 02:09:51 +0300
committerJanek Bevendorff <janek@jbev.net>2021-01-31 14:38:01 +0300
commitf7d387d2335ee826e2c758c170734c884fa2b90d (patch)
tree09c2c79a1a8ef0dab6bcb051919fbc236d3cf41e
parentdad4ad68f36b558f4446f9bd39a572ef63da0b9e (diff)
Add dynamic theme switching on Windows 10 (backport)
-rw-r--r--src/core/Resources.cpp3
-rw-r--r--src/gui/ApplicationSettingsWidget.cpp2
-rw-r--r--src/gui/osutils/winutils/WinUtils.cpp24
-rw-r--r--src/gui/osutils/winutils/WinUtils.h3
4 files changed, 22 insertions, 10 deletions
diff --git a/src/core/Resources.cpp b/src/core/Resources.cpp
index 26c63ab1c..2976f9a25 100644
--- a/src/core/Resources.cpp
+++ b/src/core/Resources.cpp
@@ -142,7 +142,7 @@ QIcon Resources::trayIcon(QString style)
}
QIcon i;
-#ifdef Q_OS_MACOS
+#if defined(Q_OS_MACOS) || defined(Q_OS_WIN)
if (osUtils->isStatusBarDark()) {
i = icon(QString("keepassxc-monochrome-light%1").arg(style), false);
} else {
@@ -171,7 +171,6 @@ QIcon Resources::trayIconUnlocked()
return trayIcon("unlocked");
}
-
AdaptiveIconEngine::AdaptiveIconEngine(QIcon baseIcon)
: QIconEngine()
, m_baseIcon(std::move(baseIcon))
diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp
index 0d9829229..8ec2d4730 100644
--- a/src/gui/ApplicationSettingsWidget.cpp
+++ b/src/gui/ApplicationSettingsWidget.cpp
@@ -250,7 +250,7 @@ void ApplicationSettingsWidget::loadSettings()
}
m_generalUi->trayIconAppearance->clear();
-#ifdef Q_OS_MACOS
+#if defined(Q_OS_MACOS) || defined(Q_OS_WIN)
m_generalUi->trayIconAppearance->addItem(tr("Monochrome"), "monochrome");
#else
m_generalUi->trayIconAppearance->addItem(tr("Monochrome (light)"), "monochrome-light");
diff --git a/src/gui/osutils/winutils/WinUtils.cpp b/src/gui/osutils/winutils/WinUtils.cpp
index ab5562b7b..9a08ef01f 100644
--- a/src/gui/osutils/winutils/WinUtils.cpp
+++ b/src/gui/osutils/winutils/WinUtils.cpp
@@ -30,6 +30,8 @@ WinUtils* WinUtils::instance()
{
if (!m_instance) {
m_instance = new WinUtils(qApp);
+ m_instance->m_darkAppThemeActive = m_instance->isDarkMode();
+ m_instance->m_darkSystemThemeActive = m_instance->isStatusBarDark();
}
return m_instance;
@@ -66,13 +68,20 @@ bool WinUtils::DWMEventFilter::nativeEventFilter(const QByteArray& eventType, vo
return false;
}
switch (msg->message) {
- case WM_CREATE:
- case WM_INITDIALOG: {
- if (winUtils()->isDarkMode()) {
- // TODO: indicate dark mode support for black title bar
+ case WM_SETTINGCHANGE:
+ if (m_darkAppThemeActive != isDarkMode()) {
+ m_darkAppThemeActive = !m_darkAppThemeActive;
+ emit interfaceThemeChanged();
+ }
+
+ if (m_darkSystemThemeActive != isStatusBarDark()) {
+ m_darkSystemThemeActive = !m_darkSystemThemeActive;
+ emit statusbarThemeChanged();
}
break;
- }
+ case WM_HOTKEY:
+ triggerGlobalShortcut(msg->wParam);
+ break;
}
return false;
@@ -87,8 +96,9 @@ bool WinUtils::isDarkMode() const
bool WinUtils::isStatusBarDark() const
{
- // TODO: implement
- return isDarkMode();
+ QSettings settings(R"(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize)",
+ QSettings::NativeFormat);
+ return settings.value("SystemUsesLightTheme", 0).toInt() == 0;
}
bool WinUtils::isLaunchAtStartupEnabled() const
diff --git a/src/gui/osutils/winutils/WinUtils.h b/src/gui/osutils/winutils/WinUtils.h
index d8f9a10ea..19f43fd16 100644
--- a/src/gui/osutils/winutils/WinUtils.h
+++ b/src/gui/osutils/winutils/WinUtils.h
@@ -53,6 +53,9 @@ private:
static QPointer<WinUtils> m_instance;
static QScopedPointer<DWMEventFilter> m_eventFilter;
+ bool m_darkAppThemeActive;
+ bool m_darkSystemThemeActive;
+
Q_DISABLE_COPY(WinUtils)
};