[evolution/wip/webkit2] Bug 743926 - Slow to render large plain text emails
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/webkit2] Bug 743926 - Slow to render large plain text emails
- Date: Wed, 24 Feb 2016 17:26:47 +0000 (UTC)
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]