id = wxMacCommandToId( command.commandID ) ;
// make sure it is one of our own menus, or of the 'synthetic' apple and help menus , otherwise don't touch
MenuItemIndex firstUserHelpMenuItem ;
- static MenuHandle mh = NULL ;
- if ( mh == NULL )
+ static MenuHandle helpMenuHandle = NULL ;
+ if ( helpMenuHandle == NULL )
{
- if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) != noErr )
- mh = NULL ;
+ if ( UMAGetHelpMenuDontCreate( &helpMenuHandle , &firstUserHelpMenuItem) != noErr )
+ helpMenuHandle = NULL ;
}
// is it part of the application or the Help menu, then look for the id directly
if ( ( GetMenuHandle( kwxMacAppleMenuId ) != NULL && command.menu.menuRef == GetMenuHandle( kwxMacAppleMenuId ) ) ||
- ( mh != NULL && command.menu.menuRef == mh ) )
+ ( helpMenuHandle != NULL && command.menu.menuRef == helpMenuHandle ) )
{
wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar() ;
if ( mbar )
CFSTR("About..."), 0, 0, 0);
MacInsertMenu( appleMenu , 0 ) ;
- // clean-up the help menu before adding new items
- static MenuHandle mh = NULL ;
+ // if we have a mac help menu, clean it up before adding new items
+ MenuHandle helpMenuHandle ;
+ MenuItemIndex firstUserHelpMenuItem ;
- if ( mh != NULL )
+ if ( UMAGetHelpMenuDontCreate( &helpMenuHandle , &firstUserHelpMenuItem) == noErr )
{
- MenuItemIndex firstUserHelpMenuItem ;
- if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) == noErr )
- {
- for ( int i = CountMenuItems( mh ) ; i >= firstUserHelpMenuItem ; --i )
- DeleteMenuItem( mh , i ) ;
- }
- else
- {
- mh = NULL ;
- }
+ for ( int i = CountMenuItems( helpMenuHandle ) ; i >= firstUserHelpMenuItem ; --i )
+ DeleteMenuItem( helpMenuHandle , i ) ;
+ }
+ else
+ {
+ helpMenuHandle = NULL ;
}
#if TARGET_CARBON
}
#endif
+ wxString strippedHelpMenuTitle = wxStripMenuCodes( wxApp::s_macHelpMenuTitleName ) ;
+ wxString strippedTranslatedHelpMenuTitle = wxStripMenuCodes( wxString( _("&Help") ) ) ;
wxMenuList::compatibility_iterator menuIter = m_menus.GetFirst();
for (size_t i = 0; i < m_menus.GetCount(); i++, menuIter = menuIter->GetNext())
{
wxMenuItemList::compatibility_iterator node;
wxMenuItem *item;
wxMenu* menu = menuIter->GetData() , *subMenu = NULL ;
+ wxString strippedMenuTitle = wxStripMenuCodes(m_titles[i]);
- if ( m_titles[i] == wxT("?") || m_titles[i] == wxT("&?") || m_titles[i] == wxApp::s_macHelpMenuTitleName )
+ if ( strippedMenuTitle == wxT("?") || strippedMenuTitle == strippedHelpMenuTitle || strippedMenuTitle == strippedTranslatedHelpMenuTitle )
{
for (node = menu->GetMenuItems().GetFirst(); node; node = node->GetNext())
{
{
if ( item->GetId() != wxApp::s_macAboutMenuItemId )
{
- if ( mh == NULL )
+ // we have found a user help menu and an item other than the about item,
+ // so we can create the mac help menu now, if we haven't created it yet
+ if ( helpMenuHandle == NULL )
{
- MenuItemIndex firstUserHelpMenuItem ;
- if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) != noErr )
+ if ( UMAGetHelpMenu( &helpMenuHandle , &firstUserHelpMenuItem) != noErr )
{
- mh = NULL ;
+ helpMenuHandle = NULL ;
break ;
}
}
if ( item->IsSeparator() )
{
- if ( mh )
- AppendMenuItemTextWithCFString( mh,
+ if ( helpMenuHandle )
+ AppendMenuItemTextWithCFString( helpMenuHandle,
CFSTR(""), kMenuItemAttrSeparator, 0,NULL);
}
else
}
else
{
- if ( mh )
+ if ( helpMenuHandle )
{
- UMAAppendMenuItem(mh, wxStripMenuCodes(item->GetText()) , wxFont::GetDefaultEncoding(), entry);
- SetMenuItemCommandID( mh , CountMenuItems(mh) , wxIdToMacCommand ( item->GetId() ) ) ;
- SetMenuItemRefCon( mh , CountMenuItems(mh) , (URefCon) item ) ;
+ UMAAppendMenuItem(helpMenuHandle, wxStripMenuCodes(item->GetText()) , wxFont::GetDefaultEncoding(), entry);
+ SetMenuItemCommandID( helpMenuHandle , CountMenuItems(helpMenuHandle) , wxIdToMacCommand ( item->GetId() ) ) ;
+ SetMenuItemRefCon( helpMenuHandle , CountMenuItems(helpMenuHandle) , (URefCon) item ) ;
}
}
static MenuItemIndex firstCustomItemIndex = 0 ;
#endif
-OSStatus UMAGetHelpMenu(
+static OSStatus UMAGetHelpMenu(
MenuRef * outHelpMenu,
- MenuItemIndex * outFirstCustomItemIndex)
+ MenuItemIndex * outFirstCustomItemIndex,
+ bool allowHelpMenuCreation);
+
+static OSStatus UMAGetHelpMenu(
+ MenuRef * outHelpMenu,
+ MenuItemIndex * outFirstCustomItemIndex,
+ bool allowHelpMenuCreation)
{
#if TARGET_CARBON
- return HMGetHelpMenu( outHelpMenu , outFirstCustomItemIndex ) ;
+ static bool s_createdHelpMenu = false ;
+ if ( !s_createdHelpMenu && !allowHelpMenuCreation )
+ {
+ return paramErr ;
+ }
+
+ OSStatus status = HMGetHelpMenu( outHelpMenu , outFirstCustomItemIndex ) ;
+ s_createdHelpMenu = ( status == noErr ) ;
+ return status ;
#else
+ wxUnusedVar( allowHelpMenuCreation ) ;
MenuRef helpMenuHandle ;
helpMenuStatus = HMGetHelpMenuHandle( &helpMenuHandle ) ;
#endif
}
+OSStatus UMAGetHelpMenu(
+ MenuRef * outHelpMenu,
+ MenuItemIndex * outFirstCustomItemIndex)
+{
+ return UMAGetHelpMenu( outHelpMenu , outFirstCustomItemIndex , true );
+}
+
+OSStatus UMAGetHelpMenuDontCreate(
+ MenuRef * outHelpMenu,
+ MenuItemIndex * outFirstCustomItemIndex)
+{
+ return UMAGetHelpMenu( outHelpMenu , outFirstCustomItemIndex , false );
+}
+
#ifndef __LP64__
wxMacPortStateHelper::wxMacPortStateHelper( GrafPtr newport )