mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-11-13 05:48:40 +00:00
Return false from SDL_SetWindowRelativeMouseMode() if relative mode isn't available
Fixes https://github.com/libsdl-org/SDL/issues/14388
This commit is contained in:
@@ -1414,15 +1414,16 @@ bool SDL_GetRelativeMouseMode(void)
|
|||||||
return mouse->relative_mode;
|
return mouse->relative_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDL_UpdateRelativeMouseMode(void)
|
bool SDL_UpdateRelativeMouseMode(void)
|
||||||
{
|
{
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
SDL_Window *focus = SDL_GetKeyboardFocus();
|
SDL_Window *focus = SDL_GetKeyboardFocus();
|
||||||
bool relative_mode = (focus && (focus->flags & SDL_WINDOW_MOUSE_RELATIVE_MODE));
|
bool relative_mode = (focus && (focus->flags & SDL_WINDOW_MOUSE_RELATIVE_MODE));
|
||||||
|
|
||||||
if (relative_mode != mouse->relative_mode) {
|
if (relative_mode == mouse->relative_mode) {
|
||||||
SDL_SetRelativeMouseMode(relative_mode);
|
return true;
|
||||||
}
|
}
|
||||||
|
return SDL_SetRelativeMouseMode(relative_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SDL_UpdateMouseCapture(bool force_release)
|
bool SDL_UpdateMouseCapture(bool force_release)
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ extern void SDL_PerformWarpMouseInWindow(SDL_Window *window, float x, float y, b
|
|||||||
// Relative mouse mode
|
// Relative mouse mode
|
||||||
extern bool SDL_SetRelativeMouseMode(bool enabled);
|
extern bool SDL_SetRelativeMouseMode(bool enabled);
|
||||||
extern bool SDL_GetRelativeMouseMode(void);
|
extern bool SDL_GetRelativeMouseMode(void);
|
||||||
extern void SDL_UpdateRelativeMouseMode(void);
|
extern bool SDL_UpdateRelativeMouseMode(void);
|
||||||
extern void SDL_DisableMouseWarpEmulation(void);
|
extern void SDL_DisableMouseWarpEmulation(void);
|
||||||
|
|
||||||
// TODO RECONNECT: Set mouse state to "zero"
|
// TODO RECONNECT: Set mouse state to "zero"
|
||||||
|
|||||||
@@ -4094,8 +4094,15 @@ bool SDL_SetWindowRelativeMouseMode(SDL_Window *window, bool enabled)
|
|||||||
} else {
|
} else {
|
||||||
window->flags &= ~SDL_WINDOW_MOUSE_RELATIVE_MODE;
|
window->flags &= ~SDL_WINDOW_MOUSE_RELATIVE_MODE;
|
||||||
}
|
}
|
||||||
SDL_UpdateRelativeMouseMode();
|
|
||||||
|
|
||||||
|
if (!SDL_UpdateRelativeMouseMode()) {
|
||||||
|
if (enabled) {
|
||||||
|
window->flags &= ~SDL_WINDOW_MOUSE_RELATIVE_MODE;
|
||||||
|
} else {
|
||||||
|
window->flags |= SDL_WINDOW_MOUSE_RELATIVE_MODE;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -149,6 +149,13 @@ VideoBootStrap DUMMY_evdev_bootstrap = {
|
|||||||
false
|
false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static bool DUMMY_SetRelativeMouseMode(bool enabled)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // SDL_INPUT_LINUXEV
|
#endif // SDL_INPUT_LINUXEV
|
||||||
|
|
||||||
bool DUMMY_VideoInit(SDL_VideoDevice *_this)
|
bool DUMMY_VideoInit(SDL_VideoDevice *_this)
|
||||||
@@ -166,6 +173,8 @@ bool DUMMY_VideoInit(SDL_VideoDevice *_this)
|
|||||||
|
|
||||||
#ifdef SDL_INPUT_LINUXEV
|
#ifdef SDL_INPUT_LINUXEV
|
||||||
SDL_EVDEV_Init();
|
SDL_EVDEV_Init();
|
||||||
|
#else
|
||||||
|
SDL_GetMouse()->SetRelativeMouseMode = DUMMY_SetRelativeMouseMode;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// We're done!
|
// We're done!
|
||||||
|
|||||||
Reference in New Issue
Block a user