From da8a611dcb1ac19f5428e45401dedd64e903d5e2 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 24 Oct 2026 15:04:12 -0500 Subject: [PATCH 1/2] Revert "Added support for raw mousewheel events" Some input devices have scroll direction inverted with raw wheel events. Fixes #16575 This reverts commit 8201b6dc4d5126a7e5767d7f310e63b983024d55. --- src/video/windows/SDL_windowsevents.c | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index 923b69fe2afe3..c87d8355c26e1 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -716,16 +716,6 @@ static void WIN_HandleRawMouseInput(Uint64 timestamp, SDL_VideoData *data, HANDL } } - if (rawmouse->usButtonFlags & RI_MOUSE_WHEEL) { - SHORT amount = (SHORT)rawmouse->usButtonData; - float fAmount = (float)amount / WHEEL_DELTA; - SDL_SendMouseWheel(timestamp, window, mouseID, 0.0f, fAmount, SDL_MOUSEWHEEL_NORMAL); - } else if (rawmouse->usButtonFlags & RI_MOUSE_HWHEEL) { - SHORT amount = (SHORT)rawmouse->usButtonData; - float fAmount = (float)amount / WHEEL_DELTA; - SDL_SendMouseWheel(timestamp, window, mouseID, fAmount, 0.0f, SDL_MOUSEWHEEL_NORMAL); - } - /* Invalidate the mouse button flags. If we don't do this then disabling raw input will cause held down mouse buttons to persist when released. */ windowdata->mouse_button_flags = (WPARAM)-1; @@ -1539,14 +1529,12 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara case WM_MOUSEWHEEL: case WM_MOUSEHWHEEL: { - if (!data->videodata->raw_mouse_enabled) { - short amount = GET_WHEEL_DELTA_WPARAM(wParam); - float fAmount = (float)amount / WHEEL_DELTA; - if (msg == WM_MOUSEWHEEL) { - SDL_SendMouseWheel(WIN_GetEventTimestamp(), data->window, SDL_GLOBAL_MOUSE_ID, 0.0f, fAmount, SDL_MOUSEWHEEL_NORMAL); - } else { - SDL_SendMouseWheel(WIN_GetEventTimestamp(), data->window, SDL_GLOBAL_MOUSE_ID, fAmount, 0.0f, SDL_MOUSEWHEEL_NORMAL); - } + short amount = GET_WHEEL_DELTA_WPARAM(wParam); + float fAmount = (float)amount / WHEEL_DELTA; + if (msg == WM_MOUSEWHEEL) { + SDL_SendMouseWheel(WIN_GetEventTimestamp(), data->window, SDL_GLOBAL_MOUSE_ID, 0.0f, fAmount, SDL_MOUSEWHEEL_NORMAL); + } else { + SDL_SendMouseWheel(WIN_GetEventTimestamp(), data->window, SDL_GLOBAL_MOUSE_ID, fAmount, 0.0f, SDL_MOUSEWHEEL_NORMAL); } } break; From 4df91d7dd4771f440580cde5f41b52c3bbf91aed Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 24 Oct 2026 15:13:15 -0500 Subject: [PATCH 2/2] Add a comment about lack of RI wheel handling --- src/video/windows/SDL_windowsevents.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index c87d8355c26e1..66f43ce71292e 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -716,6 +716,10 @@ static void WIN_HandleRawMouseInput(Uint64 timestamp, SDL_VideoData *data, HANDL } } + /* Note: We don't handle RI_MOUSE_WHEEL and RI_MOUSE_HWHEEL here because some + input devices have inverted wheel direction in raw mode. This avoids scroll + direction changing unexpectedly when entering/exiting relative mouse mode. */ + /* Invalidate the mouse button flags. If we don't do this then disabling raw input will cause held down mouse buttons to persist when released. */ windowdata->mouse_button_flags = (WPARAM)-1;