From 741ceceef9b70322990403d3f921613c8cdb142d Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Wed, 18 May 2022 10:09:24 -0700
Subject: [PATCH] Fixed warping back into the window when gaining focus with
warp relative mode enabled
---
src/events/SDL_mouse.c | 2 +-
src/events/SDL_mouse_c.h | 3 +++
src/video/SDL_video.c | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index e6ad53065cf..80da27aee8b 100644
--- a/src/events/SDL_mouse.c
+++ b/src/events/SDL_mouse.c
@@ -866,7 +866,7 @@ SDL_GetGlobalMouseState(int *x, int *y)
}
}
-static void
+void
SDL_PerformWarpMouseInWindow(SDL_Window *window, int x, int y, SDL_bool ignore_relative_mode)
{
SDL_Mouse *mouse = SDL_GetMouse();
diff --git a/src/events/SDL_mouse_c.h b/src/events/SDL_mouse_c.h
index f06934b6fcb..70c320851ba 100644
--- a/src/events/SDL_mouse_c.h
+++ b/src/events/SDL_mouse_c.h
@@ -152,6 +152,9 @@ extern int SDL_SendMouseButtonClicks(SDL_Window * window, SDL_MouseID mouseID, U
/* Send a mouse wheel event */
extern int SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, float x, float y, SDL_MouseWheelDirection direction);
+/* Warp the mouse within the window, potentially overriding relative mode */
+extern void SDL_PerformWarpMouseInWindow(SDL_Window *window, int x, int y, SDL_bool ignore_relative_mode);
+
/* Shutdown the mouse subsystem */
extern void SDL_MouseQuit(void);
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index cbe761656a2..24091d4f617 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -3032,7 +3032,7 @@ SDL_OnWindowFocusGained(SDL_Window * window)
if (mouse && mouse->relative_mode) {
SDL_SetMouseFocus(window);
if (mouse->relative_mode_warp) {
- SDL_WarpMouseInWindow(window, window->w/2, window->h/2);
+ SDL_PerformWarpMouseInWindow(window, window->w/2, window->h/2, SDL_TRUE);
}
}