From 61f65f23ffee628344fb9ebb0f71e1d7c480976b Mon Sep 17 00:00:00 2001 From: Zhao Yuhang <2546789017@qq.com> Date: 周日, 17 12月 2023 19:29:47 +0800 Subject: [PATCH] improve readability --- src/core/contexts/win32windowcontext.cpp | 34 +++++++++++++++++++--------------- 1 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp index 0f7b6f7..864f552 100644 --- a/src/core/contexts/win32windowcontext.cpp +++ b/src/core/contexts/win32windowcontext.cpp @@ -79,16 +79,6 @@ // Original Qt window proc function static WNDPROC g_qtWindowProc = nullptr; - // ### FIXME FIXME FIXME - // ### FIXME: Tell the user to call in the documentation, instead of automatically - // calling it directly. - // ### FIXME FIXME FIXME - static const struct QWK_Hook { - QWK_Hook() { - qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); - } - } g_hook{}; - struct DynamicApis { static const DynamicApis &instance() { static const DynamicApis inst{}; @@ -114,6 +104,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 +131,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); @@ -800,7 +792,12 @@ case ShowSystemMenuHook: { const auto &pos = *static_cast<const QPoint *>(data); auto hWnd = reinterpret_cast<HWND>(m_windowHandle->winId()); - showSystemMenu2(hWnd, qpoint2point(QHighDpi::toNativeGlobalPosition(pos, m_windowHandle)), false, +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + const QPoint nativeGlobalPos = QHighDpi::toNativeGlobalPosition(pos, m_windowHandle); +#else + const QPoint nativeGlobalPos = QHighDpi::toNativePixels(pos, m_windowHandle); +#endif + showSystemMenu2(hWnd, qpoint2point(nativeGlobalPos), false, m_delegate->isHostSizeFixed(m_host)); return; } @@ -875,6 +872,13 @@ // Install window hook 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); @@ -1157,7 +1161,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); @@ -1219,7 +1223,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; @@ -1544,9 +1548,9 @@ // the client area as a whole will shift to the left, which looks very abnormal if // we don't repaint it. This exception disappears if we add SWP_NOCOPYBITS flag. // But I don't know what caused the problem, or why this would solve it. + static constexpr const auto kBadWindowPosFlag = SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED; const auto windowPos = reinterpret_cast<LPWINDOWPOS>(lParam); - if (windowPos->flags == - (SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED)) { + if (windowPos->flags == kBadWindowPosFlag) { windowPos->flags |= SWP_NOCOPYBITS; } break; -- Gitblit v1.9.1