]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix recursion problems when loading pages from a virtual file system using the WebKit...
authorSteve Lamerton <steve.lamerton@gmail.com>
Thu, 4 Aug 2011 08:30:37 +0000 (08:30 +0000)
committerSteve Lamerton <steve.lamerton@gmail.com>
Thu, 4 Aug 2011 08:30:37 +0000 (08:30 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/SOC2011_WEBVIEW@68515 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/webview_webkit.h
src/gtk/webview_webkit.cpp

index dd13885cbd65af33fc0fdaae02308cf880db25b9..14c7651be8adea903213c467dda160e323243875 100644 (file)
@@ -137,6 +137,10 @@ public:
      */
     bool m_busy;
 
+    //We use this flag to stop recursion when we load a page from the navigation
+    //callback, mainly when loading a VFS page
+    bool m_guard;
+
 protected:
 
     virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const;
index 23aec2a8a4999809ee618d2359c3746003d53229..dd478fe387135412b08e3021c493e26cc37fe062 100644 (file)
@@ -63,13 +63,19 @@ wxgtk_webview_webkit_load_status(GtkWidget* widget,
 }
 
 static gboolean
-wxgtk_webview_webkit_navigation(WebKitWebView *view,
+wxgtk_webview_webkit_navigation(WebKitWebView *,
                                 WebKitWebFrame *frame,
                                 WebKitNetworkRequest *request,
                                 WebKitWebNavigationAction *,
                                 WebKitWebPolicyDecision *policy_decision,
                                 wxWebViewWebKit *webKitCtrl)
 {
+    if(webKitCtrl->m_guard)
+    {
+        webKitCtrl->m_guard = false;
+        return FALSE;
+    }
+
     webKitCtrl->m_busy = true;
 
     const gchar* uri = webkit_network_request_get_uri(request);
@@ -108,14 +114,15 @@ wxgtk_webview_webkit_navigation(WebKitWebView *view,
         //ourselves
         if(handler)
         {
+            webKitCtrl->m_guard = true;
             wxFSFile* file = handler->GetFile(wxuri);
-            g_signal_handlers_block_by_func(view, 
-                                           (gpointer)wxgtk_webview_webkit_navigation, 
-                                           webKitCtrl);
-            webKitCtrl->SetPage(*file->GetStream(), wxuri);
-            g_signal_handlers_unblock_by_func(view, 
-                                             (gpointer)wxgtk_webview_webkit_navigation, 
-                                             webKitCtrl);
+            if(file)
+            {
+                webKitCtrl->SetPage(*file->GetStream(), wxuri);
+            }
+            //We need to throw some sort of error here if file is NULL
+            webkit_web_policy_decision_ignore(policy_decision);
+            return TRUE;
         }
         return FALSE;
     }
@@ -325,6 +332,7 @@ bool wxWebViewWebKit::Create(wxWindow *parent,
 {
     m_ready = false;
     m_busy = false;
+    m_guard = false;
 
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))