From 529161e84c5106359ee5fdb9f6db32551f6fa365 Mon Sep 17 00:00:00 2001 From: Daniel Carl Date: Wed, 26 Mar 2014 23:10:52 +0100 Subject: [PATCH] Fixed segfault on open new window via context-menu (#72). --- src/main.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index cdab2db..5b7cd54 100644 --- a/src/main.c +++ b/src/main.c @@ -63,7 +63,10 @@ static gboolean new_window_policy_cb( WebKitWebView *view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navig, WebKitWebPolicyDecision *policy); static WebKitWebView *create_web_view_cb(WebKitWebView *view, WebKitWebFrame *frame); -static void create_web_view_received_uri_cb(WebKitWebView *view); +static gboolean create_web_view_received_uri_cb(WebKitWebView *view, + WebKitWebFrame *frame, WebKitNetworkRequest *request, + WebKitWebNavigationAction *action, WebKitWebPolicyDecision *policy, + gpointer data); static void hover_link_cb(WebKitWebView *webview, const char *title, const char *link); static void title_changed_cb(WebKitWebView *webview, WebKitWebFrame *frame, const char *title); static gboolean mimetype_decision_cb(WebKitWebView *webview, @@ -881,18 +884,24 @@ static WebKitWebView *create_web_view_cb(WebKitWebView *view, WebKitWebFrame *fr WebKitWebView *new = WEBKIT_WEB_VIEW(webkit_web_view_new()); /* wait until the new webview receives its new URI */ - g_signal_connect(new, "notify::uri", G_CALLBACK(create_web_view_received_uri_cb), NULL); + g_signal_connect(new, "navigation-policy-decision-requested", G_CALLBACK(create_web_view_received_uri_cb), NULL); return new; } -static void create_web_view_received_uri_cb(WebKitWebView *view) +static gboolean create_web_view_received_uri_cb(WebKitWebView *view, + WebKitWebFrame *frame, WebKitNetworkRequest *request, + WebKitWebNavigationAction *action, WebKitWebPolicyDecision *policy, + gpointer data) { - Arg a = {VB_TARGET_NEW, (char*)webkit_web_view_get_uri(view)}; + Arg a = {VB_TARGET_NEW, (char*)webkit_network_request_get_uri(request)}; + vb_load_uri(&a); + /* destroy temporary webview */ - webkit_web_view_stop_loading(view); gtk_widget_destroy(GTK_WIDGET(view)); - vb_load_uri(&a); + + /* mark that we handled the signal */ + return true; } static void hover_link_cb(WebKitWebView *webview, const char *title, const char *link) -- 2.20.1