From: Vadim Zeitlin Date: Thu, 6 Aug 2009 00:21:16 +0000 (+0000) Subject: Don't overwrite status message when restoring it if it changed. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f0f03f324281e2a2eb137f532295dc2bcaa120d3 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 --- diff --git a/include/wx/frame.h b/include/wx/frame.h index 8b0d2184a8..80c563728f 100644 --- a/include/wx/frame.h +++ b/include/wx/frame.h @@ -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 diff --git a/src/common/framecmn.cpp b/src/common/framecmn.cpp index 9e9de0ac28..7cbe913304 100644 --- a/src/common/framecmn.cpp +++ b/src/common/framecmn.cpp @@ -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);