From 01bde69ae61d8973d6fe95c864a1750bbd534803 Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <2546789017@qq.com> Date: Sat, 4 Apr 2020 13:54:37 +0800 Subject: [PATCH] Work-around Win7 bug. Re-apply it: tested on Windows 7 and 8.1 in my VMs. The bug is there indeed. Signed-off-by: Yuhang Zhao <2546789017@qq.com> --- winnativeeventfilter.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/winnativeeventfilter.cpp b/winnativeeventfilter.cpp index dd30592..184cbbc 100644 --- a/winnativeeventfilter.cpp +++ b/winnativeeventfilter.cpp @@ -489,8 +489,20 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType, const RECT rcWorkArea = monitorInfo.rcWork; const RECT rcMonitorArea = monitorInfo.rcMonitor; auto &mmi = *reinterpret_cast(msg->lParam); - mmi.ptMaxPosition.x = qAbs(rcWorkArea.left - rcMonitorArea.left); - mmi.ptMaxPosition.y = qAbs(rcWorkArea.top - rcMonitorArea.top); + if (QOperatingSystemVersion::current() < + QOperatingSystemVersion::Windows8) { + // Buggy on Windows 7: + // The origin of coordinates is the top left edge of the + // monitor's work area. Why? It should be the top left edge of + // the monitor's area. + mmi.ptMaxPosition.x = rcMonitorArea.left; + mmi.ptMaxPosition.y = rcMonitorArea.top; + } else { + // Works fine on Windows 8/8.1/10 + mmi.ptMaxPosition.x = + qAbs(rcWorkArea.left - rcMonitorArea.left); + mmi.ptMaxPosition.y = qAbs(rcWorkArea.top - rcMonitorArea.top); + } mmi.ptMaxSize.x = qAbs(rcWorkArea.right - rcWorkArea.left); mmi.ptMaxSize.y = qAbs(rcWorkArea.bottom - rcWorkArea.top); mmi.ptMaxTrackSize.x = mmi.ptMaxSize.x;