X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77d4384e31b10791b3b074b9874c73f5df004556..baaae89f09ece7ab8a17570ee535683b9d14aeda:/src/common/cshelp.cpp diff --git a/src/common/cshelp.cpp b/src/common/cshelp.cpp index 60e595f156..43ebbef496 100644 --- a/src/common/cshelp.cpp +++ b/src/common/cshelp.cpp @@ -87,6 +87,27 @@ wxContextHelp::~wxContextHelp() EndContextHelp(); } +// Not currently needed, but on some systems capture may not work as +// expected so we'll leave it here for now. +#if 0 +static void wxPushOrPopEventHandlers(wxContextHelp* help, wxWindow* win, bool push) +{ + if (push) + win->PushEventHandler(new wxContextHelpEvtHandler(help)); + else + win->PopEventHandler(); + + wxNode* node = win->GetChildren().First(); + while (node) + { + wxWindow* child = (wxWindow*) node->Data(); + wxPushOrPopEventHandlers(help, child, push); + + node = node->Next(); + } +} +#endif + // Begin 'context help mode' bool wxContextHelp::BeginContextHelp(wxWindow* win) { @@ -103,7 +124,10 @@ bool wxContextHelp::BeginContextHelp(wxWindow* win) // wxSetCursor(cursor); #endif + m_status = FALSE; + win->PushEventHandler(new wxContextHelpEvtHandler(this)); + //wxPushOrPopEventHandlers(this, win, TRUE); win->CaptureMouse(); @@ -112,6 +136,7 @@ bool wxContextHelp::BeginContextHelp(wxWindow* win) win->ReleaseMouse(); win->PopEventHandler(TRUE); + //wxPushOrPopEventHandlers(this, win, FALSE); win->SetCursor(oldCursor); @@ -167,24 +192,25 @@ bool wxContextHelpEvtHandler::ProcessEvent(wxEvent& event) 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); + // May have already been set to TRUE by a left-click + //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; } @@ -198,7 +224,7 @@ bool wxContextHelp::DispatchEvent(wxWindow* win, const wxPoint& pt) 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. @@ -218,7 +244,7 @@ bool wxContextHelp::DispatchEvent(wxWindow* win, const wxPoint& pt) */ #if !defined(__WXMSW__) -static char * csquery_xpm[] = { +static const char * csquery_xpm[] = { "12 11 2 1", " c None", ". c #000000", @@ -251,7 +277,7 @@ wxContextHelpButton::wxContextHelpButton(wxWindow* parent, { } -void wxContextHelpButton::OnContextHelp(wxCommandEvent& event) +void wxContextHelpButton::OnContextHelp(wxCommandEvent& WXUNUSED(event)) { wxContextHelp contextHelp(GetParent()); } @@ -305,13 +331,26 @@ void wxSimpleHelpProvider::AddHelp(wxWindowID id, const wxString& text) 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() ) { - new wxTipWindow((wxWindow *)window, text); + s_tipWindow = new wxTipWindow((wxWindow *)window, text, 100, & s_tipWindow); return TRUE; } +#endif // wxUSE_TIPWINDOW return FALSE; }