Skip to content

Commit

Permalink
cocoa: When exiting a fullscreen space, wait for window state to norm…
Browse files Browse the repository at this point in the history
…alize.

A good metric of this is when the titlebar's "minimize" button is reenabled,
which doesn't happen by the time windowDidExitFullscreen triggers.

This fixes minimizing a fullscreen window on macOS.

Fixes Bugzilla #4177.
  • Loading branch information
icculus committed Feb 21, 2020
1 parent 8d14636 commit 4d9e6e5
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/video/cocoa/SDL_cocoawindow.m
Expand Up @@ -794,6 +794,7 @@ - (void)windowDidExitFullScreen:(NSNotification *)aNotification
{
SDL_Window *window = _data->window;
NSWindow *nswindow = _data->nswindow;
NSButton *button = nil;

inFullscreenTransition = NO;

Expand Down Expand Up @@ -865,6 +866,22 @@ when returning to windowed mode from a space (instead of using a pending
Cocoa_ShowWindow(SDL_GetVideoDevice(), window);
}
}

/* There's some state that isn't quite back to normal when
windowDidExitFullScreen triggers. For example, the minimize button on
the titlebar doesn't actually enable for another 200 milliseconds or
so on this MacBook. Camp here and wait for that to happen before
going on, in case we're exiting fullscreen to minimize, which need
that window state to be normal before it will work. */
button = [nswindow standardWindowButton:NSWindowMiniaturizeButton];
if (button) {
int iterations = 0;
while (![button isEnabled]) {
SDL_Delay(10);
SDL_PumpEvents();
iterations++;
}
}
}

-(NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions
Expand Down Expand Up @@ -1724,6 +1741,7 @@ - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
NSWindow *nswindow = data->nswindow;

printf("Cocoa_MinimizeWindow begin %u\n", (unsigned int) SDL_GetTicks());
if ([data->listener isInFullscreenSpaceTransition]) {
[data->listener addPendingWindowOperation:PENDING_OPERATION_MINIMIZE];
} else {
Expand Down

0 comments on commit 4d9e6e5

Please sign in to comment.