Skip to content

Commit

Permalink
Fixed bug 2347 - On OSX, an SDL app prevents system shutdown.
Browse files Browse the repository at this point in the history
Tim McDaniel

On OSX, an SDL app forces a system shutdown to be cancelled.  This happens because [SDLAppDelegate applicationShouldTerminate] returns NSTerminateCancel.  A better approach is to subclass NSApplication and override terminate to do nothing except call SDL_SendQuit.  In response to a system shutdown notification, this allows the normal SDL Quit event processing to occur, and if the app then terminates, system shutdown occurs normally.  Please see the attached patch, based on SDL 2.0.1.
  • Loading branch information
slouken committed Feb 23, 2014
1 parent b80f4f9 commit 6bb2f2e
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions src/video/cocoa/SDL_cocoaevents.m
Expand Up @@ -36,6 +36,22 @@
#define UsrActivity 1
#endif

@interface SDLApplication : NSApplication

- (void)terminate:(id)sender;

@end

@implementation SDLApplication

// Override terminate to handle Quit and System Shutdown smoothly.
- (void)terminate:(id)sender
{
SDL_SendQuit();
}

@end // SDLApplication

/* setAppleMenu disappeared from the headers in 10.4 */
@interface NSApplication(NSAppleMenu)
- (void)setAppleMenu:(NSMenu *)menu;
Expand Down Expand Up @@ -71,12 +87,6 @@ - (void)dealloc
[super dealloc];
}

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
SDL_SendQuit();
return NSTerminateCancel;
}

- (void)focusSomeWindow:(NSNotification *)aNotification
{
/* HACK: Ignore the first call. The application gets a
Expand Down Expand Up @@ -255,7 +265,7 @@ - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filenam

pool = [[NSAutoreleasePool alloc] init];
if (NSApp == nil) {
[NSApplication sharedApplication];
[SDLApplication sharedApplication];

if ([NSApp mainMenu] == nil) {
CreateApplicationMenus();
Expand Down

0 comments on commit 6bb2f2e

Please sign in to comment.