diff options
Diffstat (limited to 'embed')
-rw-r--r-- | embed/ephy-embed-private.h | 11 | ||||
-rw-r--r-- | embed/ephy-embed.c | 20 | ||||
-rw-r--r-- | embed/ephy-web-view.c | 37 |
3 files changed, 62 insertions, 6 deletions
diff --git a/embed/ephy-embed-private.h b/embed/ephy-embed-private.h index 17c6ad857..34ba6bcb1 100644 --- a/embed/ephy-embed-private.h +++ b/embed/ephy-embed-private.h @@ -22,9 +22,14 @@ #error "Only <epiphany/epiphany.h> can be included directly." #endif +#include "ephy-history-types.h" +#include "ephy-web-view.h" + #ifndef EPHY_EMBED_PRIVATE_H #define EPHY_EMBED_PRIVATE_H +G_BEGIN_DECLS + /* EphyWebView */ #define EPHY_WEB_VIEW_NON_SEARCH_REGEX "(" \ @@ -39,6 +44,12 @@ "^file:.*$" \ ")" +void ephy_web_view_set_visit_type (EphyWebView *view, + EphyHistoryPageVisitType visit_type); + +EphyHistoryPageVisitType ephy_web_view_get_visit_type (EphyWebView *view); + +G_END_DECLS #endif diff --git a/embed/ephy-embed.c b/embed/ephy-embed.c index 205f2573b..f1c4c87d5 100644 --- a/embed/ephy-embed.c +++ b/embed/ephy-embed.c @@ -31,6 +31,7 @@ #include "ephy-download.h" #include "ephy-embed-event.h" #include "ephy-embed-prefs.h" +#include "ephy-embed-private.h" #include "ephy-embed-shell.h" #include "ephy-embed-single.h" #include "ephy-embed-utils.h" @@ -316,32 +317,39 @@ remove_from_destroy_list_cb (GtkWidget *widget, EphyEmbed *embed) } static void -load_status_changed_cb (WebKitWebView *view, +load_status_changed_cb (WebKitWebView *web_view, GParamSpec *spec, EphyEmbed *embed) { - WebKitLoadStatus status = webkit_web_view_get_load_status (view); + WebKitLoadStatus status = webkit_web_view_get_load_status (web_view); if (status == WEBKIT_LOAD_COMMITTED) { const gchar* uri; char *history_uri; + EphyHistoryPageVisitType visit_type; + EphyWebView *view = EPHY_WEB_VIEW (web_view); - uri = webkit_web_view_get_uri (view); + uri = webkit_web_view_get_uri (web_view); ephy_embed_destroy_top_widgets (embed); restore_zoom_level (embed, uri); - if (ephy_web_view_is_loading_homepage (EPHY_WEB_VIEW (view))) + if (ephy_web_view_is_loading_homepage (view)) return; - /* TODO: move the normaliztion down to the history service? */ + /* TODO: move the normalization down to the history service? */ if (g_str_has_prefix (uri, EPHY_ABOUT_SCHEME)) history_uri = g_strdup_printf ("about:%s", uri + EPHY_ABOUT_SCHEME_LEN + 1); else history_uri = g_strdup (uri); - ephy_history_service_visit_url (embed->priv->history_service, history_uri); + visit_type = ephy_web_view_get_visit_type (view); + + ephy_history_service_visit_url (embed->priv->history_service, + history_uri, + visit_type); + g_free (history_uri); } } diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c index de26f42d6..3314e4271 100644 --- a/embed/ephy-web-view.c +++ b/embed/ephy-web-view.c @@ -104,6 +104,8 @@ struct _EphyWebViewPrivate { GSList *shown_popups; GtkWidget *password_info_bar; + + EphyHistoryPageVisitType visit_type; }; typedef struct { @@ -1949,6 +1951,9 @@ load_status_cb (WebKitWebView *web_view, if (uri) soup_uri_free (uri); + /* Reset visit type. */ + priv->visit_type = EPHY_PAGE_VISIT_NONE; + break; } case WEBKIT_LOAD_FAILED: @@ -3694,6 +3699,8 @@ ephy_web_view_load_homepage (EphyWebView *view) { g_signal_emit_by_name (view, "loading-homepage"); + ephy_web_view_set_visit_type (view, + EPHY_PAGE_VISIT_HOMEPAGE); ephy_web_view_load_url (view, "about:blank"); } @@ -3740,3 +3747,33 @@ ephy_web_view_is_loading_homepage (EphyWebView *view) return view->priv->loading_homepage; } + +/** + * ephy_web_view_get_visit_type: + * @view: an #EphyWebView + * + * Returns: the @view #EphyWebViewVisitType + **/ +EphyHistoryPageVisitType +ephy_web_view_get_visit_type (EphyWebView *view) +{ + g_return_val_if_fail (EPHY_IS_WEB_VIEW (view), 0); + + return view->priv->visit_type; +} + +/** + * ephy_web_view_set_visit_type: + * @view: an #EphyWebView + * @visit_type: an #EphyHistoryPageVisitType + * + * Sets the @visit_type for @view, so that the URI can be + * properly weighted in the history backend. + **/ +void +ephy_web_view_set_visit_type (EphyWebView *view, EphyHistoryPageVisitType visit_type) +{ + g_return_if_fail (EPHY_IS_WEB_VIEW (view)); + + view->priv->visit_type = visit_type; +} |