X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9673f535acfc892b08ff07e87ae0003c4690fe7e..b6f5f27a330a5f3f05ee4824270e7dc692441d42:/src/mac/carbon/menu.cpp

diff --git a/src/mac/carbon/menu.cpp b/src/mac/carbon/menu.cpp
index 030c20efd0..e31651102c 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 ;
@@ -88,8 +88,8 @@ void wxMenu::Init()
 
 wxMenu::~wxMenu()
 {
-	if (m_hMenu)
-		::DisposeMenu(m_hMenu);
+	if (MAC_WXHMENU(m_hMenu))
+		::DisposeMenu(MAC_WXHMENU(m_hMenu));
 
 #if wxUSE_ACCEL
     // delete accels
@@ -164,11 +164,11 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
 	{
 		if ( pos == (size_t)-1 )
 		{
-			MacAppendMenu(m_hMenu, "\p-");
+			MacAppendMenu(MAC_WXHMENU(m_hMenu), "\p-");
 		}
 		else
 		{
-			MacInsertMenuItem(m_hMenu, "\p-" , pos);
+			MacInsertMenuItem(MAC_WXHMENU(m_hMenu), "\p-" , pos);
 		}
 	}
 	else 
@@ -183,16 +183,16 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
 		
 			if (wxMenuBar::MacGetInstalledMenuBar() == m_menuBar) 
 			{
-				::InsertMenu( pSubMenu->m_hMenu , -1 ) ;
+				::InsertMenu( MAC_WXHMENU( pSubMenu->m_hMenu ) , -1 ) ;
 			}
 			
 			if ( pos == (size_t)-1 )
 			{
-				UMAAppendSubMenuItem(m_hMenu, label, pSubMenu->m_macMenuId);
+				UMAAppendSubMenuItem(MAC_WXHMENU(m_hMenu), label, pSubMenu->m_macMenuId);
 			}
 			else
 			{
-				UMAInsertSubMenuItem(m_hMenu, label , pos, pSubMenu->m_macMenuId);
+				UMAInsertSubMenuItem(MAC_WXHMENU(m_hMenu), label , pos, pSubMenu->m_macMenuId);
 			}
 		}
 		else
@@ -209,21 +209,21 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
 			}
 			if ( pos == (size_t)-1 )
 			{
-				UMAAppendMenuItem(m_hMenu, label,key,modifiers);
+				UMAAppendMenuItem(MAC_WXHMENU(m_hMenu), label,key,modifiers);
 			}
 			else
 			{
-				UMAInsertMenuItem(m_hMenu, label , pos,key,modifiers);
+				UMAInsertMenuItem(MAC_WXHMENU(m_hMenu), label , pos,key,modifiers);
 			}
   			if ( pItem->GetId() == idMenuTitle ) 
   			{
   				if ( pos == (size_t)-1 )
 				{
-					UMADisableMenuItem( m_hMenu , CountMenuItems( m_hMenu ) ) ;
+					UMADisableMenuItem(MAC_WXHMENU(m_hMenu) , CountMenuItems(MAC_WXHMENU(m_hMenu) ) ) ;
 				}
 				else
 				{
-					UMADisableMenuItem( m_hMenu , pos + 1 ) ;
+					UMADisableMenuItem(MAC_WXHMENU(m_hMenu) , pos + 1 ) ;
 				}
   			}
 		}
@@ -274,7 +274,7 @@ wxMenuItem *wxMenu::DoRemove(wxMenuItem *item)
     //else: this item doesn't have an accel, nothing to do
 #endif // wxUSE_ACCEL
 
-	::DeleteMenuItem( m_hMenu , pos + 1);
+	::DeleteMenuItem(MAC_WXHMENU(m_hMenu) , pos + 1);
 
     if ( IsAttached() )
     {
@@ -312,7 +312,7 @@ void wxMenu::SetTitle(const wxString& label)
 	Str255 title ;
     m_title = label ;
 	wxMenuItem::MacBuildMenuString( title, NULL , NULL , label , false );
-	UMASetMenuTitle( m_hMenu , title ) ;
+	UMASetMenuTitle(MAC_WXHMENU(m_hMenu) , title ) ;
 }
 bool wxMenu::ProcessCommand(wxCommandEvent & event)
 {
@@ -399,121 +399,119 @@ int wxMenu::MacGetIndexFromItem( wxMenuItem *pItem )
 void wxMenu::MacEnableMenu( bool bDoEnable ) 
 {
 	if ( bDoEnable )
-		UMAEnableMenuItem( m_hMenu , 0 ) ;
+		UMAEnableMenuItem(MAC_WXHMENU(m_hMenu) , 0 ) ;
 	else
-		UMADisableMenuItem( m_hMenu , 0 ) ;
+		UMADisableMenuItem(MAC_WXHMENU(m_hMenu) , 0 ) ;
 		
 	::DrawMenuBar() ;
 }
 
 bool wxMenu::MacMenuSelect( wxEvtHandler* handler, long when , int macMenuId, int macMenuItemNum )
 {
-  int pos;
-  wxNode *node;
-
-	if ( m_macMenuId == macMenuId )
-	{
-		node = GetMenuItems().Nth(macMenuItemNum-1);
-		if (node) 
-		{
-			wxMenuItem *pItem = (wxMenuItem*)node->Data();
-
-			if (pItem->IsCheckable())
-				pItem->Check(! pItem->IsChecked());
-
-			wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, pItem->GetId());
-			event.m_timeStamp = when;
-			event.SetEventObject(handler);
-     		event.SetInt( pItem->GetId() );
-			{
-				bool processed = false ;
+    int pos;
+    wxNode *node;
 
+    if ( m_macMenuId == macMenuId )
+    {
+        node = GetMenuItems().Nth(macMenuItemNum-1);
+        if (node) 
+        {
+            wxMenuItem *pItem = (wxMenuItem*)node->Data();
+            
+            if (pItem->IsCheckable())
+                pItem->Check(! pItem->IsChecked());
+            
+            wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, pItem->GetId());
+            event.m_timeStamp = when;
+            event.SetEventObject(handler);
+            event.SetInt( pItem->GetId() );
+            {
+                bool processed = false ;
+                
 #if WXWIN_COMPATIBILITY
-			    // Try a callback
-			    if (m_callback)
-			    {
-			            (void) (*(m_callback)) (*this, event);
-			            processed = TRUE;
-			    }
+                // Try a callback
+                if (m_callback)
+                {
+                    (void) (*(m_callback)) (*this, event);
+                    processed = TRUE;
+                }
 #endif			
-			    // Try the menu's event handler
-			    if ( !processed && handler)
-			    {
-			            processed = handler->ProcessEvent(event);
-			    }
-			
-			  	// Try the window the menu was popped up from (and up
-			  	// through the hierarchy)
-			  	if ( !processed && GetInvokingWindow())
-			    	processed = GetInvokingWindow()->GetEventHandler()->ProcessEvent(event);
-		  	}
-			return true ;
-		}
-	}
-#ifndef __DARWIN__
-	else if ( macMenuId == kHMHelpMenuID )
-	{
-		int menuItem = formerHelpMenuItems ;
-	  for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++) 
-	  {	
-	  	wxMenuItem * pItem = (wxMenuItem *)  node->Data() ;
-	  	
-	  	wxMenu *pSubMenu = pItem->GetSubMenu() ;
-			if ( pSubMenu != NULL )
-			{
-			}
-			else
-			{
-				if ( pItem->GetId() != wxApp::s_macAboutMenuItemId )
-					++menuItem ;
-					
-				if ( menuItem == macMenuItemNum )
-				{
-					wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, pItem->GetId());
-					event.m_timeStamp = when;
-					event.SetEventObject(handler);
-       				event.SetInt( pItem->GetId() );
-					{
-						bool processed = false ;
+                // Try the menu's event handler
+                if ( !processed && handler)
+                {
+                    processed = handler->ProcessEvent(event);
+                }
+                
+                // Try the window the menu was popped up from (and up
+                // through the hierarchy)
+                if ( !processed && GetInvokingWindow())
+                    processed = GetInvokingWindow()->GetEventHandler()->ProcessEvent(event);
+            }
+            return true ;
+        }
+    }
+    else if ( macMenuId == kHMHelpMenuID )
+    {
+        int menuItem = firstUserHelpMenuItem-1 ;
+        for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++) 
+        {	
+            wxMenuItem * pItem = (wxMenuItem *)  node->Data() ;
+            
+            wxMenu *pSubMenu = pItem->GetSubMenu() ;
+            if ( pSubMenu != NULL )
+            {
+            }
+            else
+            {
+                if ( pItem->GetId() != wxApp::s_macAboutMenuItemId )
+                    ++menuItem ;
+                
+                if ( menuItem == macMenuItemNum )
+                {
+                    wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, pItem->GetId());
+                    event.m_timeStamp = when;
+                    event.SetEventObject(handler);
+                    event.SetInt( pItem->GetId() );
+                    {
+                        bool processed = false ;
 #if WXWIN_COMPATIBILITY
-					    // Try a callback
-					    if (m_callback)
-					    {
-					            (void) (*(m_callback)) (*this, event);
-					            processed = TRUE;
-					    }
+                        // Try a callback
+                        if (m_callback)
+                        {
+                            (void) (*(m_callback)) (*this, event);
+                            processed = TRUE;
+                        }
 #endif					
-					    // Try the menu's event handler
-					    if ( !processed && handler)
-					    {
-					            processed = handler->ProcessEvent(event);
-					    }
-					
-					  	// Try the window the menu was popped up from (and up
-					  	// through the hierarchy)
-					  	if ( !processed && GetInvokingWindow())
-					    	processed = GetInvokingWindow()->GetEventHandler()->ProcessEvent(event);
-				  	}
-					return true ;
-				}
-			}
-	  }
-	}
-#endif // __DARWIN__
-
-  for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++) 
-  {	
-  		wxMenuItem * pItem = (wxMenuItem *)  node->Data() ;
+                        // Try the menu's event handler
+                        if ( !processed && handler)
+                        {
+                            processed = handler->ProcessEvent(event);
+                        }
+                        
+                        // Try the window the menu was popped up from (and up
+                        // through the hierarchy)
+                        if ( !processed && GetInvokingWindow())
+                            processed = GetInvokingWindow()->GetEventHandler()->ProcessEvent(event);
+                    }
+                    return true ;
+                }
+            }
+        }
+    }
+    
+    for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++) 
+    {	
+        wxMenuItem * pItem = (wxMenuItem *)  node->Data() ;
   	
-  		wxMenu *pSubMenu = pItem->GetSubMenu() ;
-		if ( pSubMenu != NULL )
-		{
-			if ( pSubMenu->MacMenuSelect( handler , when , macMenuId , macMenuItemNum ) )
-				return true ;
-		}
-  }
-
-	return false ;
+        wxMenu *pSubMenu = pItem->GetSubMenu() ;
+        if ( pSubMenu != NULL )
+        {
+            if ( pSubMenu->MacMenuSelect( handler , when , macMenuId , macMenuItemNum ) )
+                return true ;
+        }
+    }
+    
+    return false ;
 }
 
 // Menu Bar
@@ -579,7 +577,7 @@ wxMenuBar::~wxMenuBar()
 
 }
 
-void wxMenuBar::Refresh()
+void wxMenuBar::Refresh(bool WXUNUSED(eraseBackground), const wxRect *WXUNUSED(rect))
 {
     wxCHECK_RET( IsAttached(), wxT("can't refresh unatteched menubar") );
 
@@ -616,43 +614,51 @@ void wxMenuBar::RebuildAccelTable()
 
 #endif // wxUSE_ACCEL
 
-
 void wxMenuBar::MacInstallMenuBar() 
 {
-	if ( s_macInstalledMenuBar == this )
-		return ;
+    if ( s_macInstalledMenuBar == this )
+        return ;
+		
+    wxStAppResource resload ;
 		
-  	Handle menubar = ::GetNewMBar( kwxMacMenuBarResource ) ;
-  	wxString message ;
-  	wxCHECK_RET( menubar != NULL, "can't read MBAR resource" );
-  	::SetMenuBar( menubar ) ;
-  	::DisposeHandle( menubar ) ;
-
-		MenuHandle menu = ::GetMenuHandle( kwxMacAppleMenuId ) ;
-		::AppendResMenu(menu, 'DRVR');
+    Handle menubar = ::GetNewMBar( kwxMacMenuBarResource ) ;
+    wxString message ;
+    wxCHECK_RET( menubar != NULL, "can't read MBAR resource" );
+    ::SetMenuBar( menubar ) ;
+#if TARGET_API_MAC_CARBON
+    ::DisposeMenuBar( menubar ) ;
+#else
+    ::DisposeHandle( menubar ) ;
+#endif
+
+#if TARGET_API_MAC_OS8
+    MenuHandle menu = ::GetMenuHandle( kwxMacAppleMenuId ) ;
+    if ( CountMenuItems( menu ) == 2 )
+    {
+        ::AppendResMenu(menu, 'DRVR');
+    }
+#endif
  
-   	for (int i = 0; i < m_menus.GetCount(); i++)
+   	for (size_t i = 0; i < m_menus.GetCount(); i++)
   	{
-			Str255 	label;
-    	wxNode *node;
-    	wxMenuItem *item;
-    	int pos ;
+            Str255 	label;
+            wxNode *node;
+            wxMenuItem *item;
+            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 ( int i = CountMenuItems( mh ) ; i >= firstUserHelpMenuItem ; --i )
+		    {
+		      DeleteMenuItem( mh , i ) ;
+		    }
 					
 			  	for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) 
 		  		{
@@ -667,7 +673,7 @@ void wxMenuBar::MacInstallMenuBar()
 						if ( item->IsSeparator() )
 						{
 							if ( mh )
-								UMAAppendMenuItem(mh, "\p-" );
+								MacAppendMenu(mh, "\p-" );
 						}
 						else
 						{
@@ -695,59 +701,10 @@ 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 ) ;
-					
-					wxArrayPtrVoid submenus ;
-					
-			  	for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) 
-		  		{
-  		 			item = (wxMenuItem *)node->Data();
-  		 			subMenu = item->GetSubMenu() ;
-  					if (subMenu)	 		
-  					{
-  					  submenus.Add(subMenu) ;
-  					}
-  					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);
-  				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 ) ;
-    			}
-			}
-#endif
 			else
 			{
 				wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
-				UMASetMenuTitle( menu->GetHMenu() , label ) ;
+				UMASetMenuTitle( MAC_WXHMENU(menu->GetHMenu()) , label ) ;
 					wxArrayPtrVoid submenus ;
 					
 		  		for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) 
@@ -759,8 +716,8 @@ void wxMenuBar::MacInstallMenuBar()
   					  submenus.Add(subMenu) ;
 					}
 				}
-				::InsertMenu(m_menus[i]->GetHMenu(), 0);
-				for ( int i = 0 ; i < submenus.GetCount() ; ++i )
+				::InsertMenu(MAC_WXHMENU(m_menus[i]->GetHMenu()), 0);
+				for ( size_t i = 0 ; i < submenus.GetCount() ; ++i )
 				{
 				  wxMenu* submenu = (wxMenu*) submenus[i] ;
         	wxNode *subnode;
@@ -775,12 +732,11 @@ void wxMenuBar::MacInstallMenuBar()
   						submenus.Add(itsSubMenu) ;
   					}  				
   				}
-					::InsertMenu( submenu->GetHMenu() , -1 ) ;
+					::InsertMenu( MAC_WXHMENU(submenu->GetHMenu()) , -1 ) ;
   			}
 			}
 		}
 		::DrawMenuBar() ;
-
 	s_macInstalledMenuBar = this;
 }
 
@@ -858,14 +814,14 @@ wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
 			{
 				Str255 	label;
 				wxMenuItem::MacBuildMenuString( label, NULL , NULL , title , false );
-				UMASetMenuTitle( menu->GetHMenu() , label ) ;
+				UMASetMenuTitle( MAC_WXHMENU(menu->GetHMenu()) , label ) ;
 				if ( pos == m_menus.GetCount() - 1)
 				{
-					::InsertMenu( menu->GetHMenu() , 0 ) ;
+					::InsertMenu( MAC_WXHMENU(menu->GetHMenu()) , 0 ) ;
 				}
 				else
 				{
-					::InsertMenu( menu->GetHMenu() , m_menus[pos+1]->MacGetMenuId() ) ;
+					::InsertMenu( MAC_WXHMENU(menu->GetHMenu()) , m_menus[pos+1]->MacGetMenuId() ) ;
 				}
 			}
 		}
@@ -892,17 +848,19 @@ bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
 
     m_titles.Insert(title, pos);
 
-    menu->Attach(this);
+    Str255 label ;
+		wxMenuItem::MacBuildMenuString( label, NULL , NULL , title , false );
+		UMASetMenuTitle( MAC_WXHMENU(menu->GetHMenu()) , label ) ;
 
     if ( IsAttached() )
     {
-    	if ( pos == (size_t) -1 )
+    	if ( pos == (size_t) -1  || pos + 1 == m_menus.GetCount() )
 		{
-			::InsertMenu( menu->GetHMenu() , 0 ) ;
+			::InsertMenu( MAC_WXHMENU(menu->GetHMenu()) , 0 ) ;
 		}
 		else
 		{
-			::InsertMenu( menu->GetHMenu() , m_menus[pos+1]->MacGetMenuId() ) ;
+			::InsertMenu( MAC_WXHMENU(menu->GetHMenu()) , m_menus[pos+1]->MacGetMenuId() ) ;
 		}
 
 #if wxUSE_ACCEL
@@ -921,38 +879,33 @@ bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
 
 void wxMenuBar::MacMenuSelect(wxEvtHandler* handler, long when , int macMenuId, int macMenuItemNum)
 {
-	// first scan fast for direct commands, i.e. menus which have these commands directly in their own list
-
-	if ( macMenuId == kwxMacAppleMenuId && macMenuItemNum == 1 )
-	{
-			wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, wxApp::s_macAboutMenuItemId );
-			event.m_timeStamp = when;
-			event.SetEventObject(handler);
-     	event.SetInt( wxApp::s_macAboutMenuItemId );
-			handler->ProcessEvent(event);
-	}
-	else
-	{		
-	  for (int i = 0; i < m_menus.GetCount() ; i++)
-	  {
-	  	if ( m_menus[i]->MacGetMenuId() == macMenuId
-#ifndef __DARWIN__
-		     || 
-	  		( macMenuId == kHMHelpMenuID && ( m_titles[i] == "?" || m_titles[i] == "&?"  || m_titles[i] == wxApp::s_macHelpMenuTitleName ) )
-#endif
-	  		)
-	  	{
-	  		if ( m_menus[i]->MacMenuSelect( handler , when , macMenuId , macMenuItemNum ) )
-	  			return ;
-	  		else
-	  		{
-	  			//TODO flag this as an error since it must contain the item
-	  			return ;
-	  		}
-	  	}
-		}
+    // first scan fast for direct commands, i.e. menus which have these commands directly in their own list
+    
+    if ( macMenuId == kwxMacAppleMenuId && macMenuItemNum == 1 )
+    {
+        wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, wxApp::s_macAboutMenuItemId );
+        event.m_timeStamp = when;
+        event.SetEventObject(handler);
+        event.SetInt( wxApp::s_macAboutMenuItemId );
+        handler->ProcessEvent(event);
+    }
+    else
+    {		
+        for (size_t i = 0; i < m_menus.GetCount() ; i++)
+        {
+            if ( m_menus[i]->MacGetMenuId() == macMenuId || ( macMenuId == kHMHelpMenuID && ( m_titles[i] == "?" || m_titles[i] == "&?"  || m_titles[i] == wxApp::s_macHelpMenuTitleName ) ) )
+            {
+                if ( m_menus[i]->MacMenuSelect( handler , when , macMenuId , macMenuItemNum ) )
+                    return ;
+                else
+                {
+                    //TODO flag this as an error since it must contain the item
+                    return ;
+                }
+            }
+        }
 	
-	  for (int i = 0; i < m_menus.GetCount(); i++)
+	  for (size_t i = 0; i < m_menus.GetCount(); i++)
 	  {
 	  	if ( m_menus[i]->MacMenuSelect( handler , when , macMenuId , macMenuItemNum ) )
 	  	{
@@ -1002,13 +955,17 @@ bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
         return FALSE;
 
     m_titles.Add(title);
+    
+    Str255 label ;
+		wxMenuItem::MacBuildMenuString( label, NULL , NULL , title , false );
+		UMASetMenuTitle( MAC_WXHMENU(menu->GetHMenu()) , label ) ;
 
     if ( IsAttached() )
     {
-		if (s_macInstalledMenuBar == this)
-		{
-			::InsertMenu( menu->GetHMenu() , 0 ) ;
-		}
+    		if (s_macInstalledMenuBar == this)
+    		{
+    			::InsertMenu( MAC_WXHMENU(menu->GetHMenu()) , 0 ) ;
+    		}
 
 #if wxUSE_ACCEL
         if ( menu->HasAccels() )