add hacky support for failed fullscreen transitions. SDL doesn't have the concept of a fullscreen transition that failed. if the user is actively changing spaces while the app goes fullscreen, it fails to go fullscreen; now it will just try again instead of hanging around with the wrong window styles.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m
index 1ab5bac..3c552a9 100644
--- a/src/video/cocoa/SDL_cocoawindow.m
+++ b/src/video/cocoa/SDL_cocoawindow.m
@@ -282,6 +282,8 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
[center addObserver:self selector:@selector(windowDidEnterFullScreen:) name:NSWindowDidEnterFullScreenNotification object:window];
[center addObserver:self selector:@selector(windowWillExitFullScreen:) name:NSWindowWillExitFullScreenNotification object:window];
[center addObserver:self selector:@selector(windowDidExitFullScreen:) name:NSWindowDidExitFullScreenNotification object:window];
+ [center addObserver:self selector:@selector(windowDidFailToEnterFullScreen:) name:@"NSWindowDidFailToEnterFullScreenNotification" object:window];
+ [center addObserver:self selector:@selector(windowDidFailToExitFullScreen:) name:@"NSWindowDidFailToExitFullScreenNotification" object:window];
} else {
[window setDelegate:self];
}
@@ -413,6 +415,8 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
[center removeObserver:self name:NSWindowDidEnterFullScreenNotification object:window];
[center removeObserver:self name:NSWindowWillExitFullScreenNotification object:window];
[center removeObserver:self name:NSWindowDidExitFullScreenNotification object:window];
+ [center removeObserver:self name:@"NSWindowDidFailToEnterFullScreenNotification" object:window];
+ [center removeObserver:self name:@"NSWindowDidFailToExitFullScreenNotification" object:window];
} else {
[window setDelegate:nil];
}
@@ -634,6 +638,19 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
inFullscreenTransition = YES;
}
+- (void)windowDidFailToEnterFullScreen:(NSNotification *)aNotification
+{
+ SDL_Window *window = _data->window;
+
+ SetWindowStyle(window, GetWindowStyle(window));
+
+ isFullscreenSpace = NO;
+ inFullscreenTransition = NO;
+
+ /* Try again? Not sure what else to do, the application wants to be fullscreen. */
+ [self setFullscreenSpace:YES];
+}
+
- (void)windowDidEnterFullScreen:(NSNotification *)aNotification
{
SDL_Window *window = _data->window;
@@ -668,6 +685,19 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
inFullscreenTransition = YES;
}
+- (void)windowDidFailToExitFullScreen:(NSNotification *)aNotification
+{
+ SDL_Window *window = _data->window;
+
+ SetWindowStyle(window, (NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask));
+
+ isFullscreenSpace = YES;
+ inFullscreenTransition = NO;
+
+ /* Try again? Not sure what else to do, the application wants to be non-fullscreen. */
+ [self setFullscreenSpace:NO];
+}
+
- (void)windowDidExitFullScreen:(NSNotification *)aNotification
{
SDL_Window *window = _data->window;