]> git.saurik.com Git - wxWidgets.git/commitdiff
Undid last commit and restored bool argument to wxFrame::DoGiveHelp() as
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 3 Apr 2007 18:04:44 +0000 (18:04 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 3 Apr 2007 18:04:44 +0000 (18:04 +0000)
removing it could silently break existing user code overriding this function.

Fix the problem with not restoring the original status bar text when the mouse
pointer left the toolbar by simply calling DoGiveHelp() with false as second
parameter only if there was no valid tool under mouse, not if the help string
(for a valid tool) was empty.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45240 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/frame.h
src/common/framecmn.cpp
src/common/tbarbase.cpp
src/msw/frame.cpp

index a9134b0a262add3c3d8175af3c4e0b832cafdb04..6740046652050054d2e20cdaba84de3784df41ad 100644 (file)
@@ -170,8 +170,9 @@ public:
 
 #if wxUSE_MENUS || wxUSE_TOOLBAR
     // show help text for the currently selected menu or toolbar item
-    // (typically in the status bar)
-    virtual void DoGiveHelp(const wxString& text);
+    // (typically in the status bar) or hide it and restore the status bar text
+    // originally shown before the menu was opened if show == false
+    virtual void DoGiveHelp(const wxString& text, bool show);
 #endif
 
 protected:
index 218239b815e9b54157100e8d99f8cc20de535a02..300c0798d277fa4a6757677541a06231a20d169a 100644 (file)
@@ -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
@@ -378,7 +367,7 @@ bool wxFrameBase::ShowMenuHelp(wxStatusBar *WXUNUSED(statbar), int menuId)
         }
     }
 
-    DoGiveHelp(helpString);
+    DoGiveHelp(helpString, true);
 
     return !helpString.empty();
 #else // !wxUSE_MENUS
@@ -402,7 +391,7 @@ void wxFrameBase::SetStatusBar(wxStatusBar *statBar)
 #endif // wxUSE_STATUSBAR
 
 #if wxUSE_MENUS || wxUSE_TOOLBAR
-void wxFrameBase::DoGiveHelp(const wxString& help)
+void wxFrameBase::DoGiveHelp(const wxString& help, bool show)
 {
 #if wxUSE_STATUSBAR
     if ( m_statusBarPane < 0 )
@@ -415,28 +404,39 @@ void wxFrameBase::DoGiveHelp(const wxString& help)
     if ( !statbar )
         return;
 
-    // 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() )
+    wxString text;
+    if ( show )
     {
-        m_oldStatusText = statbar->GetStatusText(m_statusBarPane);
+        // 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() )
         {
-            // use special value to prevent us from doing this the next time
-            m_oldStatusText += _T('\0');
+            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');
+            }
         }
+
+        text = help;
+    }
+    else // hide help, restore the original text
+    {
+        text = m_oldStatusText;
+        m_oldStatusText.clear();
     }
 
-    statbar->SetStatusText(help, m_statusBarPane);
+    statbar->SetStatusText(text, m_statusBarPane);
 #else
     wxUnusedVar(text);
     wxUnusedVar(show);
index 8a63d697a084c20c482960b308e5c3327d00c4a7..1e427b825fdd8ccf2f63001adfc02c3522c5f235 100644 (file)
@@ -628,7 +628,7 @@ void wxToolBarBase::OnMouseEnter(int id)
     event.SetInt(id);
 
     wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
-    if( frame )
+    if ( frame )
     {
         wxString help;
         if ( id != wxID_ANY )
@@ -638,9 +638,9 @@ void wxToolBarBase::OnMouseEnter(int id)
                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);
+        // call DoGiveHelp() even if help string is empty to avoid showing the
+        // help for the previously selected tool when another one is selected
+        frame->DoGiveHelp(help, id != wxID_ANY);
     }
 
     (void)GetEventHandler()->ProcessEvent(event);
index 300c0317ed0112939cc748801895c38d8f61f025..8f0ce449bc11cf5673bfe68be29604f70255e0cf 100644 (file)
@@ -1004,7 +1004,7 @@ bool wxFrame::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU hMenu)
         // items opening popup menus (they don't have them anyhow) but do clear
         // the status line - otherwise, we would be left with the help message
         // for the previous item which doesn't apply any more
-        DoGiveHelp(wxEmptyString);
+        DoGiveHelp(wxEmptyString, true);
 
         return false;
     }