diff --git a/panda/src/cocoadisplay/cocoaGraphicsWindow.mm b/panda/src/cocoadisplay/cocoaGraphicsWindow.mm index 4984c27062..0d21a352bf 100644 --- a/panda/src/cocoadisplay/cocoaGraphicsWindow.mm +++ b/panda/src/cocoadisplay/cocoaGraphicsWindow.mm @@ -30,6 +30,7 @@ #import "cocoaPandaView.h" #import "cocoaPandaWindow.h" +#import "cocoaPandaAppDelegate.h" #import #import @@ -71,11 +72,31 @@ CocoaGraphicsWindow(GraphicsEngine *engine, GraphicsPipe *pipe, if (NSApp == nil) { [CocoaPandaApp sharedApplication]; + CocoaPandaAppDelegate *delegate = [[CocoaPandaAppDelegate alloc] init]; + [NSApp setDelegate:delegate]; + #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; #endif + NSMenu *mainMenu = [[NSMenu alloc] init]; + + NSMenuItem *applicationMenuItem = [[NSMenuItem alloc] init]; + [mainMenu addItem:applicationMenuItem]; + + NSMenu *applicationMenu = [[NSMenu alloc] init]; + + NSMenuItem *item = [[NSMenuItem alloc] init]; + item.action = @selector(terminate:); + item.keyEquivalent = @"q"; + + NSString *appName = [NSRunningApplication currentApplication].localizedName; + item.title = [NSString stringWithFormat:@"Quit %@", appName]; + + [applicationMenu addItem:item]; + + [mainMenu setSubmenu:applicationMenu forItem:applicationMenuItem]; + [NSApp setMainMenu:mainMenu]; [NSApp finishLaunching]; - [NSApp activateIgnoringOtherApps:YES]; } GraphicsWindowInputDevice device = diff --git a/panda/src/cocoadisplay/cocoaPandaAppDelegate.h b/panda/src/cocoadisplay/cocoaPandaAppDelegate.h new file mode 100644 index 0000000000..b4af5deb55 --- /dev/null +++ b/panda/src/cocoadisplay/cocoaPandaAppDelegate.h @@ -0,0 +1,22 @@ +/** + * PANDA 3D SOFTWARE + * Copyright (c) Carnegie Mellon University. All rights reserved. + * + * All use of this software is subject to the terms of the revised BSD + * license. You should have received a copy of this license along + * with this source code in a file named "LICENSE." + * + * @file cocoaPandaAppDelegate.h + * @author Donny Lawrence + * @date 2018-02-25 + */ + +#import +#import + +// Cocoa is picky about where and when certain methods are called in the initialization process. +@interface CocoaPandaAppDelegate : NSObject + +- (void)applicationDidFinishLaunching:(NSNotification *)notification; + +@end diff --git a/panda/src/cocoadisplay/cocoaPandaAppDelegate.mm b/panda/src/cocoadisplay/cocoaPandaAppDelegate.mm new file mode 100644 index 0000000000..dbb5452c75 --- /dev/null +++ b/panda/src/cocoadisplay/cocoaPandaAppDelegate.mm @@ -0,0 +1,23 @@ +/** +* PANDA 3D SOFTWARE +* Copyright (c) Carnegie Mellon University. All rights reserved. +* +* All use of this software is subject to the terms of the revised BSD +* license. You should have received a copy of this license along +* with this source code in a file named "LICENSE." +* +* @file cocoaPandaAppDelegate.mm +* @author Donny Lawrence +* @date 2018-02-25 +*/ + +#import "cocoaPandaAppDelegate.h" + +@implementation CocoaPandaAppDelegate + +- (void)applicationDidFinishLaunching:(NSNotification *)notification { + // This only seems to work when called here. + [NSApp activateIgnoringOtherApps:YES]; +} + +@end diff --git a/panda/src/cocoadisplay/p3cocoadisplay_composite1.mm b/panda/src/cocoadisplay/p3cocoadisplay_composite1.mm index e85d1e08eb..335443fab1 100644 --- a/panda/src/cocoadisplay/p3cocoadisplay_composite1.mm +++ b/panda/src/cocoadisplay/p3cocoadisplay_composite1.mm @@ -7,3 +7,4 @@ #include "cocoaPandaView.mm" #include "cocoaPandaWindow.mm" #include "cocoaPandaWindowDelegate.mm" +#include "cocoaPandaAppDelegate.mm"