diff options
author | Xan Lopez <xan@gnome.org> | 2009-09-19 02:41:47 +0800 |
---|---|---|
committer | Xan Lopez <xan@gnome.org> | 2009-09-19 02:43:14 +0800 |
commit | cbf6a41f26febe635939eb84ea13abf1bd0e333f (patch) | |
tree | 60746cbb2f356edc0cd1c062a0df4c62622d5748 /src | |
parent | 99d6449daf5e4e4fa70862c9fa36b8c51935ac0b (diff) | |
download | gsoc2013-epiphany-cbf6a41f26febe635939eb84ea13abf1bd0e333f.tar gsoc2013-epiphany-cbf6a41f26febe635939eb84ea13abf1bd0e333f.tar.gz gsoc2013-epiphany-cbf6a41f26febe635939eb84ea13abf1bd0e333f.tar.bz2 gsoc2013-epiphany-cbf6a41f26febe635939eb84ea13abf1bd0e333f.tar.lz gsoc2013-epiphany-cbf6a41f26febe635939eb84ea13abf1bd0e333f.tar.xz gsoc2013-epiphany-cbf6a41f26febe635939eb84ea13abf1bd0e333f.tar.zst gsoc2013-epiphany-cbf6a41f26febe635939eb84ea13abf1bd0e333f.zip |
ephy-window.c: reimplement middle-click clipboard to open link
Uses the new WebKitHitTestResult APIs landed in WebKitGTK+ r48505.
Diffstat (limited to 'src')
-rw-r--r-- | src/ephy-window.c | 84 |
1 files changed, 26 insertions, 58 deletions
diff --git a/src/ephy-window.c b/src/ephy-window.c index 635a7798b..b0d6d4a95 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -2248,31 +2248,7 @@ tab_context_menu_cb (EphyWebView *view, return TRUE; } -static gboolean -open_link_in_new (EphyWindow *window, - const char *link_address, - guint state, - EphyEmbed *embed) -{ - EphyEmbed *dest; - - if (!ephy_embed_utils_address_has_web_scheme (link_address)) return FALSE; - - dest = ephy_link_open (EPHY_LINK (window), link_address, embed, - state & GDK_SHIFT_MASK ? EPHY_LINK_NEW_WINDOW - : EPHY_LINK_NEW_TAB); - - if (dest) - { - ephy_web_view_copy_back_history (EPHY_WEB_VIEW (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed)), - EPHY_WEB_VIEW (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (dest))); - - return TRUE; - } - - return FALSE; -} - +#if 0 static gboolean save_property_url (EphyEmbed *embed, EphyEmbedEvent *event, @@ -2302,6 +2278,7 @@ save_property_url (EphyEmbed *embed, return TRUE; } +#endif typedef struct { @@ -2329,27 +2306,26 @@ clipboard_text_received_cb (GtkClipboard *clipboard, } static gboolean -ephy_window_dom_mouse_click_cb (EphyEmbed *embed, - EphyEmbedEvent *event, +ephy_window_dom_mouse_click_cb (WebKitWebView *view, + GdkEventButton *event, EphyWindow *window) { - EphyEmbedEventContext context; - guint button, modifier; + guint button, modifier, context; gboolean handled = TRUE; gboolean with_control, with_shift, with_shift_control; gboolean is_left_click, is_middle_click; gboolean is_link, is_image, is_middle_clickable; gboolean middle_click_opens; gboolean is_input; + WebKitHitTestResult *hit_test_result; - g_return_val_if_fail (EPHY_IS_EMBED_EVENT (event), FALSE); + hit_test_result = webkit_web_view_get_hit_test_result (view, event); + button = event->button; + modifier = event->state; + g_object_get (hit_test_result, "context", &context, NULL); - button = ephy_embed_event_get_button (event); - context = ephy_embed_event_get_context (event); - modifier = ephy_embed_event_get_modifier (event); - - LOG ("ephy_window_dom_mouse_click_cb: button %d, context %x, modifier %x", - button, context, modifier); + LOG ("ephy_window_dom_mouse_click_cb: button %d, context %d, modifier %d (%d:%d)", + button, context, modifier, (int)event->x, (int)event->y); with_control = (modifier & GDK_CONTROL_MASK) == GDK_CONTROL_MASK; with_shift = (modifier & GDK_SHIFT_MASK) == GDK_SHIFT_MASK; @@ -2362,27 +2338,15 @@ ephy_window_dom_mouse_click_cb (EphyEmbed *embed, eel_gconf_get_boolean (CONF_INTERFACE_MIDDLE_CLICK_OPEN_URL) && !eel_gconf_get_boolean (CONF_LOCKDOWN_DISABLE_ARBITRARY_URL); - is_link = (context & EPHY_EMBED_CONTEXT_LINK) != 0; - is_image = (context & EPHY_EMBED_CONTEXT_IMAGE) != 0; - is_middle_clickable = !((context & EPHY_EMBED_CONTEXT_LINK) - || (context & EPHY_EMBED_CONTEXT_INPUT) - || (context & EPHY_EMBED_CONTEXT_EMAIL_LINK)); - is_input = (context & EPHY_EMBED_CONTEXT_INPUT) != 0; - - /* ctrl+click or middle click opens the link in new tab */ - if (is_link && - ((is_left_click && (with_control || with_shift_control)) || - is_middle_click)) - { - const GValue *value; - const char *link_address; + is_link = (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) != 0; + is_image = (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE) != 0; + is_middle_clickable = !((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) + || (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE)); + is_input = (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE) != 0; - value = ephy_embed_event_get_property (event, "link"); - link_address = g_value_get_string (value); - handled = open_link_in_new (window, link_address, modifier, embed); - } +#if 0 /* shift+click saves the link target */ - else if (is_link && is_left_click && with_shift) + if (is_link && is_left_click && with_shift) { handled = save_property_url (embed, event, "link", CONF_STATE_SAVE_DIR); } @@ -2393,8 +2357,9 @@ ephy_window_dom_mouse_click_cb (EphyEmbed *embed, { handled = save_property_url (embed, event, "image", CONF_STATE_SAVE_IMAGE_DIR); } +#endif /* middle click opens the selection url */ - else if (is_middle_clickable && is_middle_click && middle_click_opens) + if (is_middle_clickable && is_middle_click && middle_click_opens) { /* See bug #133633 for why we do it this way */ @@ -2402,8 +2367,11 @@ ephy_window_dom_mouse_click_cb (EphyEmbed *embed, * requesting the clipboard contents, and receiving them. */ ClipboardTextCBData *cb_data; + EphyEmbed *embed; EphyEmbed **embed_ptr; - + + embed = EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW (view); + cb_data = g_slice_new0 (ClipboardTextCBData); cb_data->embed = embed; cb_data->window = window; @@ -2853,7 +2821,7 @@ ephy_window_set_active_tab (EphyWindow *window, EphyEmbed *new_embed) g_signal_connect_object (view, "notify::progress", G_CALLBACK (sync_tab_load_progress), window, 0); - g_signal_connect_object (view, "ge_dom_mouse_click", + g_signal_connect_object (view, "button-press-event", G_CALLBACK (ephy_window_dom_mouse_click_cb), window, 0); g_signal_connect_object (view, "notify::visibility", |