Changeset 107088 in webkit


Ignore:
Timestamp:
Feb 8, 2012 7:51:08 AM (12 years ago)
Author:
Carlos Garcia Campos
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.

Location:
trunk/Tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r107064 r107088  
     12012-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Open links in a new window when clicking with the middle button in MiniBrowser
     4        https://bugs.webkit.org/show_bug.cgi?id=78099
     5
     6        Reviewed by Martin Robinson.
     7
     8        * MiniBrowser/gtk/BrowserWindow.c:
     9        (webViewDecidePolicy): Check whether it's a link clicked with the
     10        middle mouse button and load the request in a new window.
     11        (browserWindowConstructed): Connect to
     12        WebKitWebView::decide-policy signal.
     13
    1142012-02-08  Ryosuke Niwa  <rniwa@webkit.org>
    215
  • trunk/Tools/MiniBrowser/gtk/BrowserWindow.c

    r104129 r107088  
    236236}
    237237
     238static gboolean webViewDecidePolicy(WebKitWebView *webView, WebKitPolicyDecision *decision, WebKitPolicyDecisionType decisionType, BrowserWindow *window)
     239{
     240    if (decisionType != WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION)
     241        return FALSE;
     242
     243    WebKitNavigationPolicyDecision *navigationDecision = WEBKIT_NAVIGATION_POLICY_DECISION(decision);
     244    if (webkit_navigation_policy_decision_get_navigation_type(navigationDecision) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED
     245        || webkit_navigation_policy_decision_get_mouse_button(navigationDecision) != 2)
     246        return FALSE;
     247
     248    WebKitWebView *newWebView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webkit_web_view_get_context(webView)));
     249    webkit_web_view_set_settings(newWebView, webkit_web_view_get_settings(webView));
     250    GtkWidget *newWindow = browser_window_new(newWebView);
     251    webkit_web_view_load_request(newWebView, webkit_navigation_policy_decision_get_request(navigationDecision));
     252    gtk_widget_show(newWindow);
     253
     254    webkit_policy_decision_ignore(decision);
     255    return TRUE;
     256}
     257
    238258static void browserWindowFinalize(GObject *gObject)
    239259{
     
    334354    g_signal_connect(window->webView, "create", G_CALLBACK(webViewCreate), window);
    335355    g_signal_connect(window->webView, "load-failed", G_CALLBACK(webViewLoadFailed), window);
     356    g_signal_connect(window->webView, "decide-policy", G_CALLBACK(webViewDecidePolicy), window);
    336357
    337358    WebKitBackForwardList *backForwadlist = webkit_web_view_get_back_forward_list(window->webView);
Note: See TracChangeset for help on using the changeset viewer.