changeset 28825:4c749f9b97fd v8.2.4936

patch 8.2.4936: MS-Windows: mouse coordinates for scroll event are wrong Commit: https://github.com/vim/vim/commit/a773d84570e224035389f6697ac5634d7f27cccc Author: LemonBoy <thatlemon@gmail.com> Date: Tue May 10 20:54:46 2022 +0100 patch 8.2.4936: MS-Windows: mouse coordinates for scroll event are wrong Problem: MS-Windows: mouse coordinates for scroll event are wrong. Solution: Convert coordinates to the text area coordinates. (closes https://github.com/vim/vim/issues/10400)
author Bram Moolenaar <Bram@vim.org>
date Tue, 10 May 2022 22:00:02 +0200
parents 08e9b779b213
children 3580e8f79e29
files src/gui_w32.c src/version.c
diffstat 2 files changed, 15 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -4146,15 +4146,16 @@ init_mouse_wheel(void)
 }
 
 /*
- * Intellimouse wheel handler.
- * Treat a mouse wheel event as if it were a scroll request.
+ * Mouse scroll event handler.
  */
     static void
-_OnMouseWheel(HWND hwnd, short zDelta, LPARAM param, int horizontal)
+_OnMouseWheel(HWND hwnd, WPARAM wParam, LPARAM lParam, int horizontal)
 {
     int		button;
     win_T	*wp;
     int		modifiers, kbd_modifiers;
+    int		zDelta = GET_WHEEL_DELTA_WPARAM(wParam);
+    POINT	pt;
 
     wp = gui_mouse_window(FIND_POPUP);
 
@@ -4207,11 +4208,12 @@ init_mouse_wheel(void)
     if ((kbd_modifiers & MOD_MASK_ALT) != 0)
 	modifiers |= MOUSE_ALT;
 
-    mch_disable_flush();
-    gui_send_mouse_event(button, GET_X_LPARAM(param), GET_Y_LPARAM(param),
-		FALSE, kbd_modifiers);
-    mch_enable_flush();
-    gui_may_flush();
+    // The cursor position is relative to the upper-left corner of the screen.
+    pt.x = GET_X_LPARAM(lParam);
+    pt.y = GET_Y_LPARAM(lParam);
+    ScreenToClient(s_textArea, &pt);
+
+    gui_send_mouse_event(button, pt.x, pt.y, FALSE, kbd_modifiers);
 }
 
 #ifdef USE_SYSMENU_FONT
@@ -4663,8 +4665,8 @@ destroy_sizing_tip(void)
     WPARAM wParam,
     LPARAM lParam)
 {
-    // TRACE("WndProc: hwnd = %08x, msg = %x, wParam = %x, lParam = %x\n",
-    //       hwnd, uMsg, wParam, lParam);
+    // ch_log(NULL, "WndProc: hwnd = %08x, msg = %x, wParam = %x, lParam = %x",
+	    // hwnd, uMsg, wParam, lParam);
 
     HandleMouseHide(uMsg, lParam);
 
@@ -4763,7 +4765,7 @@ destroy_sizing_tip(void)
 
     case WM_MOUSEWHEEL:
     case WM_MOUSEHWHEEL:
-	_OnMouseWheel(hwnd, HIWORD(wParam), lParam, uMsg == WM_MOUSEHWHEEL);
+	_OnMouseWheel(hwnd, wParam, lParam, uMsg == WM_MOUSEHWHEEL);
 	return 0L;
 
 	// Notification for change in SystemParametersInfo()
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4936,
+/**/
     4935,
 /**/
     4934,