Fix the assert of not reset highlighted menu item pointer.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30688 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba
2004-11-22 12:36:07 +00:00
parent 18591f2f81
commit 9f9f75b380

View File

@@ -136,7 +136,7 @@ public:
virtual void OnDismiss(); virtual void OnDismiss();
// called when a submenu is dismissed // called when a submenu is dismissed
void OnSubmenuDismiss() { m_hasOpenSubMenu = false; } void OnSubmenuDismiss(bool dismissParent);
// get the currently selected item (may be NULL) // get the currently selected item (may be NULL)
wxMenuItem *GetCurrentItem() const wxMenuItem *GetCurrentItem() const
@@ -358,7 +358,7 @@ void wxPopupMenuWindow::ChangeCurrent(wxMenuItemList::compatibility_iterator nod
if ( item->IsSubMenu() && item->GetSubMenu()->IsShown() ) if ( item->IsSubMenu() && item->GetSubMenu()->IsShown() )
{ {
item->GetSubMenu()->Dismiss(); item->GetSubMenu()->Dismiss();
OnSubmenuDismiss(); OnSubmenuDismiss( false );
} }
RefreshItem(item); RefreshItem(item);
@@ -463,7 +463,7 @@ void wxPopupMenuWindow::Dismiss()
wxCHECK_RET( win, _T("opened submenu is not opened?") ); wxCHECK_RET( win, _T("opened submenu is not opened?") );
win->Dismiss(); win->Dismiss();
OnSubmenuDismiss(); OnSubmenuDismiss( false );
} }
wxPopupTransientWindow::Dismiss(); wxPopupTransientWindow::Dismiss();
@@ -476,6 +476,15 @@ void wxPopupMenuWindow::OnDismiss()
HandleDismiss(true); HandleDismiss(true);
} }
void wxPopupMenuWindow::OnSubmenuDismiss(bool dismissParent)
{
m_hasOpenSubMenu = false;
// we are closing whole menu so remove current highlight
if ( dismissParent )
ResetCurrent();
}
void wxPopupMenuWindow::HandleDismiss(bool dismissParent) void wxPopupMenuWindow::HandleDismiss(bool dismissParent)
{ {
ResetCurrent(); ResetCurrent();
@@ -1307,7 +1316,7 @@ void wxMenu::OnDismiss(bool dismissParent)
wxPopupMenuWindow *win = m_menuParent->m_popupMenu; wxPopupMenuWindow *win = m_menuParent->m_popupMenu;
if ( win ) if ( win )
{ {
win->OnSubmenuDismiss(); win->OnSubmenuDismiss( true );
} }
else else
{ {