Skip to content

Commit

Permalink
A bunch of fixes for the new Spaces code.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Mar 2, 2014
1 parent da32423 commit 460f97f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 7 deletions.
1 change: 1 addition & 0 deletions src/video/cocoa/SDL_cocoawindow.h
Expand Up @@ -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;
Expand Down
25 changes: 18 additions & 7 deletions src/video/cocoa/SDL_cocoawindow.m
Expand Up @@ -265,7 +265,7 @@ -(BOOL) setFullscreenSpace:(BOOL) state

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. */
Expand Down Expand Up @@ -558,8 +558,6 @@ - (void)windowDidEnterFullScreen:(NSNotification *)aNotification
[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];
}

Expand Down Expand Up @@ -597,11 +595,14 @@ - (void)windowDidExitFullScreen:(NSNotification *)aNotification
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
Expand All @@ -613,6 +614,16 @@ - (void)windowDidExitFullScreen:(NSNotification *)aNotification
}
}

-(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.
Expand Down Expand Up @@ -1021,7 +1032,7 @@ - (void)resetCursorRects
}
[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. */
Expand Down

0 comments on commit 460f97f

Please sign in to comment.