From fa36fe3680d7bdf55a54885444972368fe5edfe6 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 2 Apr 2007 22:00:52 +0000 Subject: [PATCH] removed second parameter of wxFrame::DoGiveHelp(), the help string is always shown (even if it's empty), not hidden; this hopefully really fixes restoring the previously shown status bar text when the menu is dismissed git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45229 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/frame.h | 6 ++--- src/common/framecmn.cpp | 52 ++++++++++++++--------------------------- src/common/tbarbase.cpp | 14 +++++++---- src/os2/frame.cpp | 2 +- 4 files changed, 32 insertions(+), 42 deletions(-) diff --git a/include/wx/frame.h b/include/wx/frame.h index 8c599ae435..a9134b0a26 100644 --- a/include/wx/frame.h +++ b/include/wx/frame.h @@ -169,9 +169,9 @@ public: #endif // no wxTopLevelWindowNative #if wxUSE_MENUS || wxUSE_TOOLBAR - // show help text (typically in the statusbar); show is false - // if you are hiding the help, true otherwise - virtual void DoGiveHelp(const wxString& text, bool show); + // show help text for the currently selected menu or toolbar item + // (typically in the status bar) + virtual void DoGiveHelp(const wxString& text); #endif protected: diff --git a/src/common/framecmn.cpp b/src/common/framecmn.cpp index a4e9d210b0..218239b815 100644 --- a/src/common/framecmn.cpp +++ b/src/common/framecmn.cpp @@ -365,9 +365,7 @@ bool wxFrameBase::ShowMenuHelp(wxStatusBar *WXUNUSED(statbar), 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 ) @@ -380,7 +378,7 @@ bool wxFrameBase::ShowMenuHelp(wxStatusBar *WXUNUSED(statbar), int menuId) } } - DoGiveHelp(helpString, show); + DoGiveHelp(helpString); return !helpString.empty(); #else // !wxUSE_MENUS @@ -404,7 +402,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) { #if wxUSE_STATUSBAR if ( m_statusBarPane < 0 ) @@ -417,40 +415,26 @@ void wxFrameBase::DoGiveHelp(const wxString& text, bool show) if ( !statbar ) return; - wxString help; - if ( show ) + // 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 + // closed + // + // note that it would be logical to do this in OnMenuOpen() but under + // MSW we get an EVT_MENU_HIGHLIGHT before EVT_MENU_OPEN, strangely + // enough, and so this doesn't work and instead we use the ugly trick + // with using special m_oldStatusText value as "menu opened" (but it is + // arguably better than adding yet another member variable to wxFrame + // on all platforms) + if ( m_oldStatusText.empty() ) { - 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 - // closed - // - // note that it would be logical to do this in OnMenuOpen() but under - // MSW we get an EVT_MENU_HIGHLIGHT before EVT_MENU_OPEN, strangely - // enough, and so this doesn't work and instead we use the ugly trick - // with using special m_oldStatusText value as "menu opened" (but it is - // arguably better than adding yet another member variable to wxFrame - // on all platforms) + m_oldStatusText = statbar->GetStatusText(m_statusBarPane); if ( m_oldStatusText.empty() ) { - m_oldStatusText = statbar->GetStatusText(m_statusBarPane); - if ( m_oldStatusText.empty() ) - { - // use special value to prevent us from doing this the next time - m_oldStatusText += _T('\0'); - } + // use special value to prevent us from doing this the next time + m_oldStatusText += _T('\0'); } } - else // hide the status bar text - { - // i.e. restore the old one - help = m_oldStatusText; - - // make sure we get the up to date text when showing it the next time - m_oldStatusText.clear(); - } statbar->SetStatusText(help, m_statusBarPane); #else diff --git a/src/common/tbarbase.cpp b/src/common/tbarbase.cpp index a8ada3fa9b..8a63d697a0 100644 --- a/src/common/tbarbase.cpp +++ b/src/common/tbarbase.cpp @@ -631,10 +631,16 @@ void wxToolBarBase::OnMouseEnter(int id) if( frame ) { wxString help; - wxToolBarToolBase* tool = id == wxID_ANY ? (wxToolBarToolBase*)NULL : FindById(id); - if(tool) - help = tool->GetLongHelp(); - frame->DoGiveHelp( help, id != wxID_ANY ); + if ( id != wxID_ANY ) + { + const wxToolBarToolBase * const tool = FindById(id); + if ( tool ) + help = tool->GetLongHelp(); + } + + // do it even if help string is empty to avoid showing the help for the + // previously selected tool when another one is selected + frame->DoGiveHelp(help); } (void)GetEventHandler()->ProcessEvent(event); diff --git a/src/os2/frame.cpp b/src/os2/frame.cpp index f7ab688deb..ce171dc2e7 100644 --- a/src/os2/frame.cpp +++ b/src/os2/frame.cpp @@ -1055,7 +1055,7 @@ bool wxFrame::HandleMenuSelect( WXWORD nItem, } else { - DoGiveHelp(wxEmptyString, false); + DoGiveHelp(wxEmptyString); return false; } } -- 2.47.2