X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1dddf8389fef10a535dbcc96f5323799a852ade8..2b8f5a2488b051daf6f9c0d161e57e0d1dabeab0:/src/common/menucmn.cpp diff --git a/src/common/menucmn.cpp b/src/common/menucmn.cpp index 6c2e5631a7..74818ae0a9 100644 --- a/src/common/menucmn.cpp +++ b/src/common/menucmn.cpp @@ -51,7 +51,8 @@ WX_DEFINE_LIST(wxMenuItemList); wxMenuItemBase::~wxMenuItemBase() { - delete m_subMenu; + if (m_subMenu) + delete m_subMenu; } #if wxUSE_ACCEL @@ -124,11 +125,16 @@ void wxMenuBase::Init(long style) m_style = style; m_clientData = (void *)NULL; m_eventHandler = this; + +#if wxUSE_MENU_CALLBACK + m_callback = (wxFunction) NULL; +#endif // wxUSE_MENU_CALLBACK } wxMenuBase::~wxMenuBase() { - // nothing to do, wxMenuItemList dtor will delete the menu items + // nothing to do, wxMenuItemList dtor will delete the menu items. + // Actually, in GTK, the submenus have to get deleted first. } // ---------------------------------------------------------------------------- @@ -147,10 +153,18 @@ bool wxMenuBase::DoAppend(wxMenuItem *item) bool wxMenuBase::Insert(size_t pos, wxMenuItem *item) { wxCHECK_MSG( item, FALSE, wxT("invalid item in wxMenu::Insert") ); - wxCHECK_MSG( pos < GetMenuItemCount(), FALSE, - wxT("invalid index in wxMenu::Insert") ); - return DoInsert(pos, item); + if ( pos == GetMenuItemCount() ) + { + return DoAppend(item); + } + else + { + wxCHECK_MSG( pos < GetMenuItemCount(), FALSE, + wxT("invalid index in wxMenu::Insert") ); + + return DoInsert(pos, item); + } } bool wxMenuBase::DoInsert(size_t pos, wxMenuItem *item) @@ -481,16 +495,23 @@ bool wxMenuBarBase::Append(wxMenu *menu, const wxString& WXUNUSED(title)) } bool wxMenuBarBase::Insert(size_t pos, wxMenu *menu, - const wxString& WXUNUSED(title)) + const wxString& title) { - wxCHECK_MSG( menu, FALSE, wxT("can't insert NULL menu") ); + if ( pos == m_menus.GetCount() ) + { + return Append(menu, title); + } + else + { + wxCHECK_MSG( menu, FALSE, wxT("can't insert NULL menu") ); - wxMenuList::Node *node = m_menus.Item(pos); - wxCHECK_MSG( node, FALSE, wxT("bad index in wxMenuBar::Insert()") ); + wxMenuList::Node *node = m_menus.Item(pos); + wxCHECK_MSG( node, FALSE, wxT("bad index in wxMenuBar::Insert()") ); - m_menus.Insert(node, menu); + m_menus.Insert(node, menu); - return TRUE; + return TRUE; + } } wxMenu *wxMenuBarBase::Replace(size_t pos, wxMenu *menu,