]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/cshelp.cpp
Added part of patch
[wxWidgets.git] / src / common / cshelp.cpp
index 2a166280478bf2fda69f758d3c1ce53147d4d758..57cea314d25c3a7544ae53c6a0c674edd75fbfbb 100644 (file)
 
 #ifndef WX_PRECOMP
     #include "wx/app.h"
+    #include "wx/module.h"
 #endif
 
 #include "wx/tipwin.h"
-#include "wx/module.h"
 #include "wx/cshelp.h"
 
+// wxUSE_MS_HTML_HELP is not defined under platforms other than MSW
+#ifndef wxUSE_MS_HTML_HELP
+    #define wxUSE_MS_HTML_HELP 0
+#endif
+
+#if wxUSE_MS_HTML_HELP
+    #include "wx/msw/helpchm.h"     // for ShowContextHelpPopup
+    #include "wx/utils.h"           // for wxGetMousePosition()
+#endif
+
 // ----------------------------------------------------------------------------
 // wxContextHelpEvtHandler private class
 // ----------------------------------------------------------------------------
@@ -378,29 +388,46 @@ void wxSimpleHelpProvider::RemoveHelp(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;
-
+#if wxUSE_MS_HTML_HELP || wxUSE_TIPWINDOW
     const wxString text = GetHelpTextMaybeAtPoint(window);
+
     if ( !text.empty() )
     {
-        s_tipWindow = new wxTipWindow((wxWindow *)window, text,
-                                        100, &s_tipWindow);
+        // use the native help popup style if it's available
+#if wxUSE_MS_HTML_HELP
+        if ( !wxCHMHelpController::ShowContextHelpPopup
+                                   (
+                                        text,
+                                        wxGetMousePosition(),
+                                        (wxWindow *)window
+                                   ) )
+#endif // wxUSE_MS_HTML_HELP
+        {
+#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 = new wxTipWindow((wxWindow *)window, text,
+                                            100, &s_tipWindow);
+#else // !wxUSE_TIPWINDOW
+            // we tried wxCHMHelpController but it failed and we don't have
+            // wxTipWindow to fall back on, so
+            return false;
+#endif // wxUSE_TIPWINDOW
+        }
 
         return true;
     }
-#else
+#else // !wxUSE_MS_HTML_HELP && !wxUSE_TIPWINDOW
     wxUnusedVar(window);
-#endif // wxUSE_TIPWINDOW
+#endif // wxUSE_MS_HTML_HELP || wxUSE_TIPWINDOW
 
     return false;
 }