summaryrefslogtreecommitdiff
path: root/redo/uitask_darwin.m
diff options
context:
space:
mode:
Diffstat (limited to 'redo/uitask_darwin.m')
-rw-r--r--redo/uitask_darwin.m27
1 files changed, 27 insertions, 0 deletions
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;