aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ephy-window.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 98696ad09..5587f9248 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -2481,6 +2481,42 @@ create_web_view_cb (WebKitWebView *web_view,
return new_web_view;
}
+static gboolean
+navigation_policy_decision_required_cb (WebKitWebView *web_view,
+ WebKitWebFrame *web_frame,
+ WebKitNetworkRequest *request,
+ WebKitWebNavigationAction *action,
+ WebKitWebPolicyDecision *decision,
+ EphyWindow *window)
+{
+ WebKitWebNavigationReason reason;
+ gint button;
+
+ reason = webkit_web_navigation_action_get_reason (action);
+ button = webkit_web_navigation_action_get_button (action);
+
+ if (reason == WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED &&
+ button == 2 /* middle button */) {
+ const char *uri;
+ EphyEmbed *embed;
+
+ uri = webkit_network_request_get_uri (request);
+ embed = ephy_embed_container_get_active_child
+ (EPHY_EMBED_CONTAINER (window));
+
+ ephy_shell_new_tab (ephy_shell_get_default (),
+ window,
+ embed,
+ uri,
+ EPHY_NEW_TAB_IN_EXISTING_WINDOW |
+ EPHY_NEW_TAB_OPEN_PAGE);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static void
ephy_window_set_active_tab (EphyWindow *window, EphyEmbed *new_embed)
{
@@ -2510,6 +2546,9 @@ ephy_window_set_active_tab (EphyWindow *window, EphyEmbed *new_embed)
g_signal_handlers_disconnect_by_func (web_view,
G_CALLBACK (create_web_view_cb),
window);
+ g_signal_handlers_disconnect_by_func (web_view,
+ G_CALLBACK (navigation_policy_decision_required_cb),
+ window);
g_signal_handlers_disconnect_by_func (embed,
G_CALLBACK (sync_tab_popup_windows),
@@ -2594,6 +2633,9 @@ ephy_window_set_active_tab (EphyWindow *window, EphyEmbed *new_embed)
g_signal_connect_object (web_view, "create-web-view",
G_CALLBACK (create_web_view_cb),
window, 0);
+ g_signal_connect_object (web_view, "navigation-policy-decision-requested",
+ G_CALLBACK (navigation_policy_decision_required_cb),
+ window, 0);
g_signal_connect_object (embed, "notify::hidden-popup-count",
G_CALLBACK (sync_tab_popup_windows),