From 36b52591b51e425b57f60e1cbed9a51d2f5767d9 Mon Sep 17 00:00:00 2001 From: Steve Lamerton Date: Thu, 4 Aug 2011 08:30:37 +0000 Subject: [PATCH] Fix recursion problems when loading pages from a virtual file system using the WebKitGTK+ backend. Navigating through pages in an archive now works correctly. 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 | 4 ++++ src/gtk/webview_webkit.cpp | 24 ++++++++++++++++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/include/wx/gtk/webview_webkit.h b/include/wx/gtk/webview_webkit.h index dd13885cbd..14c7651be8 100644 --- a/include/wx/gtk/webview_webkit.h +++ b/include/wx/gtk/webview_webkit.h @@ -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; diff --git a/src/gtk/webview_webkit.cpp b/src/gtk/webview_webkit.cpp index 23aec2a8a4..dd478fe387 100644 --- a/src/gtk/webview_webkit.cpp +++ b/src/gtk/webview_webkit.cpp @@ -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 )) -- 2.47.2