summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redo/future2
-rw-r--r--redo/uitask_darwin.m27
2 files changed, 27 insertions, 2 deletions
diff --git a/redo/future b/redo/future
index e3189a9..6b1680c 100644
--- a/redo/future
+++ b/redo/future
@@ -61,8 +61,6 @@ windows
- tab order is backwards
- flicker ahoy
- not all controls are transparent
-mac os x
- - applicationShouldTerminate: not handled
gtk+
- Area: default buttons, escape
all
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;