X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d1c8aaa3ee8e2051ebd20042b7e59a511c276ca2..faec5a4383bb54f846c1eae142353804eb88d956:/src/common/cshelp.cpp?ds=sidebyside diff --git a/src/common/cshelp.cpp b/src/common/cshelp.cpp index 805ada8bff..3921a21c96 100644 --- a/src/common/cshelp.cpp +++ b/src/common/cshelp.cpp @@ -161,35 +161,30 @@ bool wxContextHelp::EventLoop() bool wxContextHelpEvtHandler::ProcessEvent(wxEvent& event) { - switch (event.GetEventType()) + if (event.GetEventType() == wxEVT_LEFT_DOWN) { - case wxEVT_LEFT_DOWN: - { - //wxMouseEvent& mouseEvent = (wxMouseEvent&) event; - m_contextHelp->SetStatus(TRUE); - m_contextHelp->EndContextHelp(); - return TRUE; - break; - } - case wxEVT_CHAR: - case wxEVT_KEY_DOWN: - case wxEVT_ACTIVATE: - case wxEVT_MOUSE_CAPTURE_CHANGED: - { - m_contextHelp->SetStatus(FALSE); - m_contextHelp->EndContextHelp(); - return TRUE; - break; - } - case wxEVT_PAINT: - case wxEVT_ERASE_BACKGROUND: - { - event.Skip(); - return FALSE; - break; - } + m_contextHelp->SetStatus(TRUE); + m_contextHelp->EndContextHelp(); + return TRUE; } - + + if ((event.GetEventType() == wxEVT_CHAR) || + (event.GetEventType() == wxEVT_KEY_DOWN) || + (event.GetEventType() == wxEVT_ACTIVATE) || + (event.GetEventType() == wxEVT_MOUSE_CAPTURE_CHANGED)) + { + m_contextHelp->SetStatus(FALSE); + m_contextHelp->EndContextHelp(); + return TRUE; + } + + if ((event.GetEventType() == wxEVT_PAINT) || + (event.GetEventType() == wxEVT_ERASE_BACKGROUND)) + { + event.Skip(); + return FALSE; + } + return TRUE; } @@ -310,10 +305,21 @@ void wxSimpleHelpProvider::AddHelp(wxWindowID id, const wxString& text) bool wxSimpleHelpProvider::ShowHelp(wxWindowBase *window) { + 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() ) { - new wxTipWindow((wxWindow *)window, text); + s_tipWindow = new wxTipWindow((wxWindow *)window, text, 100, & s_tipWindow); return TRUE; }