A bunch of fixes for the new Spaces code.
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
diff --git a/src/video/cocoa/SDL_cocoawindow.h b/src/video/cocoa/SDL_cocoawindow.h
index 4f88ce1..a4ec07d 100644
--- a/src/video/cocoa/SDL_cocoawindow.h
+++ b/src/video/cocoa/SDL_cocoawindow.h
@@ -73,6 +73,7 @@ typedef enum
-(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;
diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m
index 5f28c19..c7d4f85 100644
--- a/src/video/cocoa/SDL_cocoawindow.m
+++ b/src/video/cocoa/SDL_cocoawindow.m
@@ -265,7 +265,7 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
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 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
[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 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
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 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
}
}
+-(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 @@ Cocoa_CreateWindow(_THIS, SDL_Window * window)
}
[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. */