A bunch of fixes for the new Spaces code.
authorRyan C. Gordon <icculus@icculus.org>
Sun, 02 Mar 2014 16:36:40 -0500
changeset 8291 36f8cf82d308
parent 8290 b64c52d62264
child 8292 2b0736ab4d5f
A bunch of fixes for the new Spaces code.
src/video/cocoa/SDL_cocoawindow.h
src/video/cocoa/SDL_cocoawindow.m
--- a/src/video/cocoa/SDL_cocoawindow.h	Sun Mar 02 13:06:51 2014 -0800
+++ b/src/video/cocoa/SDL_cocoawindow.h	Sun Mar 02 16:36:40 2014 -0500
@@ -73,6 +73,7 @@
 -(void) windowDidEnterFullScreen:(NSNotification *) aNotification;
 -(void) windowWillExitFullScreen:(NSNotification *) aNotification;
 -(void) windowDidExitFullScreen:(NSNotification *) aNotification;
+-(NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions;
 
 /* Window event handling */
 -(void) mouseDown:(NSEvent *) theEvent;
--- a/src/video/cocoa/SDL_cocoawindow.m	Sun Mar 02 13:06:51 2014 -0800
+++ b/src/video/cocoa/SDL_cocoawindow.m	Sun Mar 02 16:36:40 2014 -0500
@@ -265,7 +265,7 @@
 
     if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) {
         return NO;  /* we only allow this on FULLSCREEN_DESKTOP windows. */
-    } else if (![nswindow respondsToSelector: @selector(setCollectionBehavior:)]) {
+    } else if (![nswindow respondsToSelector: @selector(toggleFullScreen:)]) {
         return NO;  /* No Spaces support? Older Mac OS X? */
     } else if (state == isFullscreenSpace) {
         return YES;  /* already there. */
@@ -558,8 +558,6 @@
         [self setFullscreenSpace:NO];
     } else {
         if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
-            /* Remove the fullscreen toggle button and menu now that we're here. */
-            [nswindow setCollectionBehavior:NSWindowCollectionBehaviorManaged];
             [NSMenu setMenuBarVisible:NO];
         }
 
@@ -597,11 +595,14 @@
         pendingWindowOperation = PENDING_OPERATION_NONE;
         [nswindow miniaturize:nil];
     } else {
-        if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
-            /* Remove the fullscreen toggle button and readd menu now that we're here. */
+        /* Adjust the fullscreen toggle button and readd menu now that we're here. */
+        if (window->flags & SDL_WINDOW_RESIZABLE) {
+            /* resizable windows are Spaces-friendly: they get the "go fullscreen" toggle button on their titlebar. */
+            [nswindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
+        } else {
             [nswindow setCollectionBehavior:NSWindowCollectionBehaviorManaged];
-            [NSMenu setMenuBarVisible:YES];
         }
+        [NSMenu setMenuBarVisible:YES];
 
         pendingWindowOperation = PENDING_OPERATION_NONE;
         /* Force the size change event in case it was delivered earlier
@@ -613,6 +614,16 @@
     }
 }
 
+-(NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions
+{
+    if ((_data->window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
+        return NSApplicationPresentationFullScreen | NSApplicationPresentationHideDock | NSApplicationPresentationHideMenuBar;
+    } else {
+        return proposedOptions;
+    }
+}
+
+
 /* We'll respond to key events by doing nothing so we don't beep.
  * We could handle key messages here, but we lose some in the NSApp dispatch,
  * where they get converted to action messages, etc.
@@ -1021,7 +1032,7 @@
     }
     [nswindow setBackgroundColor:[NSColor blackColor]];
 
-    if ([nswindow respondsToSelector: @selector(setCollectionBehavior:)]) {
+    if ([nswindow respondsToSelector: @selector(toggleFullScreen:)]) {
         /* we put FULLSCREEN_DESKTOP windows in their own Space, without a toggle button or menubar, later */
         if (window->flags & SDL_WINDOW_RESIZABLE) {
             /* resizable windows are Spaces-friendly: they get the "go fullscreen" toggle button on their titlebar. */