X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a1b806b98241ab649c169aaa1f134df85e80fb8b..71a09c3579dd5cb4cd8fa7fdc143561cbff74e12:/src/osx/carbon/menu.cpp diff --git a/src/osx/carbon/menu.cpp b/src/osx/carbon/menu.cpp index 5a9f62156f..06a703dfd4 100644 --- a/src/osx/carbon/menu.cpp +++ b/src/osx/carbon/menu.cpp @@ -4,7 +4,6 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -183,7 +182,8 @@ protected : class wxMenuCarbonImpl : public wxMenuImpl { public : - wxMenuCarbonImpl( wxMenu* peer , MenuRef menu) : wxMenuImpl(peer), m_osxMenu(menu) + wxMenuCarbonImpl( wxMenu* peer , MenuRef menu , MenuRef oldMenu , SInt16 menuId) + : wxMenuImpl(peer), m_osxMenu(menu), m_oldMenuRef(oldMenu), m_menuId(menuId) { } @@ -280,6 +280,8 @@ public : static wxMenuImpl* CreateRootMenu( wxMenu* peer ); protected : wxCFRef m_osxMenu; + MenuRef m_oldMenuRef; + SInt16 m_menuId; } ; // static const short kwxMacAppleMenuId = 1 ; @@ -325,21 +327,35 @@ void wxRemoveMacMenuAssociation(wxMenu *menu) wxMenuCarbonImpl::~wxMenuCarbonImpl() { wxRemoveMacMenuAssociation( GetWXPeer() ); + // restore previous menu + m_osxMenu.reset(); + if ( m_menuId > 0 ) + MacDeleteMenu(m_menuId); + if ( m_oldMenuRef ) + MacInsertMenu(m_oldMenuRef, -1); } wxMenuImpl* wxMenuImpl::Create( wxMenu* peer, const wxString& title ) { // create the menu static SInt16 s_macNextMenuId = 3; + SInt16 menuId = s_macNextMenuId++; + // save existing menu in case we're embedding into an application + // or sharing outside UI elements. + WXHMENU oldMenu = GetMenuHandle(menuId); + if ( oldMenu ) + MacDeleteMenu(menuId); WXHMENU menu = NULL; - CreateNewMenu( s_macNextMenuId++ , 0 , &menu ) ; + CreateNewMenu( menuId , 0 , &menu ) ; if ( !menu ) { wxLogLastError(wxT("CreateNewMenu failed")); + if ( oldMenu ) + MacInsertMenu(oldMenu, -1); return NULL; } - wxMenuImpl* c = new wxMenuCarbonImpl( peer, menu ); + wxMenuImpl* c = new wxMenuCarbonImpl( peer, menu, oldMenu, menuId ); c->SetTitle(title); wxAssociateMenuWithMacMenu( menu , peer ) ; return c;