Implemented the should quit logic on Mac OS X. The actual new quitting logic isn't in yet; that will wait for tests.
This commit is contained in:
parent
c395cdd2fd
commit
8032c24f74
|
@ -22,6 +22,10 @@ static BOOL canQuit = NO;
|
||||||
|
|
||||||
if (!canQuit)
|
if (!canQuit)
|
||||||
complain("call to [NSApp terminate:] when not ready to terminate");
|
complain("call to [NSApp terminate:] when not ready to terminate");
|
||||||
|
|
||||||
|
// TODO move the body of uiQuit() here
|
||||||
|
// TODO make uiQuit() just call terminate:
|
||||||
|
// TODO update the above comment
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -38,8 +42,12 @@ static BOOL canQuit = NO;
|
||||||
{
|
{
|
||||||
// for debugging
|
// for debugging
|
||||||
NSLog(@"in applicationShouldTerminate:");
|
NSLog(@"in applicationShouldTerminate:");
|
||||||
canQuit = YES;
|
if (shouldQuit()) {
|
||||||
return NSTerminateNow;
|
canQuit = YES;
|
||||||
|
// this will call terminate:, which is the same as uiQuit()
|
||||||
|
return NSTerminateNow;
|
||||||
|
}
|
||||||
|
return NSTerminateCancel;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)app
|
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)app
|
||||||
|
|
|
@ -64,6 +64,12 @@ enum {
|
||||||
(*(item->onClicked))(uiMenuItem(item), windowFromNSWindow([NSApp keyWindow]), item->onClickedData);
|
(*(item->onClicked))(uiMenuItem(item), windowFromNSWindow([NSApp keyWindow]), item->onClickedData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (IBAction)onQuitClicked:(id)sender
|
||||||
|
{
|
||||||
|
if ([[NSApp delegate] applicationShouldTerminate:NSApp] == NSTerminateNow)
|
||||||
|
[NSApp terminate:self];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)register:(NSMenuItem *)item to:(struct menuItem *)smi
|
- (void)register:(NSMenuItem *)item to:(struct menuItem *)smi
|
||||||
{
|
{
|
||||||
NSValue *v;
|
NSValue *v;
|
||||||
|
@ -169,7 +175,7 @@ enum {
|
||||||
// and finally Quit
|
// and finally Quit
|
||||||
// DON'T use @selector(terminate:) as the action; we handle termination ourselves
|
// DON'T use @selector(terminate:) as the action; we handle termination ourselves
|
||||||
title = [@"Quit " stringByAppendingString:appName];
|
title = [@"Quit " stringByAppendingString:appName];
|
||||||
item = [[NSMenuItem alloc] initWithTitle:title action:@selector(onClicked:) keyEquivalent:@"q"];
|
item = [[NSMenuItem alloc] initWithTitle:title action:@selector(onQuitClicked:) keyEquivalent:@"q"];
|
||||||
[item setTarget:self];
|
[item setTarget:self];
|
||||||
[appMenu addItem:item];
|
[appMenu addItem:item];
|
||||||
self.quitItem = item;
|
self.quitItem = item;
|
||||||
|
@ -210,6 +216,8 @@ static void menuItemOnClicked(uiMenuItem *ii, void (*f)(uiMenuItem *, uiWindow *
|
||||||
{
|
{
|
||||||
struct menuItem *item = (struct menuItem *) ii;
|
struct menuItem *item = (struct menuItem *) ii;
|
||||||
|
|
||||||
|
if (item->type == typeQuit)
|
||||||
|
complain("attempt to call uiMenuItemOnClicked() on a Quit item; use uiOnShouldQuit() instead");
|
||||||
item->onClicked = f;
|
item->onClicked = f;
|
||||||
item->onClickedData = data;
|
item->onClickedData = data;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue