diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c index db622399c1..62cfb362d6 100644 --- a/src/events/SDL_mouse.c +++ b/src/events/SDL_mouse.c @@ -1419,7 +1419,13 @@ bool SDL_UpdateRelativeMouseMode(void) { SDL_Mouse *mouse = SDL_GetMouse(); SDL_Window *focus = SDL_GetKeyboardFocus(); - bool relative_mode = (focus && (focus->flags & SDL_WINDOW_MOUSE_RELATIVE_MODE)); + bool relative_mode = false; + + if (focus && + (focus->flags & SDL_WINDOW_MOUSE_RELATIVE_MODE) && + (focus->flags & SDL_WINDOW_MOUSE_FOCUS)) { + relative_mode = true; + } if (relative_mode == mouse->relative_mode) { return true; diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index aed81189e3..c99e45216a 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -4416,10 +4416,12 @@ void SDL_OnWindowEnter(SDL_Window *window) if (_this->OnWindowEnter) { _this->OnWindowEnter(_this, window); } + SDL_UpdateRelativeMouseMode(); } void SDL_OnWindowLeave(SDL_Window *window) { + SDL_UpdateRelativeMouseMode(); } void SDL_OnWindowFocusGained(SDL_Window *window) diff --git a/src/video/windows/SDL_windowsrawinput.c b/src/video/windows/SDL_windowsrawinput.c index 497e8007bc..c5f193c73f 100644 --- a/src/video/windows/SDL_windowsrawinput.c +++ b/src/video/windows/SDL_windowsrawinput.c @@ -98,7 +98,7 @@ static bool UpdateRawInputDeviceFlags(HWND window, Uint32 last_flags, Uint32 new devices[count].usUsage = USB_USAGE_GENERIC_MOUSE; if (new_flags & ENABLE_RAW_MOUSE_INPUT) { - devices[count].dwFlags = 0; + devices[count].dwFlags = RIDEV_NOLEGACY; devices[count].hwndTarget = window; } else { devices[count].dwFlags = RIDEV_REMOVE;