SDL: Added RIDEV_NOLEGACY to improve performance in mouse relative mode (thanks @whrvt!)

From a45ef5dc6443e2ebcfc085b10b4ea4a3d145ea63 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 22 Jun 2026 20:33:27 -0700
Subject: [PATCH] Added RIDEV_NOLEGACY to improve performance in mouse relative
 mode (thanks @whrvt!)

This change also makes it so relative mode doesn't kick in until the mouse enters the window client area. This prevents relative mode from kicking in while clicking and dragging on the title bar, etc.
---
 src/events/SDL_mouse.c                  | 8 +++++++-
 src/video/SDL_video.c                   | 2 ++
 src/video/windows/SDL_windowsrawinput.c | 2 +-
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index db622399c17ad..62cfb362d6776 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 aed81189e3fc6..c99e45216a5cf 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 497e8007bc322..c5f193c73f465 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;