diff --git a/gfx/drivers_context/cocoa_gl_ctx.m b/gfx/drivers_context/cocoa_gl_ctx.m index e67725f..868d874 100644 --- a/gfx/drivers_context/cocoa_gl_ctx.m +++ b/gfx/drivers_context/cocoa_gl_ctx.m @@ -83,6 +83,7 @@ static NSOpenGLPixelFormat* g_format; static unsigned g_minor = 0; static unsigned g_major = 0; +static bool g_is_inited = false; /* forward declaration */ void *nsview_get_ptr(void); @@ -152,6 +153,9 @@ static bool cocoagl_gfx_ctx_init(void *data) { (void)data; + if (g_is_inited) + return true; + #if defined(HAVE_COCOA) CocoaView *g_view = (CocoaView*)nsview_get_ptr(); #if MAC_OS_X_VERSION_10_7 @@ -196,6 +200,11 @@ static bool cocoagl_gfx_ctx_init(void *data) [g_context makeCurrentContext]; // Make sure the view was created [CocoaView get]; +#if defined(HAVE_COCOA) + [NSApp setDelegate:g_view]; +#endif + + g_is_inited = true; return true; } @@ -221,6 +230,8 @@ static void cocoagl_gfx_ctx_destroy(void *data) #endif [GLContextClass clearCurrentContext]; g_context = nil; + + g_is_inited = false; } static bool cocoagl_gfx_ctx_bind_api(void *data, enum gfx_ctx_api api, unsigned major, unsigned minor) diff --git a/pkg/apple/OSX/Info.plist b/pkg/apple/OSX/Info.plist index 8d59658..af95482 100644 --- a/pkg/apple/OSX/Info.plist +++ b/pkg/apple/OSX/Info.plist @@ -41,8 +41,6 @@ NSHumanReadableCopyright Copyright © 2015 RetroArch. All rights reserved. - NSMainNibFile - MainMenu NSPrincipalClass RApplication diff --git a/pkg/apple/RetroArch.xcodeproj/project.pbxproj b/pkg/apple/RetroArch.xcodeproj/project.pbxproj index a7c1b57..e48f0bf 100644 --- a/pkg/apple/RetroArch.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch.xcodeproj/project.pbxproj @@ -7,9 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 500845251B89300700CE6073 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; - 500845261B89300700CE6073 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 500845271B89300700CE6073 /* retroarch.icns in Resources */ = {isa = PBXBuildFile; fileRef = 84DD5EB71A89F1C7007336C1 /* retroarch.icns */; }; 500845291B89300700CE6073 /* griffin_objc.m in Sources */ = {isa = PBXBuildFile; fileRef = 509F0C9C1AA23AFC00619ECC /* griffin_objc.m */; }; 5008452A1B89300700CE6073 /* griffin.c in Sources */ = {isa = PBXBuildFile; fileRef = 840222FB1A889EE2009AB261 /* griffin.c */; }; @@ -75,7 +73,6 @@ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = OSX/en.lproj/InfoPlist.strings; sourceTree = ""; }; - 1DDD58150DA1D0A300B32029 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MainMenu.xib; path = OSX/en.lproj/MainMenu.xib; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 5008453A1B89300700CE6073 /* RetroArch copy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RetroArch copy.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 5008453B1B89300700CE6073 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info.plist"; path = "/../../pkg/apple/OSX/Info.plist"; sourceTree = SOURCE_ROOT; }; @@ -196,7 +193,6 @@ 84DD5EB71A89F1C7007336C1 /* retroarch.icns */, 8D1107310486CEB800E47090 /* Info.plist */, 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, - 1DDD58140DA1D0A300B32029 /* MainMenu.xib */, ); name = Resources; sourceTree = ""; @@ -301,7 +297,6 @@ buildActionMask = 2147483647; files = ( 500845251B89300700CE6073 /* InfoPlist.strings in Resources */, - 500845261B89300700CE6073 /* MainMenu.xib in Resources */, 500845271B89300700CE6073 /* retroarch.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -311,7 +306,6 @@ buildActionMask = 2147483647; files = ( 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, - 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */, 84DD5EB81A89F1C7007336C1 /* retroarch.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -348,14 +342,6 @@ name = InfoPlist.strings; sourceTree = ""; }; - 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - 1DDD58150DA1D0A300B32029 /* MainMenu.xib */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/ui/drivers/ui_cocoa.m b/ui/drivers/ui_cocoa.m index 5dde6f9..37cd066 100644 --- a/ui/drivers/ui_cocoa.m +++ b/ui/drivers/ui_cocoa.m @@ -421,10 +421,50 @@ extern void action_ok_push_quick_menu(void); @end +static void setup_appkit(void) +{ + [NSAutoreleasePool new]; + [NSApplication sharedApplication]; + + /* Might be Snow Leopard (10.6) only and up */ + [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; + + id menubar = [[NSMenu new] autorelease]; + id appMenuItem = [[NSMenuItem new] autorelease]; + + [menubar addItem:appMenuItem]; + [NSApp setMainMenu:menubar]; + + /* Add 'Quit' to menu */ + id appMenu = [[NSMenu new] autorelease]; + id appName = [[NSProcessInfo processInfo] processName]; + id quitTitle = BOXSTRING("Quit"); + id quitMenuItem = [[[NSMenuItem alloc] initWithTitle:quitTitle + action:@selector(terminate:) keyEquivalent:BOXSTRING("q")] autorelease]; + [appMenu addItem:quitMenuItem]; + [appMenuItem setSubmenu:appMenu]; + + /* Create a window and activate the application */ + id window = [[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 200, 200) styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO] autorelease]; + [window cascadeTopLeftFromPoint:NSMakePoint(20,20)]; + [window setTitle:appName]; + [window makeKeyAndOrderFront:nil]; + + cocoagl_gfx_ctx_init(NULL); + [window setContentView:(CocoaView*)nsview_get_ptr()]; + + /* Start the application */ + [NSApp activateIgnoringOtherApps:YES]; /* Brings application to front on startup */ + [NSApp run]; +} + int main(int argc, char *argv[]) { waiting_argc = argc; waiting_argv = argv; + + setup_appkit(); + return NSApplicationMain(argc, (const char **) argv); }