X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/07b8d7ecc39cfc6cce17156b91c6de1cfb56ce5b..b9f933ab5d4a293790d0f5186c434229678c76ea:/src/html/helpctrl.cpp diff --git a/src/html/helpctrl.cpp b/src/html/helpctrl.cpp index 8067c8335a..b55d11fcb9 100644 --- a/src/html/helpctrl.cpp +++ b/src/html/helpctrl.cpp @@ -10,7 +10,7 @@ ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ -#pragma implementation +#pragma implementation "helpctrl.h" #endif // For compilers that support precompilation, includes "wx.h". @@ -20,7 +20,7 @@ #pragma hdrstop #endif -#if wxUSE_HTML && wxUSE_STREAMS +#if wxUSE_WXHTML_HELP #ifndef WX_PRECOMP #include "wx/app.h" @@ -30,8 +30,13 @@ #include "wx/html/helpctrl.h" #include "wx/busyinfo.h" +#ifdef __WXGTK__ + // for the hack in AddGrabIfNeeded() + #include "wx/dialog.h" +#endif // __WXGTK__ + #if wxUSE_HELP -#include "wx/tipwin.h" + #include "wx/tipwin.h" #endif IMPLEMENT_DYNAMIC_CLASS(wxHtmlHelpController, wxHelpControllerBase) @@ -96,6 +101,8 @@ bool wxHtmlHelpController::AddBook(const wxString& book, bool show_wait_msg) if (show_wait_msg) delete busy; #endif + if (m_helpFrame) + m_helpFrame->RefreshLists(); return retval; } @@ -195,7 +202,7 @@ bool wxHtmlHelpController::DisplaySection(int sectionNo) bool wxHtmlHelpController::DisplayTextPopup(const wxString& text, const wxPoint& WXUNUSED(pos)) { -#if wxUSE_HELP +#if wxUSE_TIPWINDOW static wxTipWindow* s_tipWindow = NULL; if (s_tipWindow) @@ -213,7 +220,8 @@ bool wxHtmlHelpController::DisplayTextPopup(const wxString& text, const wxPoint& return TRUE; } -#endif +#endif // wxUSE_TIPWINDOW + return FALSE; } @@ -248,4 +256,71 @@ bool wxHtmlHelpController::Quit() return TRUE; } -#endif +// Make the help controller's frame 'modal' if +// needed +void wxHtmlHelpController::AddGrabIfNeeded() +{ + // So far, wxGTK only +#ifdef __WXGTK__ + bool needGrab = FALSE; + + // Check if there are any modal windows present, + // in which case we need to add a grab. + for ( wxWindowList::Node * node = wxTopLevelWindows.GetFirst(); + node; + node = node->GetNext() ) + { + wxWindow *win = node->GetData(); + wxDialog *dialog = wxDynamicCast(win, wxDialog); + + if (dialog && dialog->IsModal()) + needGrab = TRUE; + } + + if (needGrab && m_helpFrame) + m_helpFrame->AddGrab(); +#endif // __WXGTK__ +} + +bool wxHtmlHelpController::Display(const wxString& x) +{ + CreateHelpWindow(); + bool success = m_helpFrame->Display(x); + AddGrabIfNeeded(); + return success; +} + +bool wxHtmlHelpController::Display(int id) +{ + CreateHelpWindow(); + bool success = m_helpFrame->Display(id); + AddGrabIfNeeded(); + return success; +} + +bool wxHtmlHelpController::DisplayContents() +{ + CreateHelpWindow(); + bool success = m_helpFrame->DisplayContents(); + AddGrabIfNeeded(); + return success; +} + +bool wxHtmlHelpController::DisplayIndex() +{ + CreateHelpWindow(); + bool success = m_helpFrame->DisplayIndex(); + AddGrabIfNeeded(); + return success; +} + +bool wxHtmlHelpController::KeywordSearch(const wxString& keyword) +{ + CreateHelpWindow(); + bool success = m_helpFrame->KeywordSearch(keyword); + AddGrabIfNeeded(); + return success; +} + +#endif // wxUSE_WXHTML_HELP +