From 5778d4540f0b522946c84c8ba601456f2d440f78 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周三, 08 5月 2024 13:58:59 +0800 Subject: [PATCH] Fix a mistake --- src/core/contexts/win32windowcontext.cpp | 33 ++++++++++++++++++++++----------- 1 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp index a448ed6..9d37d7c 100644 --- a/src/core/contexts/win32windowcontext.cpp +++ b/src/core/contexts/win32windowcontext.cpp @@ -1388,8 +1388,8 @@ // menu while Windows will create and execute a new event loop // until the menu returns iconButtonClickTime = ::GetTickCount64(); - *result = - ::DefWindowProcW(hWnd, WM_NCLBUTTONDOWN, wParam, lParam); + *result = ::DefWindowProcW(hWnd, message, wParam, lParam); + iconButtonClickTime = 0; if (iconButtonClickLevel & IconButtonTriggersClose) { ::PostMessageW(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0); } @@ -2106,7 +2106,10 @@ const POINT nativeLocalPos = getNativePosFromMouse(); const QPoint qtScenePos = QHighDpi::fromNativeLocalPosition(point2qpoint(nativeLocalPos), m_windowHandle); - if (isInTitleBarDraggableArea(qtScenePos)) { + WindowAgentBase::SystemButton sysButtonType = WindowAgentBase::Unknown; + if (isInTitleBarDraggableArea(qtScenePos) || + (isInSystemButtons(qtScenePos, &sysButtonType) && + sysButtonType == WindowAgentBase::WindowIcon)) { shouldShowSystemMenu = true; nativeGlobalPos = nativeLocalPos; ::ClientToScreen(hWnd, &nativeGlobalPos); @@ -2176,14 +2179,23 @@ WH_MOUSE, [](int nCode, WPARAM wParam, LPARAM lParam) { if (nCode >= 0) { - if (wParam == WM_LBUTTONDOWN || wParam == WM_LBUTTONDBLCLK) { - if (wParam == WM_LBUTTONDBLCLK) { + switch (wParam) { + case WM_LBUTTONDBLCLK: mouseDoubleClicked = true; + Q_FALLTHROUGH(); + + // case WM_POINTERDOWN: + + case WM_LBUTTONDOWN: { + auto pMouseStruct = + reinterpret_cast<MOUSEHOOKSTRUCT *>(lParam); + if (pMouseStruct) { + mouseClickPos = pMouseStruct->pt; + } + break; } - auto pMouseStruct = reinterpret_cast<MOUSEHOOKSTRUCT *>(lParam); - if (pMouseStruct) { - mouseClickPos = pMouseStruct->pt; - } + default: + break; } } return ::CallNextHookEx(nullptr, nCode, wParam, lParam); @@ -2201,7 +2213,6 @@ ::UnhookWindowsHookEx(mouseHook); // Emulate the Windows icon button's behavior - static uint32_t doubleClickTime = ::GetDoubleClickTime(); if (!res && mouseClickPos.has_value()) { POINT nativeLocalPos = mouseClickPos.value(); ::ScreenToClient(hWnd, &nativeLocalPos); @@ -2211,7 +2222,7 @@ if (isInSystemButtons(qtScenePos, &sysButtonType) && sysButtonType == WindowAgentBase::WindowIcon) { iconButtonClickLevel |= IconButtonClicked; - if (::GetTickCount64() - iconButtonClickTime <= doubleClickTime) { + if (::GetTickCount64() - iconButtonClickTime <= ::GetDoubleClickTime()) { iconButtonClickLevel |= IconButtonTriggersClose; } } -- Gitblit v1.9.1