Don't overwrite status message when restoring it if it changed.

wxFrameBase::DoGiveHelp() could rewrite the status bar message if it was
changed while the menu was showing.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61626 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2009-08-06 00:21:16 +00:00
parent 958f8790ce
commit f0f03f3242
2 changed files with 20 additions and 2 deletions

View File

@ -210,6 +210,9 @@ protected:
#if wxUSE_STATUSBAR && (wxUSE_MENUS || wxUSE_TOOLBAR)
// the saved status bar text overwritten by DoGiveHelp()
wxString m_oldStatusText;
// the last help string we have shown in the status bar
wxString m_lastHelpShown;
#endif
#if wxUSE_STATUSBAR

View File

@ -419,12 +419,27 @@ void wxFrameBase::DoGiveHelp(const wxString& help, bool show)
}
}
m_lastHelpShown =
text = help;
}
else // hide help, restore the original text
{
text = m_oldStatusText;
m_oldStatusText.clear();
// clear the last shown help string but remember its value
wxString lastHelpShown;
lastHelpShown.swap(m_lastHelpShown);
// also clear the old status text but remember it too to restore it
// below
text.swap(m_oldStatusText);
if ( statbar->GetStatusText(m_statusBarPane) != lastHelpShown )
{
// if the text was changed with an explicit SetStatusText() call
// from the user code in the meanwhile, do not overwrite it with
// the old status bar contents -- this is almost certainly not what
// the user expects and would be very hard to avoid from user code
return;
}
}
statbar->SetStatusText(text, m_statusBarPane);