diff --git a/modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.cpp b/modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.cpp index 135d51015d..b0d60d303c 100644 --- a/modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.cpp +++ b/modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.cpp @@ -32,6 +32,15 @@ namespace bool isTransparencyEnabled() { + HIGHCONTRAST constrastInfo; + constrastInfo.cbSize = sizeof(HIGHCONTRAST); + + bool ret = SystemParametersInfoA(SPI_GETHIGHCONTRAST, constrastInfo.cbSize, &constrastInfo, 0); + + bool useHighContrast = ret && ((constrastInfo.dwFlags & HCF_HIGHCONTRASTON) == HCF_HIGHCONTRASTON); + if (useHighContrast) + return false; + static const char *TRANSPARENCY_SETTING_PATH = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; static const char *TRANSPARENCY_SETTING_KEY = "EnableTransparency"; @@ -128,16 +137,15 @@ bool CompositorDCompositionAcrylicSurface::nativeEventFilter(const QByteArray &, { if (!lstrcmpW(LPCWSTR(msg->lParam), L"ImmersiveColorSet")) { - const auto transparencyEnabled = isTransparencyEnabled(); - if (m_transparencyEnabled == transparencyEnabled) - break; - - m_transparencyEnabled = transparencyEnabled; - m_mainCtx->setHasAcrylicSurface(m_transparencyEnabled); - setActive(m_transparencyEnabled && m_mainCtx->acrylicActive()); + updateTransparencyState(); } break; } + case WM_SYSCOLORCHANGE: + { + updateTransparencyState(); + break; + } } return false; @@ -173,6 +181,17 @@ bool CompositorDCompositionAcrylicSurface::init(ID3D11Device *device) return true; } +void CompositorDCompositionAcrylicSurface::updateTransparencyState() +{ + const auto transparencyEnabled = isTransparencyEnabled(); + if (m_transparencyEnabled == transparencyEnabled) + return; + + m_transparencyEnabled = transparencyEnabled; + m_mainCtx->setHasAcrylicSurface(m_transparencyEnabled); + setActive(m_transparencyEnabled && m_mainCtx->acrylicActive()); +} + bool CompositorDCompositionAcrylicSurface::loadFunctions() try { diff --git a/modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.hpp b/modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.hpp index 2ef5d8812e..527170c715 100644 --- a/modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.hpp +++ b/modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.hpp @@ -187,6 +187,8 @@ private: bool createDesktopVisual(); bool createBackHostVisual(); + void updateTransparencyState(); + void sync(); void updateVisual(); void commitChanges();