From 1080dec04da7288aabd111d40cab9a8503e802d3 Mon Sep 17 00:00:00 2001 From: thefiddler Date: Thu, 11 Sep 2014 12:07:53 +0200 Subject: [PATCH] [Mac] Do not modify existing mainMenu If an application already has a custom main menu, avoid overwriting that in OpenTK. --- .../OpenTK/Platform/MacOS/Cocoa/NSApplication.cs | 31 +++++++++++----------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Source/OpenTK/Platform/MacOS/Cocoa/NSApplication.cs b/Source/OpenTK/Platform/MacOS/Cocoa/NSApplication.cs index 6011f05..475262b 100644 --- a/Source/OpenTK/Platform/MacOS/Cocoa/NSApplication.cs +++ b/Source/OpenTK/Platform/MacOS/Cocoa/NSApplication.cs @@ -39,7 +39,6 @@ namespace OpenTK.Platform.MacOS static class NSApplication { internal static IntPtr Handle; - internal static IntPtr AutoreleasePool; static readonly IntPtr selQuit = Selector.Get("quit"); @@ -52,9 +51,6 @@ namespace OpenTK.Platform.MacOS { Cocoa.Initialize(); - // Create the NSAutoreleasePool - AutoreleasePool = Cocoa.SendIntPtr(Cocoa.SendIntPtr(Class.NSAutoreleasePool, Selector.Alloc), Selector.Init); - // Register a Quit method to be called on cmd-q IntPtr nsapp = Class.Get("NSApplication"); Class.RegisterMethod(nsapp, OnQuitHandler, "quit", "v@:"); @@ -66,21 +62,24 @@ namespace OpenTK.Platform.MacOS Cocoa.SendBool(Handle, Selector.Get("setActivationPolicy:"), (int)NSApplicationActivationPolicy.Regular); Cocoa.SendVoid(Handle, Selector.Get("activateIgnoringOtherApps:"), true); - // Create the menu bar - var menubar = Cocoa.SendIntPtr(Class.Get("NSMenu"), Selector.Alloc); - var menuItem = Cocoa.SendIntPtr(Class.Get("NSMenuItem"), Selector.Alloc); + if (Cocoa.SendIntPtr(Handle, Selector.Get("mainMenu")) == IntPtr.Zero) + { + // Create the menu bar + var menubar = Cocoa.SendIntPtr(Class.Get("NSMenu"), Selector.Alloc); + var menuItem = Cocoa.SendIntPtr(Class.Get("NSMenuItem"), Selector.Alloc); - // Add menu item to bar, and bar to application - Cocoa.SendIntPtr(menubar, Selector.Get("addItem:"), menuItem); - Cocoa.SendIntPtr(Handle, Selector.Get("setMainMenu:"), menubar); + // Add menu item to bar, and bar to application + Cocoa.SendIntPtr(menubar, Selector.Get("addItem:"), menuItem); + Cocoa.SendIntPtr(Handle, Selector.Get("setMainMenu:"), menubar); - // Add a "Quit" menu item and bind the button. - var appMenu = Cocoa.SendIntPtr(Class.Get("NSMenu"), Selector.Alloc); - var quitMenuItem = Cocoa.SendIntPtr(Cocoa.SendIntPtr(Class.Get("NSMenuItem"), Selector.Alloc), - Selector.Get("initWithTitle:action:keyEquivalent:"), Cocoa.ToNSString("Quit"), selQuit, Cocoa.ToNSString("q")); + // Add a "Quit" menu item and bind the button. + var appMenu = Cocoa.SendIntPtr(Class.Get("NSMenu"), Selector.Alloc); + var quitMenuItem = Cocoa.SendIntPtr(Cocoa.SendIntPtr(Class.Get("NSMenuItem"), Selector.Alloc), + Selector.Get("initWithTitle:action:keyEquivalent:"), Cocoa.ToNSString("Quit"), selQuit, Cocoa.ToNSString("q")); - Cocoa.SendIntPtr(appMenu, Selector.Get("addItem:"), quitMenuItem); - Cocoa.SendIntPtr(menuItem, Selector.Get("setSubmenu:"), appMenu); + Cocoa.SendIntPtr(appMenu, Selector.Get("addItem:"), quitMenuItem); + Cocoa.SendIntPtr(menuItem, Selector.Get("setSubmenu:"), appMenu); + } // Tell cocoa we're ready to run the application (usually called by [NSApp run]). Cocoa.SendVoid(Handle, Selector.Get("finishLaunching")); -- 2.7.4