[evolution/wip/webkit2] Bug 743926 - Slow to render large plain text emails



commit 95deb790823c6ea0a29320e919b4541bc21d656b
Author: Milan Crha <mcrha redhat com>
Date:   Wed Feb 24 18:25:50 2016 +0100

    Bug 743926 - Slow to render large plain text emails

 e-util/e-web-view.c |   44 +++++++++++++++++++++++++++++++++++++-------
 1 files changed, 37 insertions(+), 7 deletions(-)
---
diff --git a/e-util/e-web-view.c b/e-util/e-web-view.c
index c9b9bae..98c74a4 100644
--- a/e-util/e-web-view.c
+++ b/e-util/e-web-view.c
@@ -46,6 +46,12 @@
        (G_TYPE_INSTANCE_GET_PRIVATE \
        ((obj), E_TYPE_WEB_VIEW, EWebViewPrivate))
 
+typedef enum {
+       E_WEB_VIEW_ZOOM_HACK_STATE_NONE,
+       E_WEB_VIEW_ZOOM_HACK_STATE_ZOOMED_IN,
+       E_WEB_VIEW_ZOOM_HACK_STATE_ZOOMED_OUT
+} EWebViewZoomHackState;
+
 typedef struct _AsyncContext AsyncContext;
 
 struct _EWebViewPrivate {
@@ -80,6 +86,10 @@ struct _EWebViewPrivate {
        WebKitFindController *find_controller;
        gulong found_text_handler_id;
        gulong failed_to_find_text_handler_id;
+
+       /* To workaround webkit bug:
+        * https://bugs.webkit.org/show_bug.cgi?id=89553 */
+       EWebViewZoomHackState zoom_hack_state;
 };
 
 struct _AsyncContext {
@@ -711,6 +721,17 @@ web_view_load_changed_cb (WebKitWebView *webkit_web_view,
 
        web_view = E_WEB_VIEW (webkit_web_view);
 
+       if (web_view->priv->zoom_hack_state == E_WEB_VIEW_ZOOM_HACK_STATE_NONE &&
+           load_event == WEBKIT_LOAD_COMMITTED) {
+               if (webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (web_view)) > 0.9999) {
+                       e_web_view_zoom_out (web_view);
+                       web_view->priv->zoom_hack_state = E_WEB_VIEW_ZOOM_HACK_STATE_ZOOMED_OUT;
+               } else {
+                       e_web_view_zoom_in (web_view);
+                       web_view->priv->zoom_hack_state = E_WEB_VIEW_ZOOM_HACK_STATE_ZOOMED_IN;
+               }
+       }
+
        if (load_event != WEBKIT_LOAD_FINISHED)
                return;
 
@@ -718,14 +739,22 @@ web_view_load_changed_cb (WebKitWebView *webkit_web_view,
 
        web_view_update_document_highlights (web_view);
 
-       /* Workaround webkit bug:
-        * https://bugs.webkit.org/show_bug.cgi?id=89553 */
-       if (webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (web_view)) > 0.9999) {
-               e_web_view_zoom_out (web_view);
-               e_web_view_zoom_in (web_view);
+       if (web_view->priv->zoom_hack_state == E_WEB_VIEW_ZOOM_HACK_STATE_NONE) {
+               /* This may not happen, but just in case keep it here. */
+               if (webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (web_view)) > 0.9999) {
+                       e_web_view_zoom_out (web_view);
+                       e_web_view_zoom_in (web_view);
+               } else {
+                       e_web_view_zoom_in (web_view);
+                       e_web_view_zoom_out (web_view);
+               }
        } else {
-               e_web_view_zoom_in (web_view);
-               e_web_view_zoom_out (web_view);
+               if (web_view->priv->zoom_hack_state == E_WEB_VIEW_ZOOM_HACK_STATE_ZOOMED_IN)
+                       e_web_view_zoom_out (web_view);
+               else
+                       e_web_view_zoom_in (web_view);
+
+               web_view->priv->zoom_hack_state = E_WEB_VIEW_ZOOM_HACK_STATE_NONE;
        }
 }
 
@@ -2085,6 +2114,7 @@ e_web_view_init (EWebView *web_view)
        web_view->priv = E_WEB_VIEW_GET_PRIVATE (web_view);
 
        web_view->priv->old_settings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, 
(GDestroyNotify) g_variant_unref);
+       web_view->priv->zoom_hack_state = E_WEB_VIEW_ZOOM_HACK_STATE_NONE;
 
        /* XXX No WebKitWebView class method pointers to
         *     override so we have to use signal handlers. */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]