diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index b2521123f..258c67733 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -1288,13 +1288,23 @@ Cocoa_SetWindowSize(_THIS, SDL_Window * window) { SDL_WindowData *windata = (SDL_WindowData *) window->driverdata; NSWindow *nswindow = windata->nswindow; + NSRect rect; + Uint32 moveHack; - NSRect frame = [nswindow frame]; - frame.origin.y = (frame.origin.y + frame.size.height) - ((float) window->h); - frame.size.width = window->w; - frame.size.height = window->h; + /* Cocoa will resize the window from the bottom-left rather than the + * top-left when -[nswindow setContentSize:] is used, so we must set the + * entire frame based on the new size, in order to preserve the position. + */ + rect.origin.x = window->x; + rect.origin.y = window->y; + rect.size.width = window->w; + rect.size.height = window->h; + ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); - [nswindow setFrame:frame display:YES]; + moveHack = s_moveHack; + s_moveHack = 0; + [nswindow setFrame:[nswindow frameRectForContentRect:rect] display:YES]; + s_moveHack = moveHack; ScheduleContextUpdates(windata); }}