X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4cbc928afcff3bcc22019614cb8ca53b042fc681..c2c87924e7e3906b8cf1f93ebbd362eab17f6857:/src/common/framecmn.cpp?ds=inline diff --git a/src/common/framecmn.cpp b/src/common/framecmn.cpp index b0ad197a09..e93d1010e1 100644 --- a/src/common/framecmn.cpp +++ b/src/common/framecmn.cpp @@ -253,7 +253,7 @@ void wxFrameBase::UpdateWindowUI(long flags) void wxFrameBase::OnMenuHighlight(wxMenuEvent& event) { #if wxUSE_STATUSBAR - (void)ShowMenuHelp(GetStatusBar(), event.GetMenuId()); + (void)ShowMenuHelp(event.GetMenuId()); #endif // wxUSE_STATUSBAR } @@ -270,18 +270,7 @@ void wxFrameBase::OnMenuOpen(wxMenuEvent& WXUNUSED(event)) void wxFrameBase::OnMenuClose(wxMenuEvent& WXUNUSED(event)) { - // do we have real status text to restore? - if ( !m_oldStatusText.empty() ) - { - if ( m_statusBarPane >= 0 ) - { - wxStatusBar *statbar = GetStatusBar(); - if ( statbar ) - statbar->SetStatusText(m_oldStatusText, m_statusBarPane); - } - - m_oldStatusText.clear(); - } + DoGiveHelp(wxEmptyString, false); } #endif // wxUSE_MENUS && wxUSE_STATUSBAR @@ -360,27 +349,22 @@ void wxFrameBase::PopStatusText(int number) m_frameStatusBar->PopStatusText(number); } -bool wxFrameBase::ShowMenuHelp(wxStatusBar *WXUNUSED(statbar), int menuId) +bool wxFrameBase::ShowMenuHelp(int menuId) { #if wxUSE_MENUS // if no help string found, we will clear the status bar text wxString helpString; - bool show = menuId != wxID_SEPARATOR && menuId != -2 /* wxID_TITLE */; - - if ( show ) + if ( menuId != wxID_SEPARATOR && menuId != -3 /* wxID_TITLE */ ) { - wxMenuBar *menuBar = GetMenuBar(); - if ( menuBar ) - { - // it's ok if we don't find the item because it might belong - // to the popup menu - wxMenuItem *item = menuBar->FindItem(menuId); - if ( item ) - helpString = item->GetHelp(); - } + const wxMenuItem * const item = FindItemInMenuBar(menuId); + if ( item ) + helpString = item->GetHelp(); + + // notice that it's ok if we don't find the item because it might + // belong to the popup menu, so don't assert here } - DoGiveHelp(helpString, show); + DoGiveHelp(helpString, true); return !helpString.empty(); #else // !wxUSE_MENUS @@ -404,7 +388,7 @@ void wxFrameBase::SetStatusBar(wxStatusBar *statBar) #endif // wxUSE_STATUSBAR #if wxUSE_MENUS || wxUSE_TOOLBAR -void wxFrameBase::DoGiveHelp(const wxString& text, bool show) +void wxFrameBase::DoGiveHelp(const wxString& help, bool show) { #if wxUSE_STATUSBAR if ( m_statusBarPane < 0 ) @@ -417,11 +401,9 @@ void wxFrameBase::DoGiveHelp(const wxString& text, bool show) if ( !statbar ) return; - wxString help; + wxString text; if ( show ) { - help = text; - // remember the old status bar text if this is the first time we're // called since the menu has been opened as we're going to overwrite it // in our DoGiveHelp() and we want to restore it when the menu is @@ -442,14 +424,16 @@ void wxFrameBase::DoGiveHelp(const wxString& text, bool show) m_oldStatusText += _T('\0'); } } + + text = help; } - else // hide the status bar text + else // hide help, restore the original text { - // i.e. restore the old one - help = m_oldStatusText; + text = m_oldStatusText; + m_oldStatusText.clear(); } - statbar->SetStatusText(help, m_statusBarPane); + statbar->SetStatusText(text, m_statusBarPane); #else wxUnusedVar(text); wxUnusedVar(show); @@ -573,4 +557,11 @@ void wxFrameBase::SetMenuBar(wxMenuBar *menubar) this->AttachMenuBar(menubar); } +const wxMenuItem *wxFrameBase::FindItemInMenuBar(int menuId) const +{ + const wxMenuBar * const menuBar = GetMenuBar(); + + return menuBar ? menuBar->FindItem(menuId) : NULL; +} + #endif // wxUSE_MENUS