From a32147182a6d37413cb767b2f032e8ee04d1a0ce Mon Sep 17 00:00:00 2001 From: Janek Bevendorff Date: Tue, 28 Jul 2020 19:43:32 +0200 Subject: [PATCH] Switch to classic if theme set to auto and high contast mode is on. The light and dark theme don't respond to Windows's high contrast accessibility mode, so when the theme is set to "auto", we default to "classic" instead of "light". Fixes #5044 --- src/gui/Application.cpp | 5 +++++ src/gui/osutils/winutils/WinUtils.cpp | 6 ++++++ src/gui/osutils/winutils/WinUtils.h | 1 + 3 files changed, 12 insertions(+) diff --git a/src/gui/Application.cpp b/src/gui/Application.cpp index bb6d37b9..3e97639d 100644 --- a/src/gui/Application.cpp +++ b/src/gui/Application.cpp @@ -147,6 +147,11 @@ void Application::applyTheme() auto appTheme = config()->get(Config::GUI_ApplicationTheme).toString(); if (appTheme == "auto") { appTheme = osUtils->isDarkMode() ? "dark" : "light"; +#ifdef Q_OS_WIN + if (winUtils()->isHighContrastMode()) { + appTheme = "classic"; + } +#endif } if (appTheme == "light") { diff --git a/src/gui/osutils/winutils/WinUtils.cpp b/src/gui/osutils/winutils/WinUtils.cpp index 385a9389..61e913c9 100644 --- a/src/gui/osutils/winutils/WinUtils.cpp +++ b/src/gui/osutils/winutils/WinUtils.cpp @@ -105,3 +105,9 @@ bool WinUtils::isCapslockEnabled() { return GetKeyState(VK_CAPITAL) == 1; } + +bool WinUtils::isHighContrastMode() const +{ + QSettings settings(R"(HKEY_CURRENT_USER\Control Panel\Accessibility\HighContrast)", QSettings::NativeFormat); + return (settings.value("Flags").toInt() & 1u) != 0; +} diff --git a/src/gui/osutils/winutils/WinUtils.h b/src/gui/osutils/winutils/WinUtils.h index bf49f2c7..c1904027 100644 --- a/src/gui/osutils/winutils/WinUtils.h +++ b/src/gui/osutils/winutils/WinUtils.h @@ -36,6 +36,7 @@ public: bool isLaunchAtStartupEnabled() const override; void setLaunchAtStartup(bool enable) override; bool isCapslockEnabled() override; + bool isHighContrastMode() const; protected: explicit WinUtils(QObject* parent = nullptr);