# HG changeset patch # User Bram Moolenaar # Date 1652212802 -7200 # Node ID 4c749f9b97fd0a52c2387b9cc2410df3c3f129b4 # Parent 08e9b779b21304f7a8b47df40b6239569afd55eb patch 8.2.4936: MS-Windows: mouse coordinates for scroll event are wrong Commit: https://github.com/vim/vim/commit/a773d84570e224035389f6697ac5634d7f27cccc Author: LemonBoy 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) diff --git a/src/gui_w32.c b/src/gui_w32.c --- 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() diff --git a/src/version.c b/src/version.c --- 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,