]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/menu.cpp
added a preImage of the selection in order to avoid unnecessary events being triggered
[wxWidgets.git] / src / mac / carbon / menu.cpp
index 6956a0987adde5647ae5fdcb9f865e69a8697e6c..030c20efd000c017f814d03cebbc0e04066cee1a 100644 (file)
@@ -71,7 +71,7 @@ void wxMenu::Init()
        wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_title , false );
        m_macMenuId = s_macNextMenuId++; 
     wxCHECK_RET( s_macNextMenuId < 236 , "menu ids > 235 cannot be used for submenus on mac" );
-       m_hMenu = UMANewMenu(m_macMenuId, label);
+       m_hMenu = ::NewMenu(m_macMenuId, label);
 
     if ( !m_hMenu )
     {
@@ -89,7 +89,7 @@ void wxMenu::Init()
 wxMenu::~wxMenu()
 {
        if (m_hMenu)
-               UMADisposeMenu(m_hMenu);
+               ::DisposeMenu(m_hMenu);
 
 #if wxUSE_ACCEL
     // delete accels
@@ -183,7 +183,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
                
                        if (wxMenuBar::MacGetInstalledMenuBar() == m_menuBar) 
                        {
-                               UMAInsertMenu( pSubMenu->m_hMenu , -1 ) ;
+                               ::InsertMenu( pSubMenu->m_hMenu , -1 ) ;
                        }
                        
                        if ( pos == (size_t)-1 )
@@ -683,7 +683,7 @@ void wxMenuBar::MacInstallMenuBar()
                                                        }
                                                        if ( item->GetId() == wxApp::s_macAboutMenuItemId )
                                                        { 
-                                                                       UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label );
+                                                                       ::SetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label );
                                                                        UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 );
                                                        }
                                                        else
@@ -698,50 +698,88 @@ 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 ) ;
+                                 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)                    
-                                       {
-                                               UMAInsertMenu( 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
-                                                       UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label );
-                                                       UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 );
-                                               }
-                                       }
-                               }
-                               UMAInsertMenu(m_menus[i]->GetHMenu(), 0);
+                                       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 ) ;
+                                       wxArrayPtrVoid submenus ;
+                                       
                                for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) 
                                {
                                        item = (wxMenuItem *)node->Data();
                                        subMenu = item->GetSubMenu() ;
                                        if (subMenu)                    
                                        {
-                                               UMAInsertMenu( subMenu->GetHMenu() , -1 ) ;
+                                         submenus.Add(subMenu) ;
                                        }
                                }
-                               UMAInsertMenu(m_menus[i]->GetHMenu(), 0);
+                               ::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 ) ;
+                       }
                        }
                }
-               UMADrawMenuBar() ;
+               ::DrawMenuBar() ;
 
        s_macInstalledMenuBar = this;
 }
@@ -816,18 +854,18 @@ wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
     {
                if (s_macInstalledMenuBar == this)
                {
-                       UMADeleteMenu( menuOld->MacGetMenuId() /* m_menus[pos]->MacGetMenuId() */ ) ;
+                       ::DeleteMenu( menuOld->MacGetMenuId() /* m_menus[pos]->MacGetMenuId() */ ) ;
                        {
                                Str255  label;
                                wxMenuItem::MacBuildMenuString( label, NULL , NULL , title , false );
                                UMASetMenuTitle( menu->GetHMenu() , label ) ;
                                if ( pos == m_menus.GetCount() - 1)
                                {
-                                       UMAInsertMenu( menu->GetHMenu() , 0 ) ;
+                                       ::InsertMenu( menu->GetHMenu() , 0 ) ;
                                }
                                else
                                {
-                                       UMAInsertMenu( menu->GetHMenu() , m_menus[pos+1]->MacGetMenuId() ) ;
+                                       ::InsertMenu( menu->GetHMenu() , m_menus[pos+1]->MacGetMenuId() ) ;
                                }
                        }
                }