From a773d84570e224035389f6697ac5634d7f27cccc Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Tue, 10 May 2022 20:54:46 +0100 Subject: 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 #10400) --- src/gui_w32.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src/gui_w32.c') diff --git a/src/gui_w32.c b/src/gui_w32.c index 79afa7a2d..0bac12ac0 100644 --- 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 @@ _OnMouseWheel(HWND hwnd, short zDelta, LPARAM param, int horizontal) 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 @@ _WndProc( 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 @@ _WndProc( 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() -- cgit v1.2.1