From 97a65514f04eb2db667c5ee22ec99472a8dc78c9 Mon Sep 17 00:00:00 2001 From: SineStriker <trueful@163.com> Date: 周日, 17 12月 2023 16:09:06 +0800 Subject: [PATCH] Test on Mac --- src/core/contexts/win32windowcontext.cpp | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp index a661b3b..11b5327 100644 --- a/src/core/contexts/win32windowcontext.cpp +++ b/src/core/contexts/win32windowcontext.cpp @@ -114,6 +114,7 @@ DYNAMIC_API_DECLARE(DwmIsCompositionEnabled); DYNAMIC_API_DECLARE(DwmGetCompositionTimingInfo); DYNAMIC_API_DECLARE(DwmGetWindowAttribute); + DYNAMIC_API_DECLARE(DwmSetWindowAttribute); DYNAMIC_API_DECLARE(GetDpiForWindow); DYNAMIC_API_DECLARE(GetSystemMetricsForDpi); DYNAMIC_API_DECLARE(GetDpiForMonitor); @@ -140,6 +141,7 @@ DYNAMIC_API_RESOLVE(dwmapi, DwmIsCompositionEnabled); DYNAMIC_API_RESOLVE(dwmapi, DwmGetCompositionTimingInfo); DYNAMIC_API_RESOLVE(dwmapi, DwmGetWindowAttribute); + DYNAMIC_API_RESOLVE(dwmapi, DwmSetWindowAttribute); QSystemLibrary winmm(QStringLiteral("winmm")); DYNAMIC_API_RESOLVE(winmm, timeGetDevCaps); @@ -881,6 +883,13 @@ auto winId = m_windowHandle->winId(); auto hWnd = reinterpret_cast<HWND>(winId); +#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0) + for (const auto attr : { _DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, _DWMWA_USE_IMMERSIVE_DARK_MODE }) { + const BOOL enable = TRUE; + DynamicApis::instance().pDwmSetWindowAttribute(hWnd, attr, &enable, sizeof(enable)); + } +#endif + // Inform Qt we want and have set custom margins updateInternalWindowFrameMargins(hWnd, m_windowHandle); @@ -1162,7 +1171,7 @@ const WindowPart currentWindowPart = lastHitTestResult; if (message == WM_NCMOUSEMOVE) { if (currentWindowPart != WindowPart::ChromeButton) { - m_delegate->resetQtGrabbedControl(); + m_delegate->resetQtGrabbedControl(m_host); if (mouseLeaveBlocked) { emulateClientAreaMessage(hWnd, message, wParam, lParam, WM_NCMOUSELEAVE); @@ -1224,7 +1233,7 @@ // window from client area, which means we will get previous window part as // HTCLIENT if the mouse leaves window from client area and enters window // from non-client area, but it has no bad effect. - m_delegate->resetQtGrabbedControl(); + m_delegate->resetQtGrabbedControl(m_host); } } break; -- Gitblit v1.9.1