From: Szegeczki Imre Subject: [PATCH] DirectInput: send wheel events in absolute coords if requested Message-Id: <20210223183943.169024-1-szegeczki1@gmail.com> Date: Tue, 23 Feb 2021 19:39:43 +0100 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=14025 Signed-off-by: Szegeczki Imre --- dlls/dinput/mouse.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index e50731fda41..73dd46c7249 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -379,8 +379,12 @@ void dinput_mouse_rawinput_hook( LPDIRECTINPUTDEVICE8A iface, WPARAM wparam, LPA if (ri->data.mouse.usButtonFlags & RI_MOUSE_WHEEL) { This->m_state.lZ += (wdata = (SHORT)ri->data.mouse.usButtonData); - queue_event( iface, DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | DIDFT_RELAXIS, - wdata, GetCurrentTime(), seq ); + if (This->base.data_format.user_df->dwFlags & DIDF_ABSAXIS) + queue_event( iface, DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | DIDFT_RELAXIS, + This->m_state.lZ, GetCurrentTime(), seq ); + else + queue_event( iface, DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | DIDFT_RELAXIS, + wdata, GetCurrentTime(), seq ); } for (i = 0; i < ARRAY_SIZE(mouse_button_flags); ++i) @@ -449,6 +453,8 @@ int dinput_mouse_hook( LPDIRECTINPUTDEVICE8A iface, WPARAM wparam, LPARAM lparam case WM_MOUSEWHEEL: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | DIDFT_RELAXIS; This->m_state.lZ += wdata = (short)HIWORD(hook->mouseData); + if (This->base.data_format.user_df->dwFlags & DIDF_ABSAXIS) + wdata = This->m_state.lZ; /* FarCry crashes if it gets a mouse wheel message */ /* FIXME: should probably filter out other messages too */ ret = This->clipped; -- 2.30.1