|
@@ -905,6 +905,11 @@ static NSCursor *Cocoa_GetDesiredCursor(void)
|
|
|
pendingWindowOperation &= ~operation;
|
|
|
}
|
|
|
|
|
|
+- (void)clearAllPendingWindowOperations
|
|
|
+{
|
|
|
+ pendingWindowOperation = PENDING_OPERATION_NONE;
|
|
|
+}
|
|
|
+
|
|
|
- (void)addPendingWindowOperation:(PendingWindowOperation)operation
|
|
|
{
|
|
|
pendingWindowOperation |= operation;
|
|
@@ -1352,21 +1357,14 @@ static NSCursor *Cocoa_GetDesiredCursor(void)
|
|
|
inFullscreenTransition = YES;
|
|
|
}
|
|
|
|
|
|
+/* This is usually sent after an unexpected windowDidExitFullscreen if the window
|
|
|
+ * failed to become fullscreen.
|
|
|
+ *
|
|
|
+ * Since something went wrong and the current state is unknown, dump any pending events.
|
|
|
+ */
|
|
|
- (void)windowDidFailToEnterFullScreen:(NSNotification *)aNotification
|
|
|
{
|
|
|
- SDL_Window *window = _data.window;
|
|
|
-
|
|
|
- if (window->is_destroying) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- SetWindowStyle(window, GetWindowStyle(window));
|
|
|
-
|
|
|
- [self clearPendingWindowOperation:PENDING_OPERATION_ENTER_FULLSCREEN];
|
|
|
- isFullscreenSpace = NO;
|
|
|
- inFullscreenTransition = NO;
|
|
|
-
|
|
|
- [self windowDidExitFullScreen:nil];
|
|
|
+ [self clearAllPendingWindowOperations];
|
|
|
}
|
|
|
|
|
|
- (void)windowDidEnterFullScreen:(NSNotification *)aNotification
|
|
@@ -1374,6 +1372,7 @@ static NSCursor *Cocoa_GetDesiredCursor(void)
|
|
|
SDL_Window *window = _data.window;
|
|
|
|
|
|
inFullscreenTransition = NO;
|
|
|
+ isFullscreenSpace = YES;
|
|
|
[self clearPendingWindowOperation:PENDING_OPERATION_ENTER_FULLSCREEN];
|
|
|
|
|
|
if ([self windowOperationIsPending:PENDING_OPERATION_LEAVE_FULLSCREEN]) {
|
|
@@ -1424,26 +1423,14 @@ static NSCursor *Cocoa_GetDesiredCursor(void)
|
|
|
inFullscreenTransition = YES;
|
|
|
}
|
|
|
|
|
|
+/* This may be sent before windowDidExitFullscreen to signal that the window was
|
|
|
+ * dumped out of fullscreen with no animation.
|
|
|
+ *
|
|
|
+ * Since something went wrong and the state is unknown, dump any pending events.
|
|
|
+ */
|
|
|
- (void)windowDidFailToExitFullScreen:(NSNotification *)aNotification
|
|
|
{
|
|
|
- SDL_Window *window = _data.window;
|
|
|
- const NSUInteger flags = NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable;
|
|
|
-
|
|
|
- if (window->is_destroying) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- _data.pending_position = NO;
|
|
|
- _data.pending_size = NO;
|
|
|
- window->last_position_pending = false;
|
|
|
- window->last_size_pending = false;
|
|
|
-
|
|
|
- SetWindowStyle(window, flags);
|
|
|
-
|
|
|
- isFullscreenSpace = YES;
|
|
|
- inFullscreenTransition = NO;
|
|
|
-
|
|
|
- [self windowDidEnterFullScreen:nil];
|
|
|
+ [self clearAllPendingWindowOperations];
|
|
|
}
|
|
|
|
|
|
- (void)windowDidExitFullScreen:(NSNotification *)aNotification
|
|
@@ -1452,16 +1439,24 @@ static NSCursor *Cocoa_GetDesiredCursor(void)
|
|
|
NSWindow *nswindow = _data.nswindow;
|
|
|
|
|
|
inFullscreenTransition = NO;
|
|
|
+ isFullscreenSpace = NO;
|
|
|
_data.fullscreen_space_requested = NO;
|
|
|
|
|
|
/* As of macOS 10.15, the window decorations can go missing sometimes after
|
|
|
- certain fullscreen-desktop->exlusive-fullscreen->windowed mode flows
|
|
|
+ certain fullscreen-desktop->exclusive-fullscreen->windowed mode flows
|
|
|
sometimes. Making sure the style mask always uses the windowed mode style
|
|
|
when returning to windowed mode from a space (instead of using a pending
|
|
|
fullscreen mode style mask) seems to work around that issue.
|
|
|
*/
|
|
|
SetWindowStyle(window, GetWindowWindowedStyle(window));
|
|
|
|
|
|
+ /* This can happen if the window failed to enter fullscreen, as this
|
|
|
+ * may be called *before* windowDidFailToEnterFullScreen in that case.
|
|
|
+ */
|
|
|
+ if (!(window->flags & SDL_WINDOW_FULLSCREEN)) {
|
|
|
+ [self clearAllPendingWindowOperations];
|
|
|
+ }
|
|
|
+
|
|
|
/* Don't recurse back into UpdateFullscreenMode() if this was hit in
|
|
|
* a blocking transition, as the caller is already waiting in
|
|
|
* UpdateFullscreenMode().
|