]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/menu.cpp
Hopefully fixed library names generated by wx-config for OS/2's PM port.
[wxWidgets.git] / src / mac / carbon / menu.cpp
index b6e9dd9d3c1a8461c8cebc04fa8ed8048fcb2ded..9384705224f733a5c18f0aa5c4a525d41fea1030 100644 (file)
 // ----------------------
 #include <string.h>
 
 // ----------------------
 #include <string.h>
 
-#if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxMenu, wxEvtHandler)
 IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler)
 IMPLEMENT_DYNAMIC_CLASS(wxMenu, wxEvtHandler)
 IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler)
-#endif
 
 // the (popup) menu title has this special id
 static const int idMenuTitle = -3;
 
 // the (popup) menu title has this special id
 static const int idMenuTitle = -3;
@@ -137,15 +135,15 @@ wxMenu *
 _wxMenuAt(const wxMenuList &menuList, size_t pos)
 {
     wxMenuList::compatibility_iterator menuIter = menuList.GetFirst();
 _wxMenuAt(const wxMenuList &menuList, size_t pos)
 {
     wxMenuList::compatibility_iterator menuIter = menuList.GetFirst();
-  
+
     while (pos-- > 0) menuIter = menuIter->GetNext();
     while (pos-- > 0) menuIter = menuIter->GetNext();
-    
+
     return menuIter->GetData() ;
 }
 
 void wxMenu::Init()
 {
     return menuIter->GetData() ;
 }
 
 void wxMenu::Init()
 {
-    m_doBreak = FALSE;
+    m_doBreak = false;
     m_startRadioGroup = -1;
 
     // create the menu
     m_startRadioGroup = -1;
 
     // create the menu
@@ -160,7 +158,7 @@ void wxMenu::Init()
     wxAssociateMenuWithMacMenu( (MenuRef)m_hMenu , this ) ;
 
     // if we have a title, insert it in the beginning of the menu
     wxAssociateMenuWithMacMenu( (MenuRef)m_hMenu , this ) ;
 
     // if we have a title, insert it in the beginning of the menu
-    if ( !!m_title )
+    if ( !m_title.empty() )
     {
         Append(idMenuTitle, m_title) ;
         AppendSeparator() ;
     {
         Append(idMenuTitle, m_title) ;
         AppendSeparator() ;
@@ -248,11 +246,11 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
         }
     }
     // if we're already attached to the menubar, we must update it
         }
     }
     // if we're already attached to the menubar, we must update it
-    if ( IsAttached() )
+    if ( IsAttached() && GetMenuBar()->IsAttached() )
     {
         GetMenuBar()->Refresh();
     }
     {
         GetMenuBar()->Refresh();
     }
-    return TRUE ;
+    return true ;
 }
 
 void wxMenu::EndRadioGroup()
 }
 
 void wxMenu::EndRadioGroup()
@@ -265,7 +263,7 @@ wxMenuItem* wxMenu::DoAppend(wxMenuItem *item)
 {
     wxCHECK_MSG( item, NULL, _T("NULL item in wxMenu::DoAppend") );
 
 {
     wxCHECK_MSG( item, NULL, _T("NULL item in wxMenu::DoAppend") );
 
-    bool check = FALSE;
+    bool check = false;
 
     if ( item->GetKind() == wxITEM_RADIO )
     {
 
     if ( item->GetKind() == wxITEM_RADIO )
     {
@@ -281,7 +279,7 @@ wxMenuItem* wxMenu::DoAppend(wxMenuItem *item)
             item->SetRadioGroupEnd(m_startRadioGroup);
 
             // ensure that we have a checked item in the radio group
             item->SetRadioGroupEnd(m_startRadioGroup);
 
             // ensure that we have a checked item in the radio group
-            check = TRUE;
+            check = true;
         }
         else // extend the current radio group
         {
         }
         else // extend the current radio group
         {
@@ -312,7 +310,7 @@ wxMenuItem* wxMenu::DoAppend(wxMenuItem *item)
     if ( check )
     {
         // check the item initially
     if ( check )
     {
         // check the item initially
-        item->Check(TRUE);
+        item->Check(true);
     }
 
     return item;
     }
 
     return item;
@@ -344,7 +342,7 @@ wxMenuItem *wxMenu::DoRemove(wxMenuItem *item)
 
     ::DeleteMenuItem(MAC_WXHMENU(m_hMenu) , pos + 1);
 
 
     ::DeleteMenuItem(MAC_WXHMENU(m_hMenu) , pos + 1);
 
-    if ( IsAttached() )
+    if ( IsAttached() && GetMenuBar()->IsAttached() )
     {
         // otherwise, the change won't be visible
         GetMenuBar()->Refresh();
     {
         // otherwise, the change won't be visible
         GetMenuBar()->Refresh();
@@ -356,15 +354,16 @@ wxMenuItem *wxMenu::DoRemove(wxMenuItem *item)
 
 void wxMenu::SetTitle(const wxString& label)
 {
 
 void wxMenu::SetTitle(const wxString& label)
 {
-       m_title = label ;
+    m_title = label ;
     UMASetMenuTitle(MAC_WXHMENU(m_hMenu) , label , wxFont::GetDefaultEncoding() ) ;
 }
     UMASetMenuTitle(MAC_WXHMENU(m_hMenu) , label , wxFont::GetDefaultEncoding() ) ;
 }
+
 bool wxMenu::ProcessCommand(wxCommandEvent & event)
 {
 bool wxMenu::ProcessCommand(wxCommandEvent & event)
 {
-    bool processed = FALSE;
+    bool processed = false;
 
     // Try the menu's event handler
 
     // Try the menu's event handler
-    if ( !processed && GetEventHandler())
+    if ( /* !processed && */ GetEventHandler())
     {
         processed = GetEventHandler()->ProcessEvent(event);
     }
     {
         processed = GetEventHandler()->ProcessEvent(event);
     }
@@ -466,7 +465,7 @@ void wxMenu::MacBeforeDisplay( bool isSubMenu )
                 ( UMAGetSystemVersion() >= 0x1000 && (
                     item->GetId() == wxApp::s_macPreferencesMenuItemId ||
                     item->GetId() == wxApp::s_macExitMenuItemId ) ) )
                 ( UMAGetSystemVersion() >= 0x1000 && (
                     item->GetId() == wxApp::s_macPreferencesMenuItemId ||
                     item->GetId() == wxApp::s_macExitMenuItemId ) ) )
-                 
+
             {
                 ChangeMenuItemAttributes( MAC_WXHMENU( GetHMenu() ),
                                           pos + 1, kMenuItemAttrHidden, 0 );
             {
                 ChangeMenuItemAttributes( MAC_WXHMENU( GetHMenu() ),
                                           pos + 1, kMenuItemAttrHidden, 0 );
@@ -569,6 +568,8 @@ auto-merge for MDI in case this will be necessary
 
 wxMenuBar* wxMenuBar::s_macInstalledMenuBar = NULL ;
 wxMenuBar* wxMenuBar::s_macCommonMenuBar = NULL ;
 
 wxMenuBar* wxMenuBar::s_macInstalledMenuBar = NULL ;
 wxMenuBar* wxMenuBar::s_macCommonMenuBar = NULL ;
+bool     wxMenuBar::s_macAutoWindowMenu = true ;
+WXHMENU  wxMenuBar::s_macWindowMenuHandle = NULL ;
 
 void wxMenuBar::Init()
 {
 
 void wxMenuBar::Init()
 {
@@ -654,7 +655,7 @@ void wxMenuBar::MacInstallMenuBar()
 
     // clean-up the help menu before adding new items
     static MenuHandle mh = NULL ;
 
     // clean-up the help menu before adding new items
     static MenuHandle mh = NULL ;
-    
+
     if ( mh != NULL )
     {
         MenuItemIndex firstUserHelpMenuItem ;
     if ( mh != NULL )
     {
         MenuItemIndex firstUserHelpMenuItem ;
@@ -668,7 +669,7 @@ void wxMenuBar::MacInstallMenuBar()
         else
         {
             mh = NULL ;
         else
         {
             mh = NULL ;
-        }  
+        }
     }
 #if TARGET_CARBON
     if ( UMAGetSystemVersion() >= 0x1000 && wxApp::s_macPreferencesMenuItemId)
     }
 #if TARGET_CARBON
     if ( UMAGetSystemVersion() >= 0x1000 && wxApp::s_macPreferencesMenuItemId)
@@ -725,7 +726,7 @@ void wxMenuBar::MacInstallMenuBar()
                             {
                                 mh = NULL ;
                                 break ;
                             {
                                 mh = NULL ;
                                 break ;
-                            }  
+                            }
                         }
                     }
                     if ( item->IsSeparator() )
                         }
                     }
                     if ( item->IsSeparator() )
@@ -777,6 +778,14 @@ void wxMenuBar::MacInstallMenuBar()
             UMASetMenuItemShortcut( GetMenuHandle( kwxMacAppleMenuId ) , 1 , entry ) ;
         }
     }
             UMASetMenuItemShortcut( GetMenuHandle( kwxMacAppleMenuId ) , 1 , entry ) ;
         }
     }
+    if ( GetAutoWindowMenu() )
+    {
+        if ( MacGetWindowMenuHMenu() == NULL )
+        {
+            CreateStandardWindowMenu( 0 , (MenuHandle*) &s_macWindowMenuHandle ) ;
+        }
+        InsertMenu( (MenuHandle) MacGetWindowMenuHMenu() , 0 ) ;
+    }
     ::DrawMenuBar() ;
     s_macInstalledMenuBar = this;
 }
     ::DrawMenuBar() ;
     s_macInstalledMenuBar = this;
 }
@@ -852,7 +861,7 @@ wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
 {
     wxMenu *menuOld = wxMenuBarBase::Replace(pos, menu, title);
     if ( !menuOld )
 {
     wxMenu *menuOld = wxMenuBarBase::Replace(pos, menu, title);
     if ( !menuOld )
-        return FALSE;
+        return false;
     m_titles[pos] = title;
 
     if ( IsAttached() )
     m_titles[pos] = title;
 
     if ( IsAttached() )
@@ -886,7 +895,7 @@ wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
 bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
 {
     if ( !wxMenuBarBase::Insert(pos, menu, title) )
 bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
 {
     if ( !wxMenuBarBase::Insert(pos, menu, title) )
-        return FALSE;
+        return false;
 
     m_titles.Insert(title, pos);
 
 
     m_titles.Insert(title, pos);
 
@@ -911,7 +920,7 @@ bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
     if (m_invokingWindow)
         wxMenubarSetInvokingWindow( menu, m_invokingWindow );
 
     if (m_invokingWindow)
         wxMenubarSetInvokingWindow( menu, m_invokingWindow );
 
-    return TRUE;
+    return true;
 }
 
 wxMenu *wxMenuBar::Remove(size_t pos)
 }
 
 wxMenu *wxMenuBar::Remove(size_t pos)
@@ -938,10 +947,10 @@ wxMenu *wxMenuBar::Remove(size_t pos)
 bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
 {
     WXHMENU submenu = menu ? menu->GetHMenu() : 0;
 bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
 {
     WXHMENU submenu = menu ? menu->GetHMenu() : 0;
-    wxCHECK_MSG( submenu, FALSE, wxT("can't append invalid menu to menubar") );
+    wxCHECK_MSG( submenu, false, wxT("can't append invalid menu to menubar") );
 
     if ( !wxMenuBarBase::Append(menu, title) )
 
     if ( !wxMenuBarBase::Append(menu, title) )
-        return FALSE;
+        return false;
 
     m_titles.Add(title);
 
 
     m_titles.Add(title);
 
@@ -963,7 +972,7 @@ bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
     if (m_invokingWindow)
         wxMenubarSetInvokingWindow( menu, m_invokingWindow );
 
     if (m_invokingWindow)
         wxMenubarSetInvokingWindow( menu, m_invokingWindow );
 
-    return TRUE;
+    return true;
 }
 
 static void wxMenubarUnsetInvokingWindow( wxMenu *menu )
 }
 
 static void wxMenubarUnsetInvokingWindow( wxMenu *menu )