+2012-02-08 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ [GTK] Open links in a new window when clicking with the middle button in MiniBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=78099
+
+ Reviewed by Martin Robinson.
+
+ * MiniBrowser/gtk/BrowserWindow.c:
+ (webViewDecidePolicy): Check whether it's a link clicked with the
+ middle mouse button and load the request in a new window.
+ (browserWindowConstructed): Connect to
+ WebKitWebView::decide-policy signal.
+
2012-02-08 Ryosuke Niwa <rniwa@webkit.org>
Revert a part of the change in r106687 as a build fix.
return FALSE;
}
+static gboolean webViewDecidePolicy(WebKitWebView *webView, WebKitPolicyDecision *decision, WebKitPolicyDecisionType decisionType, BrowserWindow *window)
+{
+ if (decisionType != WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION)
+ return FALSE;
+
+ WebKitNavigationPolicyDecision *navigationDecision = WEBKIT_NAVIGATION_POLICY_DECISION(decision);
+ if (webkit_navigation_policy_decision_get_navigation_type(navigationDecision) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED
+ || webkit_navigation_policy_decision_get_mouse_button(navigationDecision) != 2)
+ return FALSE;
+
+ WebKitWebView *newWebView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webkit_web_view_get_context(webView)));
+ webkit_web_view_set_settings(newWebView, webkit_web_view_get_settings(webView));
+ GtkWidget *newWindow = browser_window_new(newWebView);
+ webkit_web_view_load_request(newWebView, webkit_navigation_policy_decision_get_request(navigationDecision));
+ gtk_widget_show(newWindow);
+
+ webkit_policy_decision_ignore(decision);
+ return TRUE;
+}
+
static void browserWindowFinalize(GObject *gObject)
{
G_OBJECT_CLASS(browser_window_parent_class)->finalize(gObject);
g_signal_connect(window->webView, "notify::title", G_CALLBACK(webViewTitleChanged), window);
g_signal_connect(window->webView, "create", G_CALLBACK(webViewCreate), window);
g_signal_connect(window->webView, "load-failed", G_CALLBACK(webViewLoadFailed), window);
+ g_signal_connect(window->webView, "decide-policy", G_CALLBACK(webViewDecidePolicy), window);
WebKitBackForwardList *backForwadlist = webkit_web_view_get_back_forward_list(window->webView);
g_signal_connect(backForwadlist, "changed", G_CALLBACK(backForwadlistChanged), window);