]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/menucmn.cpp
reverted rev 1.26, workarounds for memchecking code no longer needed
[wxWidgets.git] / src / common / menucmn.cpp
index 0a00187d3b033a3a65635deb14f6766d0eabb6d1..62118b53b5f87a0ed155f0e3b65e564f72c90b0c 100644 (file)
@@ -17,7 +17,7 @@
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma implementation "menubase.h"
 #endif
 
     #pragma implementation "menubase.h"
 #endif
 
@@ -72,6 +72,10 @@ wxMenuItemBase::wxMenuItemBase(wxMenu *parentMenu,
     m_isChecked   = FALSE;
     m_id          = id;
     m_kind        = kind;
     m_isChecked   = FALSE;
     m_id          = id;
     m_kind        = kind;
+    if (m_id == wxID_ANY)
+        m_id = wxNewId();
+    if (m_id == wxID_SEPARATOR)
+        m_kind = wxITEM_SEPARATOR;
 }
 
 wxMenuItemBase::~wxMenuItemBase()
 }
 
 wxMenuItemBase::~wxMenuItemBase()
@@ -131,7 +135,7 @@ wxAcceleratorEntry *wxGetAccelFromString(const wxString& label)
                 current.clear();
             }
             else {
                 current.clear();
             }
             else {
-                current += wxTolower(label[n]);
+                current += (wxChar) wxTolower(label[n]);
             }
         }
 
             }
         }
 
@@ -166,6 +170,8 @@ wxAcceleratorEntry *wxGetAccelFromString(const wxString& label)
                         keyCode = WXK_DELETE;
                     else if ( current == wxT("DELETE") )
                         keyCode = WXK_DELETE;
                         keyCode = WXK_DELETE;
                     else if ( current == wxT("DELETE") )
                         keyCode = WXK_DELETE;
+                    else if ( current == wxT("BACK") )
+                        keyCode = WXK_BACK;
                     else if ( current == wxT("INS") )
                         keyCode = WXK_INSERT;
                     else if ( current == wxT("INSERT") )
                     else if ( current == wxT("INS") )
                         keyCode = WXK_INSERT;
                     else if ( current == wxT("INSERT") )
@@ -288,7 +294,7 @@ void wxMenuBase::Init(long style)
 wxMenuBase::~wxMenuBase()
 {
     WX_CLEAR_LIST(wxMenuItemList, m_items);
 wxMenuBase::~wxMenuBase()
 {
     WX_CLEAR_LIST(wxMenuItemList, m_items);
-    
+
     // Actually, in GTK, the submenus have to get deleted first.
 }
 
     // Actually, in GTK, the submenus have to get deleted first.
 }
 
@@ -308,9 +314,9 @@ void wxMenuBase::AddSubMenu(wxMenu *submenu)
     submenu->SetParent((wxMenu *)this);
 }
 
     submenu->SetParent((wxMenu *)this);
 }
 
-bool wxMenuBase::DoAppend(wxMenuItem *item)
+wxMenuItem* wxMenuBase::DoAppend(wxMenuItem *item)
 {
 {
-    wxCHECK_MSG( item, FALSE, wxT("invalid item in wxMenu::Append()") );
+    wxCHECK_MSG( item, NULL, wxT("invalid item in wxMenu::Append()") );
 
     m_items.Append(item);
     item->SetMenu((wxMenu*)this);
 
     m_items.Append(item);
     item->SetMenu((wxMenu*)this);
@@ -319,12 +325,12 @@ bool wxMenuBase::DoAppend(wxMenuItem *item)
         AddSubMenu(item->GetSubMenu());
     }
 
         AddSubMenu(item->GetSubMenu());
     }
 
-    return TRUE;
+    return item;
 }
 
 }
 
-bool wxMenuBase::Insert(size_t pos, wxMenuItem *item)
+wxMenuItem* wxMenuBase::Insert(size_t pos, wxMenuItem *item)
 {
 {
-    wxCHECK_MSG( item, FALSE, wxT("invalid item in wxMenu::Insert") );
+    wxCHECK_MSG( item, NULL, wxT("invalid item in wxMenu::Insert") );
 
     if ( pos == GetMenuItemCount() )
     {
 
     if ( pos == GetMenuItemCount() )
     {
@@ -339,9 +345,9 @@ bool wxMenuBase::Insert(size_t pos, wxMenuItem *item)
     }
 }
 
     }
 }
 
-bool wxMenuBase::DoInsert(size_t pos, wxMenuItem *item)
+wxMenuItem* wxMenuBase::DoInsert(size_t pos, wxMenuItem *item)
 {
 {
-    wxCHECK_MSG( item, FALSE, wxT("invalid item in wxMenu::Insert()") );
+    wxCHECK_MSG( item, NULL, wxT("invalid item in wxMenu::Insert()") );
 
     wxMenuItemList::compatibility_iterator node = m_items.Item(pos);
     wxCHECK_MSG( node, FALSE, wxT("invalid index in wxMenu::Insert()") );
 
     wxMenuItemList::compatibility_iterator node = m_items.Item(pos);
     wxCHECK_MSG( node, FALSE, wxT("invalid index in wxMenu::Insert()") );
@@ -353,7 +359,7 @@ bool wxMenuBase::DoInsert(size_t pos, wxMenuItem *item)
         AddSubMenu(item->GetSubMenu());
     }
 
         AddSubMenu(item->GetSubMenu());
     }
 
-    return TRUE;
+    return item;
 }
 
 wxMenuItem *wxMenuBase::Remove(wxMenuItem *item)
 }
 
 wxMenuItem *wxMenuBase::Remove(wxMenuItem *item)
@@ -531,6 +537,15 @@ wxMenuItem* wxMenuBase::FindItemByPosition(size_t position) const
 // window will be used.
 void wxMenuBase::UpdateUI(wxEvtHandler* source)
 {
 // window will be used.
 void wxMenuBase::UpdateUI(wxEvtHandler* source)
 {
+    if (GetInvokingWindow())
+    {
+        // Don't update menus if the parent
+        // frame is about to get deleted
+        wxWindow *tlw = wxGetTopLevelParent( GetInvokingWindow() );
+        if (tlw && wxPendingDelete.Member(tlw))
+            return;
+    }
+
     if ( !source && GetInvokingWindow() )
         source = GetInvokingWindow()->GetEventHandler();
     if ( !source )
     if ( !source && GetInvokingWindow() )
         source = GetInvokingWindow()->GetEventHandler();
     if ( !source )
@@ -787,7 +802,6 @@ wxMenu *wxMenuBarBase::Remove(size_t pos)
     wxCHECK_MSG( node, NULL, wxT("bad index in wxMenuBar::Remove()") );
 
     wxMenu *menu = node->GetData();
     wxCHECK_MSG( node, NULL, wxT("bad index in wxMenuBar::Remove()") );
 
     wxMenu *menu = node->GetData();
-    wxCHECK( node, NULL );  // unexpected
     m_menus.Erase(node);
     menu->Detach();
 
     m_menus.Erase(node);
     menu->Detach();