|
@@ -189,9 +189,7 @@ GetWindowStyle(SDL_Window * window)
|
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
|
|
|
SDL_Window *window = _data->window;
|
|
|
NSWindow *nswindow = _data->nswindow;
|
|
|
- BOOL canSetSpace = NO;
|
|
|
|
|
|
- /* Make sure the window supports switching to fullscreen spaces */
|
|
|
if (![nswindow respondsToSelector: @selector(collectionBehavior)]) {
|
|
|
return NO;
|
|
|
}
|
|
@@ -199,22 +197,6 @@ GetWindowStyle(SDL_Window * window)
|
|
|
return NO;
|
|
|
}
|
|
|
|
|
|
- pendingWindowOperation = PENDING_OPERATION_NONE;
|
|
|
-
|
|
|
- /* We can enter fullscreen spaces for "fullscreen desktop" */
|
|
|
- if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
|
|
|
- canSetSpace = YES;
|
|
|
- }
|
|
|
-
|
|
|
- /* We can always leave fullscreen spaces */
|
|
|
- if (!state && isFullscreenSpace) {
|
|
|
- canSetSpace = YES;
|
|
|
- }
|
|
|
-
|
|
|
- if (!canSetSpace) {
|
|
|
- return NO;
|
|
|
- }
|
|
|
-
|
|
|
if (state == isFullscreenSpace) {
|
|
|
return YES;
|
|
|
}
|
|
@@ -227,6 +209,14 @@ GetWindowStyle(SDL_Window * window)
|
|
|
}
|
|
|
return YES;
|
|
|
}
|
|
|
+ inFullscreenTransition = YES;
|
|
|
+
|
|
|
+ /* Update the flags here so the state change is available immediately */
|
|
|
+ if (state) {
|
|
|
+ window->flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
|
|
|
+ } else {
|
|
|
+ window->flags &= ~SDL_WINDOW_FULLSCREEN_DESKTOP;
|
|
|
+ }
|
|
|
|
|
|
[nswindow performSelectorOnMainThread: @selector(toggleFullScreen:) withObject:nswindow waitUntilDone:NO];
|
|
|
return YES;
|
|
@@ -235,7 +225,12 @@ GetWindowStyle(SDL_Window * window)
|
|
|
#endif /* SDK >= 10.7 */
|
|
|
}
|
|
|
|
|
|
--(BOOL) isInFullscreenTransition
|
|
|
+-(BOOL) isInFullscreenSpace
|
|
|
+{
|
|
|
+ return isFullscreenSpace;
|
|
|
+}
|
|
|
+
|
|
|
+-(BOOL) isInFullscreenSpaceTransition
|
|
|
{
|
|
|
return inFullscreenTransition;
|
|
|
}
|
|
@@ -429,13 +424,8 @@ GetWindowStyle(SDL_Window * window)
|
|
|
SDL_Window *window = _data->window;
|
|
|
NSWindow *nswindow = _data->nswindow;
|
|
|
|
|
|
- if (!(window->flags & SDL_WINDOW_RESIZABLE)) {
|
|
|
- if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
|
|
|
- [nswindow setStyleMask:(NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask)];
|
|
|
- } else {
|
|
|
- [nswindow setStyleMask:NSBorderlessWindowMask];
|
|
|
- }
|
|
|
- }
|
|
|
+ window->flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
|
|
|
+ [nswindow setStyleMask:(NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask)];
|
|
|
|
|
|
isFullscreenSpace = YES;
|
|
|
inFullscreenTransition = YES;
|
|
@@ -444,7 +434,6 @@ GetWindowStyle(SDL_Window * window)
|
|
|
- (void)windowDidEnterFullScreen:(NSNotification *)aNotification
|
|
|
{
|
|
|
SDL_Window *window = _data->window;
|
|
|
- NSWindow *nswindow = _data->nswindow;
|
|
|
|
|
|
inFullscreenTransition = NO;
|
|
|
|
|
@@ -467,12 +456,8 @@ GetWindowStyle(SDL_Window * window)
|
|
|
SDL_Window *window = _data->window;
|
|
|
NSWindow *nswindow = _data->nswindow;
|
|
|
|
|
|
- if (!(window->flags & SDL_WINDOW_RESIZABLE)) {
|
|
|
- Uint32 flags = window->flags;
|
|
|
- window->flags &= ~SDL_WINDOW_FULLSCREEN_DESKTOP;
|
|
|
- [nswindow setStyleMask:GetWindowStyle(window)];
|
|
|
- window->flags = flags;
|
|
|
- }
|
|
|
+ window->flags &= ~SDL_WINDOW_FULLSCREEN_DESKTOP;
|
|
|
+ [nswindow setStyleMask:GetWindowStyle(window)];
|
|
|
|
|
|
isFullscreenSpace = NO;
|
|
|
inFullscreenTransition = YES;
|
|
@@ -925,7 +910,10 @@ Cocoa_CreateWindow(_THIS, SDL_Window * window)
|
|
|
[nswindow setBackgroundColor:[NSColor blackColor]];
|
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
|
|
|
if ([nswindow respondsToSelector:@selector(setCollectionBehavior:)]) {
|
|
|
- [nswindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
|
|
|
+ const char *hint = SDL_GetHint(SDL_HINT_VIDEO_FULLSCREEN_SPACES);
|
|
|
+ if (hint && SDL_atoi(hint) > 0) {
|
|
|
+ [nswindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
|
|
|
+ }
|
|
|
}
|
|
|
#endif
|
|
|
|
|
@@ -1139,7 +1127,7 @@ Cocoa_MinimizeWindow(_THIS, SDL_Window * window)
|
|
|
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
|
|
NSWindow *nswindow = data->nswindow;
|
|
|
|
|
|
- if ([data->listener isInFullscreenTransition]) {
|
|
|
+ if ([data->listener isInFullscreenSpaceTransition]) {
|
|
|
[data->listener addPendingWindowOperation:PENDING_OPERATION_MINIMIZE];
|
|
|
} else {
|
|
|
[nswindow miniaturize:nil];
|
|
@@ -1196,9 +1184,10 @@ Cocoa_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static void
|
|
|
-Cocoa_SetWindowFullscreen_OldStyle(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen)
|
|
|
+void
|
|
|
+Cocoa_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen)
|
|
|
{
|
|
|
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
|
|
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
|
|
NSWindow *nswindow = data->nswindow;
|
|
|
NSRect rect;
|
|
@@ -1272,17 +1261,6 @@ Cocoa_SetWindowFullscreen_OldStyle(_THIS, SDL_Window * window, SDL_VideoDisplay
|
|
|
}
|
|
|
|
|
|
ScheduleContextUpdates(data);
|
|
|
-}
|
|
|
-
|
|
|
-void
|
|
|
-Cocoa_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen)
|
|
|
-{
|
|
|
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
|
|
- SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
|
|
-
|
|
|
- if (![data->listener setFullscreenSpace:(fullscreen ? YES : NO)]) {
|
|
|
- Cocoa_SetWindowFullscreen_OldStyle(_this, window, display, fullscreen);
|
|
|
- }
|
|
|
|
|
|
[pool release];
|
|
|
}
|
|
@@ -1404,6 +1382,24 @@ Cocoa_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+SDL_bool
|
|
|
+Cocoa_SetWindowFullscreenSpace(SDL_Window * window, SDL_bool state)
|
|
|
+{
|
|
|
+ SDL_bool succeeded = SDL_FALSE;
|
|
|
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
|
|
|
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
|
|
+ SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
|
|
+
|
|
|
+ if ([data->listener setFullscreenSpace:(state ? YES : NO)]) {
|
|
|
+ succeeded = SDL_TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ [pool release];
|
|
|
+#endif /* SDK 10.7+ */
|
|
|
+
|
|
|
+ return succeeded;
|
|
|
+}
|
|
|
+
|
|
|
#endif /* SDL_VIDEO_DRIVER_COCOA */
|
|
|
|
|
|
/* vi: set ts=4 sw=4 expandtab: */
|