git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44798
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- Added support for colour cursors (Pascal Monasse).
- Setting foreground colour of single line wxTextCtrl now works
- Added support for colour cursors (Pascal Monasse).
- Setting foreground colour of single line wxTextCtrl now works
+wxMac:
+
+- Fix duplicate (empty) help menu in non-English programs (Andreas Jacobs)
+
wxMSW:
- Fixed infinite loop in wxThread::Wait() in console applications.
wxMSW:
- Fixed infinite loop in wxThread::Wait() in console applications.
void UMAHighlightAndActivateWindow( WindowRef inWindowRef , bool inActivate ) ;
void UMAHighlightAndActivateWindow( WindowRef inWindowRef , bool inActivate ) ;
+// Retrieves the Help menu handle. Warning: As a side-effect this functions also
+// creates the Help menu if it didn't exist yet.
OSStatus UMAGetHelpMenu(
MenuRef * outHelpMenu,
MenuItemIndex * outFirstCustomItemIndex); /* can be NULL */
OSStatus UMAGetHelpMenu(
MenuRef * outHelpMenu,
MenuItemIndex * outFirstCustomItemIndex); /* can be NULL */
+// Same as UMAGetHelpMenu, but doesn't create the Help menu if UMAGetHelpMenu hasn't been called yet.
+OSStatus UMAGetHelpMenuDontCreate(
+ MenuRef * outHelpMenu,
+ MenuItemIndex * outFirstCustomItemIndex); /* can be NULL */
+
// Appearance Drawing
OSStatus UMADrawThemePlacard( const Rect *inRect , ThemeDrawState inState ) ;
// Appearance Drawing
OSStatus UMADrawThemePlacard( const Rect *inRect , ThemeDrawState inState ) ;
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 ;
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 ) ) ||
}
// 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 )
{
wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar() ;
if ( mbar )
CFSTR("About..."), 0, 0, 0);
MacInsertMenu( appleMenu , 0 ) ;
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 ( 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 ;
+ 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 ;
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())
{
{
for (node = menu->GetMenuItems().GetFirst(); node; node = node->GetNext())
{
{
if ( item->GetId() != wxApp::s_macAboutMenuItemId )
{
{
if ( item->GetId() != wxApp::s_macAboutMenuItemId )
{
+ // 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 )
+ helpMenuHandle = NULL ;
if ( item->IsSeparator() )
{
if ( item->IsSeparator() )
{
- if ( mh )
- AppendMenuItemTextWithCFString( mh,
+ if ( helpMenuHandle )
+ AppendMenuItemTextWithCFString( helpMenuHandle,
CFSTR(""), kMenuItemAttrSeparator, 0,NULL);
}
else
CFSTR(""), kMenuItemAttrSeparator, 0,NULL);
}
else
- 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
static MenuItemIndex firstCustomItemIndex = 0 ;
#endif
-OSStatus UMAGetHelpMenu(
+static OSStatus UMAGetHelpMenu(
- MenuItemIndex * outFirstCustomItemIndex)
+ MenuItemIndex * outFirstCustomItemIndex,
+ bool allowHelpMenuCreation);
+
+static OSStatus UMAGetHelpMenu(
+ MenuRef * outHelpMenu,
+ MenuItemIndex * outFirstCustomItemIndex,
+ bool allowHelpMenuCreation)
- 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 ;
+ wxUnusedVar( allowHelpMenuCreation ) ;
MenuRef helpMenuHandle ;
helpMenuStatus = HMGetHelpMenuHandle( &helpMenuHandle ) ;
MenuRef helpMenuHandle ;
helpMenuStatus = HMGetHelpMenuHandle( &helpMenuHandle ) ;
+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 )
#ifndef __LP64__
wxMacPortStateHelper::wxMacPortStateHelper( GrafPtr newport )