From 441b8c7c735d1974e6dbf757f6a2965f2f645d68 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Fri, 15 Aug 2014 05:15:44 -0400 Subject: Implemented applicationShouldTerminate: and applicationShouldTerminateAfterLastWindowClosed: on Mac OS X. --- redo/uitask_darwin.m | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'redo/uitask_darwin.m') diff --git a/redo/uitask_darwin.m b/redo/uitask_darwin.m index 29c9475..e45e09c 100644 --- a/redo/uitask_darwin.m +++ b/redo/uitask_darwin.m @@ -47,6 +47,33 @@ static Class areaClass; @end @implementation appDelegateClass + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app +{ + NSArray *windows; + NSUInteger i, n; + + windows = [NSApp windows]; + n = [windows count]; + for (i = 0; i < n; i++) { + NSWindow *w; + + w = toNSWindow([windows objectAtIndex:i]); + if (![[w delegate] windowShouldClose:w]) + // stop at the first rejection; thanks Lyle42 in irc.freenode.net/#macdev + return NSTerminateCancel; + } + // all windows closed; stop gracefully for Go + uistop(); + // TODO can't use NSTerminateLater here as the run loop is different (???) + return NSTerminateCancel; +} + +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)app +{ + return NO; +} + @end appDelegateClass *appDelegate; -- cgit v1.2.3