Skip to content

Commit 05887f2

Browse files
committed
Return false from SDL_SetWindowRelativeMouseMode() if relative mode isn't available
Fixes #14388
1 parent eedc0b1 commit 05887f2

File tree

4 files changed

+22
-5
lines changed

4 files changed

+22
-5
lines changed

src/events/SDL_mouse.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1414,15 +1414,16 @@ bool SDL_GetRelativeMouseMode(void)
14141414
return mouse->relative_mode;
14151415
}
14161416

1417-
void SDL_UpdateRelativeMouseMode(void)
1417+
bool SDL_UpdateRelativeMouseMode(void)
14181418
{
14191419
SDL_Mouse *mouse = SDL_GetMouse();
14201420
SDL_Window *focus = SDL_GetKeyboardFocus();
14211421
bool relative_mode = (focus && (focus->flags & SDL_WINDOW_MOUSE_RELATIVE_MODE));
14221422

1423-
if (relative_mode != mouse->relative_mode) {
1424-
SDL_SetRelativeMouseMode(relative_mode);
1423+
if (relative_mode == mouse->relative_mode) {
1424+
return true;
14251425
}
1426+
return SDL_SetRelativeMouseMode(relative_mode);
14261427
}
14271428

14281429
bool SDL_UpdateMouseCapture(bool force_release)

src/events/SDL_mouse_c.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ extern void SDL_PerformWarpMouseInWindow(SDL_Window *window, float x, float y, b
225225
// Relative mouse mode
226226
extern bool SDL_SetRelativeMouseMode(bool enabled);
227227
extern bool SDL_GetRelativeMouseMode(void);
228-
extern void SDL_UpdateRelativeMouseMode(void);
228+
extern bool SDL_UpdateRelativeMouseMode(void);
229229
extern void SDL_DisableMouseWarpEmulation(void);
230230

231231
// TODO RECONNECT: Set mouse state to "zero"

src/video/SDL_video.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4094,8 +4094,15 @@ bool SDL_SetWindowRelativeMouseMode(SDL_Window *window, bool enabled)
40944094
} else {
40954095
window->flags &= ~SDL_WINDOW_MOUSE_RELATIVE_MODE;
40964096
}
4097-
SDL_UpdateRelativeMouseMode();
40984097

4098+
if (!SDL_UpdateRelativeMouseMode()) {
4099+
if (enabled) {
4100+
window->flags &= ~SDL_WINDOW_MOUSE_RELATIVE_MODE;
4101+
} else {
4102+
window->flags |= SDL_WINDOW_MOUSE_RELATIVE_MODE;
4103+
}
4104+
return false;
4105+
}
40994106
return true;
41004107
}
41014108

src/video/dummy/SDL_nullvideo.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ VideoBootStrap DUMMY_evdev_bootstrap = {
149149
false
150150
};
151151

152+
#else
153+
154+
static bool DUMMY_SetRelativeMouseMode(bool enabled)
155+
{
156+
return true;
157+
}
158+
152159
#endif // SDL_INPUT_LINUXEV
153160

154161
bool DUMMY_VideoInit(SDL_VideoDevice *_this)
@@ -166,6 +173,8 @@ bool DUMMY_VideoInit(SDL_VideoDevice *_this)
166173

167174
#ifdef SDL_INPUT_LINUXEV
168175
SDL_EVDEV_Init();
176+
#else
177+
SDL_GetMouse()->SetRelativeMouseMode = DUMMY_SetRelativeMouseMode;
169178
#endif
170179

171180
// We're done!

0 commit comments

Comments
 (0)