diff options
author | Xan Lopez <xan@igalia.com> | 2012-03-14 19:44:18 +0800 |
---|---|---|
committer | Xan Lopez <xan@igalia.com> | 2012-03-14 19:45:07 +0800 |
commit | 6f220733c22c7c2f04ba8894a470ba7b7c64d8bd (patch) | |
tree | 4be84968816abc67f60523add72153eb3e4f0d00 | |
parent | 9d0c171675a92fb30e8bc45f73a513e5dc86912e (diff) | |
download | gsoc2013-epiphany-6f220733c22c7c2f04ba8894a470ba7b7c64d8bd.tar gsoc2013-epiphany-6f220733c22c7c2f04ba8894a470ba7b7c64d8bd.tar.gz gsoc2013-epiphany-6f220733c22c7c2f04ba8894a470ba7b7c64d8bd.tar.bz2 gsoc2013-epiphany-6f220733c22c7c2f04ba8894a470ba7b7c64d8bd.tar.lz gsoc2013-epiphany-6f220733c22c7c2f04ba8894a470ba7b7c64d8bd.tar.xz gsoc2013-epiphany-6f220733c22c7c2f04ba8894a470ba7b7c64d8bd.tar.zst gsoc2013-epiphany-6f220733c22c7c2f04ba8894a470ba7b7c64d8bd.zip |
ephy-web-view: move zoom handling to EphyWebView
Again, this only interacts with the view, so it does not need to be in
EphyEmbed.
-rw-r--r-- | embed/ephy-embed.c | 81 | ||||
-rw-r--r-- | embed/ephy-web-view.c | 82 |
2 files changed, 82 insertions, 81 deletions
diff --git a/embed/ephy-embed.c b/embed/ephy-embed.c index e78b14fbd..44a84666c 100644 --- a/embed/ephy-embed.c +++ b/embed/ephy-embed.c @@ -73,12 +73,10 @@ struct _EphyEmbedPrivate GtkPaned *paned; WebKitWebView *web_view; EphyHistoryService *history_service; - GCancellable *history_service_cancellable; GtkWidget *inspector_window; GtkWidget *inspector_web_view; GtkWidget *inspector_scrolled_window; gboolean inspector_attached; - guint is_setting_zoom : 1; GSList *destroy_on_transition_list; GtkWidget *floating_bar; GtkWidget *progress; @@ -231,50 +229,6 @@ ephy_embed_statusbar_pop (EphyEmbed *embed, guint context_id) } static void -get_host_for_url_cb (gpointer service, - gboolean success, - gpointer result_data, - gpointer user_data) -{ - EphyHistoryHost *host; - EphyEmbed *embed; - WebKitWebView *web_view; - double current_zoom; - - if (success == FALSE) - return; - - embed = EPHY_EMBED (user_data); - host = (EphyHistoryHost *)result_data; - - web_view = embed->priv->web_view; - - g_object_get (web_view, - "zoom-level", ¤t_zoom, - NULL); - - if (host->zoom_level != current_zoom) { - embed->priv->is_setting_zoom = TRUE; - g_object_set (web_view, "zoom-level", host->zoom_level, NULL); - embed->priv->is_setting_zoom = FALSE; - } - - ephy_history_host_free (host); -} - -static void -restore_zoom_level (EphyEmbed *embed, - const char *address) -{ - /* restore zoom level */ - if (ephy_embed_utils_address_has_web_scheme (address)) { - ephy_history_service_get_host_for_url (embed->priv->history_service, - address, embed->priv->history_service_cancellable, - (EphyHistoryJobCallback)get_host_for_url_cb, embed); - } -} - -static void resource_request_starting_cb (WebKitWebView *web_view, WebKitWebFrame *web_frame, WebKitWebResource *web_resource, @@ -333,8 +287,6 @@ load_status_changed_cb (WebKitWebView *web_view, ephy_embed_destroy_top_widgets (embed); - restore_zoom_level (embed, uri); - if (ephy_web_view_is_loading_homepage (view)) return; @@ -355,32 +307,6 @@ load_status_changed_cb (WebKitWebView *web_view, } static void -zoom_changed_cb (WebKitWebView *web_view, - GParamSpec *pspec, - EphyEmbed *embed) -{ - char *address; - float zoom; - - g_object_get (web_view, - "zoom-level", &zoom, - NULL); - - if (EPHY_EMBED (embed)->priv->is_setting_zoom) { - return; - } - - address = ephy_web_view_get_location (EPHY_WEB_VIEW (web_view), TRUE); - if (ephy_embed_utils_address_has_web_scheme (address)) { - ephy_history_service_set_url_zoom_level (embed->priv->history_service, - address, zoom, - NULL, NULL, NULL); - } - - g_free (address); -} - -static void ephy_embed_grab_focus (GtkWidget *widget) { GtkWidget *child; @@ -436,11 +362,6 @@ ephy_embed_dispose (GObject *object) priv->progress_update_handler_id = 0; } - if (priv->history_service_cancellable) { - g_cancellable_cancel (priv->history_service_cancellable); - g_clear_object (&priv->history_service_cancellable); - } - G_OBJECT_CLASS (ephy_embed_parent_class)->dispose (object); } @@ -779,7 +700,6 @@ ephy_embed_constructed (GObject *object) "signal::notify::load-status", G_CALLBACK (load_status_changed_cb), embed, "signal::resource-request-starting", G_CALLBACK (resource_request_starting_cb), embed, "signal::download-requested", G_CALLBACK (download_requested_cb), embed, - "signal::notify::zoom-level", G_CALLBACK (zoom_changed_cb), embed, NULL); priv->status_handler_id = g_signal_connect (web_view, "notify::status-message", @@ -830,7 +750,6 @@ ephy_embed_constructed (GObject *object) ephy_embed_prefs_add_embed (embed); priv->history_service = EPHY_HISTORY_SERVICE (ephy_embed_shell_get_global_history_service (ephy_embed_shell_get_default ())); - priv->history_service_cancellable = g_cancellable_new (); } static void diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c index 5759eabbc..55aa51d44 100644 --- a/embed/ephy-web-view.c +++ b/embed/ephy-web-view.c @@ -81,6 +81,7 @@ struct _EphyWebViewPrivate { guint is_blank : 1; guint visibility : 1; guint loading_homepage : 1; + guint is_setting_zoom : 1; char *address; char *typed_address; @@ -106,6 +107,8 @@ struct _EphyWebViewPrivate { GtkWidget *password_info_bar; EphyHistoryService *history_service; + GCancellable *history_service_cancellable; + EphyHistoryPageVisitType visit_type; }; @@ -548,8 +551,15 @@ ephy_web_view_button_press_event (GtkWidget *widget, GdkEventButton *event) static void ephy_web_view_dispose (GObject *object) { + EphyWebViewPrivate *priv = EPHY_WEB_VIEW (object)->priv; + ephy_web_view_file_monitor_cancel (EPHY_WEB_VIEW (object)); + if (priv->history_service_cancellable) { + g_cancellable_cancel (priv->history_service_cancellable); + g_clear_object (&priv->history_service_cancellable); + } + G_OBJECT_CLASS (ephy_web_view_parent_class)->dispose (object); } @@ -1837,6 +1847,45 @@ delete_web_app_cb (WebKitDOMHTMLElement *button, } static void +get_host_for_url_cb (gpointer service, + gboolean success, + gpointer result_data, + gpointer user_data) +{ + EphyHistoryHost *host; + EphyWebView *view; + double current_zoom; + + if (success == FALSE) + return; + + view = EPHY_WEB_VIEW (user_data); + host = (EphyHistoryHost *)result_data; + + g_object_get (view, + "zoom-level", ¤t_zoom, + NULL); + + if (host->zoom_level != current_zoom) { + view->priv->is_setting_zoom = TRUE; + g_object_set (view, "zoom-level", host->zoom_level, NULL); + view->priv->is_setting_zoom = FALSE; + } + + ephy_history_host_free (host); +} + +static void +restore_zoom_level (EphyWebView *view, + const char *address) +{ + if (ephy_embed_utils_address_has_web_scheme (address)) + ephy_history_service_get_host_for_url (view->priv->history_service, + address, view->priv->history_service_cancellable, + (EphyHistoryJobCallback)get_host_for_url_cb, view); +} + +static void load_status_cb (WebKitWebView *web_view, GParamSpec *pspec, gpointer user_data) @@ -1913,6 +1962,8 @@ load_status_cb (WebKitWebView *web_view, security_level = EPHY_WEB_VIEW_STATE_IS_UNKNOWN; ephy_web_view_set_security_level (EPHY_WEB_VIEW (web_view), security_level); + + restore_zoom_level (view, uri); } break; case WEBKIT_LOAD_FINISHED: { @@ -2216,6 +2267,32 @@ close_web_view_cb (WebKitWebView *web_view, } static void +zoom_changed_cb (WebKitWebView *web_view, + GParamSpec *pspec, + gpointer user_data) +{ + char *address; + float zoom; + EphyWebViewPrivate *priv = EPHY_WEB_VIEW (web_view)->priv; + + g_object_get (web_view, + "zoom-level", &zoom, + NULL); + + if (priv->is_setting_zoom) + return; + + address = ephy_web_view_get_location (EPHY_WEB_VIEW (web_view), TRUE); + if (ephy_embed_utils_address_has_web_scheme (address)) { + ephy_history_service_set_url_zoom_level (priv->history_service, + address, zoom, + NULL, NULL, NULL); + } + + g_free (address); +} + +static void ephy_web_view_init (EphyWebView *web_view) { EphyWebViewPrivate *priv; @@ -2235,6 +2312,7 @@ ephy_web_view_init (EphyWebView *web_view) G_REGEX_OPTIMIZE, G_REGEX_MATCH_NOTEMPTY, NULL); priv->history_service = EPHY_HISTORY_SERVICE (ephy_embed_shell_get_global_history_service (embed_shell)); + priv->history_service_cancellable = g_cancellable_new (); g_signal_connect (priv->history_service, "cleared", G_CALLBACK (ephy_web_view_history_cleared_cb), @@ -2260,6 +2338,10 @@ ephy_web_view_init (EphyWebView *web_view) G_CALLBACK (load_error_cb), NULL); + g_signal_connect (web_view, "notify::zoom-level", + G_CALLBACK (zoom_changed_cb), + NULL); + g_signal_connect_object (web_view, "icon-loaded", G_CALLBACK (favicon_cb), web_view, (GConnectFlags)0); |