Title: [107088] trunk/Tools
Revision
107088
Author
carlo...@webkit.org
Date
2012-02-08 07:51:08 -0800 (Wed, 08 Feb 2012)

Log Message

[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.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (107087 => 107088)


--- trunk/Tools/ChangeLog	2012-02-08 15:48:51 UTC (rev 107087)
+++ trunk/Tools/ChangeLog	2012-02-08 15:51:08 UTC (rev 107088)
@@ -1,3 +1,16 @@
+2012-02-08  Carlos Garcia Campos  <cgar...@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  <rn...@webkit.org>
 
         Revert a part of the change in r106687 as a build fix.

Modified: trunk/Tools/MiniBrowser/gtk/BrowserWindow.c (107087 => 107088)


--- trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2012-02-08 15:48:51 UTC (rev 107087)
+++ trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2012-02-08 15:51:08 UTC (rev 107088)
@@ -235,6 +235,26 @@
     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);
@@ -333,6 +353,7 @@
     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);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to