SDL_cocoamouse.m: SetRelativeMouseMode even if out of focus

Should fix #3087
This commit is contained in:
FriendlyAI 2022-01-06 23:42:44 -05:00 committed by Sam Lantinga
parent d7c07d6b09
commit e2d268a399
1 changed files with 16 additions and 10 deletions

View File

@ -259,7 +259,16 @@ Cocoa_WarpMouse(SDL_Window * window, int x, int y)
static int
Cocoa_SetRelativeMouseMode(SDL_bool enabled)
{
/* We will re-apply the relative mode when the window gets focus, if it
CGError result;
if (enabled) {
DLog("Turning on.");
result = CGAssociateMouseAndMouseCursorPosition(NO);
if (result != kCGErrorSuccess) {
return SDL_SetError("CGAssociateMouseAndMouseCursorPosition() failed");
}
}
/* We will re-apply the non-relative mode when the window gets focus, if it
* doesn't have focus right now.
*/
SDL_Window *window = SDL_GetKeyboardFocus();
@ -267,7 +276,7 @@ Cocoa_SetRelativeMouseMode(SDL_bool enabled)
return 0;
}
/* We will re-apply the relative mode when the window finishes being moved,
/* We will re-apply the non-relative mode when the window finishes being moved,
* if it is being moved right now.
*/
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
@ -275,17 +284,14 @@ Cocoa_SetRelativeMouseMode(SDL_bool enabled)
return 0;
}
CGError result;
if (enabled) {
DLog("Turning on.");
result = CGAssociateMouseAndMouseCursorPosition(NO);
} else {
if (!enabled) {
DLog("Turning off.");
result = CGAssociateMouseAndMouseCursorPosition(YES);
if (result != kCGErrorSuccess) {
return SDL_SetError("CGAssociateMouseAndMouseCursorPosition() failed");
}
}
if (result != kCGErrorSuccess) {
return SDL_SetError("CGAssociateMouseAndMouseCursorPosition() failed");
}
/* The hide/unhide calls are redundant most of the time, but they fix
* https://bugzilla.libsdl.org/show_bug.cgi?id=2550