X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7205570233ce8420b71fa5df368054c8953ff0e4..a7b04cfc5b3758a4bde0305afe0727a6d9b78b93:/src/mac/carbon/menu.cpp diff --git a/src/mac/carbon/menu.cpp b/src/mac/carbon/menu.cpp index 72be92772d..df302f9e69 100644 --- a/src/mac/carbon/menu.cpp +++ b/src/mac/carbon/menu.cpp @@ -42,7 +42,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler) // the (popup) menu title has this special id static const int idMenuTitle = -2; -static int formerHelpMenuItems = 0 ; +static MenuItemIndex firstUserHelpMenuItem = 0 ; const short kwxMacMenuBarResource = 1 ; const short kwxMacAppleMenuId = 1 ; @@ -453,7 +453,7 @@ bool wxMenu::MacMenuSelect( wxEvtHandler* handler, long when , int macMenuId, in #ifndef __DARWIN__ else if ( macMenuId == kHMHelpMenuID ) { - int menuItem = formerHelpMenuItems ; + int menuItem = firstUserHelpMenuItem-1 ; for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++) { wxMenuItem * pItem = (wxMenuItem *) node->Data() ; @@ -639,20 +639,13 @@ void wxMenuBar::MacInstallMenuBar() int pos ; wxMenu* menu = m_menus[i] , *subMenu = NULL ; -#if !TARGET_CARBON - /* the help menu does not exist in CARBON anymore */ if( m_titles[i] == "?" || m_titles[i] == "&?" || m_titles[i] == wxApp::s_macHelpMenuTitleName ) { MenuHandle mh = NULL ; - if ( HMGetHelpMenuHandle( &mh ) != noErr ) - { - continue ; - } - if ( formerHelpMenuItems == 0 ) - { - if( mh ) - formerHelpMenuItems = CountMenuItems( mh ) ; - } + if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) != noErr ) + { + continue ; + } for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) { @@ -667,7 +660,7 @@ void wxMenuBar::MacInstallMenuBar() if ( item->IsSeparator() ) { if ( mh ) - UMAAppendMenuItem(mh, "\p-" ); + MacAppendMenu(mh, "\p-" ); } else { @@ -695,50 +688,39 @@ void wxMenuBar::MacInstallMenuBar() } } } -#else - if( m_titles[i] == "?" || m_titles[i] == "&?" || m_titles[i] == wxApp::s_macHelpMenuTitleName ) - { - wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); - UMASetMenuTitle( menu->GetHMenu() , label ) ; - - for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) - { - item = (wxMenuItem *)node->Data(); - subMenu = item->GetSubMenu() ; - if (subMenu) - { - ::InsertMenu( subMenu->GetHMenu() , -1 ) ; - } - else - { - if ( item->GetId() == wxApp::s_macAboutMenuItemId ) - { - Str255 label ; - UInt8 modifiers ; - SInt16 key ; - wxMenuItem::MacBuildMenuString( label, &key , &modifiers , item->GetText(), item->GetId() != wxApp::s_macAboutMenuItemId); // no shortcut in about menu - ::SetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label ); - UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 ); - } - } - } - ::InsertMenu(m_menus[i]->GetHMenu(), 0); - } -#endif else { wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); UMASetMenuTitle( menu->GetHMenu() , label ) ; + wxArrayPtrVoid submenus ; + for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) { item = (wxMenuItem *)node->Data(); subMenu = item->GetSubMenu() ; if (subMenu) { - ::InsertMenu( subMenu->GetHMenu() , -1 ) ; + submenus.Add(subMenu) ; } } ::InsertMenu(m_menus[i]->GetHMenu(), 0); + for ( int i = 0 ; i < submenus.GetCount() ; ++i ) + { + wxMenu* submenu = (wxMenu*) submenus[i] ; + wxNode *subnode; + wxMenuItem *subitem; + int subpos ; + for ( subpos = 0 , subnode = submenu->GetMenuItems().First(); subnode; subnode = subnode->Next(), subpos++) + { + subitem = (wxMenuItem *)subnode->Data(); + wxMenu* itsSubMenu = subitem->GetSubMenu() ; + if (itsSubMenu) + { + submenus.Add(itsSubMenu) ; + } + } + ::InsertMenu( submenu->GetHMenu() , -1 ) ; + } } } ::DrawMenuBar() ;