diff --git a/src/posix/cocoa/i_main.mm b/src/posix/cocoa/i_main.mm index 97d53c97a5..d0108d2a76 100644 --- a/src/posix/cocoa/i_main.mm +++ b/src/posix/cocoa/i_main.mm @@ -140,25 +140,12 @@ void I_DetectOS() FArgs* Args; // command line arguments -int OriginalMainTry(int argc, char** argv) -{ - Args = new FArgs(argc, argv); - - NSString* exePath = [[NSBundle mainBundle] executablePath]; - progdir = [[exePath stringByDeletingLastPathComponent] UTF8String]; - progdir += "/"; - - auto ret = D_DoomMain(); - FConsoleWindow::DeleteInstance(); - return ret; -} - namespace { TArray s_argv; -int OriginalMain(int argc, char** argv) +int DoMain(int argc, char** argv) { printf(GAMENAME" %s - %s - Cocoa version\nCompiled on %s\n\n", GetVersionString(), GetGitTime(), __DATE__); @@ -178,7 +165,15 @@ int OriginalMain(int argc, char** argv) vid_defheight = static_cast(screenSize.height); vid_vsync = true; - return OriginalMainTry(argc, argv); + Args = new FArgs(argc, argv); + + NSString* exePath = [[NSBundle mainBundle] executablePath]; + progdir = [[exePath stringByDeletingLastPathComponent] UTF8String]; + progdir += "/"; + + auto ret = D_DoomMain(); + FConsoleWindow::DeleteInstance(); + return ret; } } // unnamed namespace @@ -203,6 +198,10 @@ int OriginalMain(int argc, char** argv) - (void)processEvents:(NSTimer*)timer; +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; + +- (void)sendExitEvent:(id)sender; + @end @@ -276,7 +275,7 @@ extern bool AppActive; argv[argc] = nullptr; - exit(OriginalMain(argc, &argv[0])); + exit(DoMain(argc, &argv[0])); } @@ -341,6 +340,17 @@ extern bool AppActive; [pool release]; } +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender +{ + [self sendExitEvent:sender]; + return NSTerminateLater; +} + +- (void)sendExitEvent:(id)sender +{ + throw CExitEvent(0); +} + @end @@ -370,7 +380,7 @@ NSMenuItem* CreateApplicationMenu() keyEquivalent:@""]; [menu addItem:[NSMenuItem separatorItem]]; [menu addItemWithTitle:[@"Quit " stringByAppendingString:@GAMENAME] - action:@selector(terminate:) + action:@selector(sendExitEvent:) keyEquivalent:@"q"]; NSMenuItem* menuItem = [NSMenuItem new]; diff --git a/src/posix/cocoa/i_video.mm b/src/posix/cocoa/i_video.mm index a2c4f3f858..4f31417f65 100644 --- a/src/posix/cocoa/i_video.mm +++ b/src/posix/cocoa/i_video.mm @@ -64,8 +64,8 @@ - (void)exitAppOnClose { NSButton* closeButton = [self standardWindowButton:NSWindowCloseButton]; - [closeButton setAction:@selector(terminate:)]; - [closeButton setTarget:NSApp]; + [closeButton setAction:@selector(sendExitEvent:)]; + [closeButton setTarget:NSApp.delegate]; } @end diff --git a/src/posix/cocoa/st_console.mm b/src/posix/cocoa/st_console.mm index 3369da0236..b6d4116f1d 100644 --- a/src/posix/cocoa/st_console.mm +++ b/src/posix/cocoa/st_console.mm @@ -172,7 +172,7 @@ void FConsoleWindow::ShowFatalError(const char* const message) [quitButton setTitle:@"Quit"]; [quitButton setKeyEquivalent:@"\r"]; [quitButton setTarget:NSApp]; - [quitButton setAction:@selector(terminate:)]; + [quitButton setAction:@selector(stopModal)]; NSView* quitPanel = [[NSView alloc] initWithFrame:NSMakeRect(0.0f, 0.0f, textViewWidth, 32.0f)]; [quitPanel setAutoresizingMask:NSViewWidthSizable]; @@ -461,8 +461,8 @@ void FConsoleWindow::NetInit(const char* const message, const int playerCount) [m_netAbortButton setBezelStyle:NSRoundedBezelStyle]; [m_netAbortButton setTitle:@"Cancel"]; [m_netAbortButton setKeyEquivalent:@"\r"]; - [m_netAbortButton setTarget:NSApp]; - [m_netAbortButton setAction:@selector(terminate:)]; + [m_netAbortButton setTarget:NSApp.delegate]; + [m_netAbortButton setAction:@selector(sendExitEvent:)]; // Panel for controls above m_netView = [[NSView alloc] initWithFrame:NSMakeRect(0.0f, 0.0f, 512.0f, NET_VIEW_HEIGHT)]; diff --git a/src/posix/osx/iwadpicker_cocoa.mm b/src/posix/osx/iwadpicker_cocoa.mm index 2e42b4c5ae..fd9c600146 100644 --- a/src/posix/osx/iwadpicker_cocoa.mm +++ b/src/posix/osx/iwadpicker_cocoa.mm @@ -40,6 +40,7 @@ #include "m_argv.h" #include "m_misc.h" #include "gameconfigfile.h" +#include "doomerrors.h" #include #include @@ -360,7 +361,7 @@ static NSArray* GetKnownExtensions() if ( @selector(terminate:) == [menuItem action] ) { - exit(0); + throw CExitEvent(0); } }