]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/cshelp.cpp
patch from Dimitri fixing crashes when decoding the invalid GIFs
[wxWidgets.git] / src / common / cshelp.cpp
index 60e595f156e3e4ae7127ca9c24478c796aad3140..ba35623830a676c58ae3cdb2e13611f5c421a81b 100644 (file)
@@ -167,7 +167,7 @@ bool wxContextHelpEvtHandler::ProcessEvent(wxEvent& event)
         m_contextHelp->EndContextHelp();
         return TRUE;
     }
         m_contextHelp->EndContextHelp();
         return TRUE;
     }
-    
+
     if ((event.GetEventType() == wxEVT_CHAR) ||
         (event.GetEventType() == wxEVT_KEY_DOWN) ||
         (event.GetEventType() == wxEVT_ACTIVATE) ||
     if ((event.GetEventType() == wxEVT_CHAR) ||
         (event.GetEventType() == wxEVT_KEY_DOWN) ||
         (event.GetEventType() == wxEVT_ACTIVATE) ||
@@ -177,14 +177,14 @@ bool wxContextHelpEvtHandler::ProcessEvent(wxEvent& event)
         m_contextHelp->EndContextHelp();
         return TRUE;
     }
         m_contextHelp->EndContextHelp();
         return TRUE;
     }
-    
+
     if ((event.GetEventType() == wxEVT_PAINT) ||
         (event.GetEventType() == wxEVT_ERASE_BACKGROUND))
     {
         event.Skip();
         return FALSE;
     }
     if ((event.GetEventType() == wxEVT_PAINT) ||
         (event.GetEventType() == wxEVT_ERASE_BACKGROUND))
     {
         event.Skip();
         return FALSE;
     }
-    
+
     return TRUE;
 }
 
     return TRUE;
 }
 
@@ -198,7 +198,7 @@ bool wxContextHelp::DispatchEvent(wxWindow* win, const wxPoint& pt)
         wxHelpEvent helpEvent(wxEVT_HELP, subjectOfHelp->GetId(), pt) ;
         helpEvent.SetEventObject(this);
         eventProcessed = win->GetEventHandler()->ProcessEvent(helpEvent);
         wxHelpEvent helpEvent(wxEVT_HELP, subjectOfHelp->GetId(), pt) ;
         helpEvent.SetEventObject(this);
         eventProcessed = win->GetEventHandler()->ProcessEvent(helpEvent);
-        
+
         // Go up the window hierarchy until the event is handled (or not).
         // I.e. keep submitting ancestor windows until one is recognised
         // by the app code that processes the ids and displays help.
         // Go up the window hierarchy until the event is handled (or not).
         // I.e. keep submitting ancestor windows until one is recognised
         // by the app code that processes the ids and displays help.
@@ -251,7 +251,7 @@ wxContextHelpButton::wxContextHelpButton(wxWindow* parent,
 {
 }
 
 {
 }
 
-void wxContextHelpButton::OnContextHelp(wxCommandEvent& event)
+void wxContextHelpButton::OnContextHelp(wxCommandEvent& WXUNUSED(event))
 {
     wxContextHelp contextHelp(GetParent());
 }
 {
     wxContextHelp contextHelp(GetParent());
 }
@@ -305,13 +305,26 @@ void wxSimpleHelpProvider::AddHelp(wxWindowID id, const wxString& text)
 
 bool wxSimpleHelpProvider::ShowHelp(wxWindowBase *window)
 {
 
 bool wxSimpleHelpProvider::ShowHelp(wxWindowBase *window)
 {
+#if wxUSE_TIPWINDOW
+    static wxTipWindow* s_tipWindow = NULL;
+
+    if (s_tipWindow)
+    {
+        // Prevent s_tipWindow being nulled in OnIdle,
+        // thereby removing the chance for the window to be closed by ShowHelp
+        s_tipWindow->SetTipWindowPtr(NULL);
+        s_tipWindow->Close();
+    }
+    s_tipWindow = NULL;
+
     wxString text = GetHelp(window);
     if ( !text.empty() )
     {
     wxString text = GetHelp(window);
     if ( !text.empty() )
     {
-        new wxTipWindow((wxWindow *)window, text);
+        s_tipWindow = new wxTipWindow((wxWindow *)window, text, 100, & s_tipWindow);
 
         return TRUE;
     }
 
         return TRUE;
     }
+#endif // wxUSE_TIPWINDOW
 
     return FALSE;
 }
 
     return FALSE;
 }