mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-12-04 15:39:34 +01:00
Add dynamic theme switching on Windows 10 (backport)
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user