From 76290a6696f30f144100482ec02d4eb88057b2af Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Fri, 12 Apr 2024 15:58:52 -0500 Subject: [PATCH] [NTUSER] Avoid sending superfluous WM_MOUSEMOVE messages (#6397) Add a check so that mouse move messages are not generated unless the mouse cursor X or Y position is changed. This fixes extra mouse moves generated when clicking. Patch by I_Kill_Bugs. CORE-8394 CORE-18529 CORE-19422 CORE-19423 --- win32ss/user/ntuser/cursoricon.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/win32ss/user/ntuser/cursoricon.c b/win32ss/user/ntuser/cursoricon.c index 6560a44852d..8dc794f62c0 100644 --- a/win32ss/user/ntuser/cursoricon.c +++ b/win32ss/user/ntuser/cursoricon.c @@ -264,13 +264,15 @@ BOOL UserSetCursorPos( INT x, INT y, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Ho pt.x = x; pt.y = y; - /* 1. Generate a mouse move message, this sets the htEx and Track Window too. */ - Msg.message = WM_MOUSEMOVE; - Msg.wParam = UserGetMouseButtonsState(); - Msg.lParam = MAKELPARAM(x, y); - Msg.pt = pt; - co_MsqInsertMouseMessage(&Msg, flags, dwExtraInfo, Hook); - + if ((gpsi->ptCursor.x != x) || (gpsi->ptCursor.y != y)) + { + /* 1. Generate a mouse move message, this sets the htEx and Track Window too. */ + Msg.message = WM_MOUSEMOVE; + Msg.wParam = UserGetMouseButtonsState(); + Msg.lParam = MAKELPARAM(x, y); + Msg.pt = pt; + co_MsqInsertMouseMessage(&Msg, flags, dwExtraInfo, Hook); + } /* 2. Store the new cursor position */ gpsi->ptCursor = pt;