diff options
author | Gustavo Noronha Silva <gns@gnome.org> | 2013-03-16 10:58:09 +0800 |
---|---|---|
committer | Gustavo Noronha Silva <gns@gnome.org> | 2013-03-19 20:47:59 +0800 |
commit | 10f300b27a14c450c9a20b12c23f4e542942655c (patch) | |
tree | 628ad29531c841bb63b5e55638a39f2cea628f0f | |
parent | 62c163a3a9d84ea993d24cc0dbfd1324066f6e3c (diff) | |
download | gsoc2013-epiphany-10f300b27a14c450c9a20b12c23f4e542942655c.tar.gz gsoc2013-epiphany-10f300b27a14c450c9a20b12c23f4e542942655c.tar.zst gsoc2013-epiphany-10f300b27a14c450c9a20b12c23f4e542942655c.zip |
Load back item when back is clicked with control held/middle clicked, for wk2
In WebKit2 the back/forward list is not copiable, so that assumption
doesn't hold, and the current code path fails. With this change we
tell EphyShell to not copy the list and load the URL held by the back
item of the existing WebView in the new WebView instead, for WebKit2.
https://bugzilla.gnome.org/show_bug.cgi?id=695951
-rw-r--r-- | src/ephy-navigation-history-action.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/ephy-navigation-history-action.c b/src/ephy-navigation-history-action.c index ce53df929..dec229011 100644 --- a/src/ephy-navigation-history-action.c +++ b/src/ephy-navigation-history-action.c @@ -106,6 +106,29 @@ action_activate (GtkAction *action) if (history_action->priv->direction == EPHY_NAVIGATION_HISTORY_DIRECTION_BACK) { if (ephy_gui_is_middle_click () || ephy_link_action_get_button (EPHY_LINK_ACTION (history_action)) == 2) { + /* FIXME: in WebKit2 the back/forward list is immutable, so we are not able to + * copy it. Ideally the webkit1 code path should also work for webkit2. */ +#ifdef HAVE_WEBKIT2 + const char *back_uri; + WebKitBackForwardList *history; + WebKitBackForwardListItem *back_item; + + history = webkit_web_view_get_back_forward_list (web_view); + back_item = webkit_back_forward_list_get_back_item (history); + back_uri = webkit_back_forward_list_item_get_original_uri (back_item); + + embed = ephy_shell_new_tab (ephy_shell_get_default (), + EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))), + NULL, + NULL, + EPHY_NEW_TAB_IN_EXISTING_WINDOW | EPHY_NEW_TAB_DONT_COPY_HISTORY); + + web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed); + webkit_web_view_load_uri (web_view, back_uri); + gtk_widget_grab_focus (GTK_WIDGET (embed)); + return; + } +#else embed = ephy_shell_new_tab (ephy_shell_get_default (), EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))), embed, @@ -113,6 +136,8 @@ action_activate (GtkAction *action) EPHY_NEW_TAB_IN_EXISTING_WINDOW); web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed); } +#endif + webkit_web_view_go_back (web_view); gtk_widget_grab_focus (GTK_WIDGET (embed)); } else if (history_action->priv->direction == EPHY_NAVIGATION_HISTORY_DIRECTION_FORWARD) { |