diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m index 0321c6c80..c148296a4 100644 --- a/src/video/cocoa/SDL_cocoamouse.m +++ b/src/video/cocoa/SDL_cocoamouse.m @@ -287,10 +287,16 @@ static void Cocoa_WarpMouse(SDL_Window * window, int x, int y) static int Cocoa_SetRelativeMouseMode(SDL_bool enabled) { + SDL_Window *window = SDL_GetKeyboardFocus(); CGError result; - SDL_Window *window; SDL_WindowData *data; if (enabled) { + if (window) { + /* make sure the mouse isn't at the corner of the window, as this can confuse things if macOS thinks a window resize is happening on the first click. */ + const CGPoint point = CGPointMake((float)(window->x + (window->w / 2)), (float)(window->y + (window->h / 2))); + Cocoa_HandleMouseWarp(point.x, point.y); + CGWarpMouseCursorPosition(point); + } DLog("Turning on."); result = CGAssociateMouseAndMouseCursorPosition(NO); } else { @@ -304,7 +310,6 @@ static int Cocoa_SetRelativeMouseMode(SDL_bool enabled) /* We will re-apply the non-relative mode when the window gets focus, if it * doesn't have focus right now. */ - window = SDL_GetKeyboardFocus(); if (!window) { return 0; }