Title: [90551] trunk/Tools
Revision
90551
Author
carlo...@webkit.org
Date
2011-07-07 03:29:19 -0700 (Thu, 07 Jul 2011)

Log Message

2011-07-07  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=63988

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed):
        (decidePolicyForNavigationAction): Ignore the action if a link is
        clicked with the middle buttonm and open the link in a new window.
        (browserWindowPolicyClientInit):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (90550 => 90551)


--- trunk/Tools/ChangeLog	2011-07-07 09:06:37 UTC (rev 90550)
+++ trunk/Tools/ChangeLog	2011-07-07 10:29:19 UTC (rev 90551)
@@ -1,3 +1,16 @@
+2011-07-07  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=63988
+
+        Reviewed by Martin Robinson.
+
+        * MiniBrowser/gtk/BrowserWindow.c:
+        (browserWindowConstructed):
+        (decidePolicyForNavigationAction): Ignore the action if a link is
+        clicked with the middle buttonm and open the link in a new window.
+        (browserWindowPolicyClientInit):
+
 2011-07-07  Adam Barth  <aba...@webkit.org>
 
         Remove style_references.py

Modified: trunk/Tools/MiniBrowser/gtk/BrowserWindow.c (90550 => 90551)


--- trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2011-07-07 09:06:37 UTC (rev 90550)
+++ trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2011-07-07 10:29:19 UTC (rev 90551)
@@ -56,6 +56,7 @@
 
 static void browserWindowLoaderClientInit(BrowserWindow*);
 static void browserWindowUIClientInit(BrowserWindow*);
+static void browserWindowPolicyClientInit(BrowserWindow*);
 
 static gint windowCount = 0;
 
@@ -183,6 +184,7 @@
 
     browserWindowLoaderClientInit(window);
     browserWindowUIClientInit(window);
+    browserWindowPolicyClientInit(window);
 }
 
 static void browser_window_class_init(BrowserWindowClass* klass)
@@ -654,6 +656,37 @@
     WKPageSetPageUIClient(WKViewGetPage(window->webView), &uiClient);
 }
 
+static void decidePolicyForNavigationAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
+{
+    if (navigationType != kWKFrameNavigationTypeLinkClicked || mouseButton != kWKEventMouseButtonMiddleButton) {
+        WKFramePolicyListenerUse(listener);
+        return;
+    }
+
+    WKViewRef webView = WKViewCreate(WKPageGetContext(page), 0);
+    GtkWidget *window = browser_window_new(webView);
+    WKURLRef url = ""
+    WKPageLoadURL(WKViewGetPage(webView), url);
+    WKRelease(url);
+    gtk_widget_grab_focus(GTK_WIDGET(webView));
+    gtk_widget_show(window);
+
+    WKFramePolicyListenerIgnore(listener);
+}
+
+static void browserWindowPolicyClientInit(BrowserWindow* window)
+{
+    WKPagePolicyClient policyClient = {
+        kWKPagePolicyClientCurrentVersion,
+        window, /* clientInfo */
+        decidePolicyForNavigationAction,
+        0,      /* decidePolicyForNewWindowAction */
+        0,      /* decidePolicyForResponse */
+        0       /* unableToImplementPolicy */
+    };
+    WKPageSetPagePolicyClient(WKViewGetPage(window->webView), &policyClient);
+}
+
 // Public API.
 GtkWidget* browser_window_new(WKViewRef view)
 {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to