]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/menu.cpp
fixed a memory leak and an initialization problem
[wxWidgets.git] / src / mac / menu.cpp
index 72be92772dc24aad4d5f5e96b913801b52961148..030c20efd000c017f814d03cebbc0e04066cee1a 100644 (file)
@@ -698,47 +698,85 @@ void wxMenuBar::MacInstallMenuBar()
 #else
                        if( m_titles[i] == "?" || m_titles[i] == "&?"  || m_titles[i] == wxApp::s_macHelpMenuTitleName )
                        {
 #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++) 
                                {
                                        
                                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);
+                                       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 ) ;
                        }
 #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)                    
                                        {
                                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);
                                        }
                                }
                                ::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() ;
                        }
                }
                ::DrawMenuBar() ;