[evolution] Don't load images in preview pane when openning Preferences Dialog
- From: Dan VrÃtil <dvratil src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Don't load images in preview pane when openning Preferences Dialog
- Date: Wed, 27 Jun 2012 16:05:42 +0000 (UTC)
commit 8de1c927dfbc915ba1aa1157aa62a54a7824fbfa
Author: Dan VrÃtil <dvratil redhat com>
Date: Wed Jun 27 18:04:52 2012 +0200
Don't load images in preview pane when openning Preferences Dialog
Openning the Preferences dialog for the first time causes many
property bindings to be created. GLib emits a lot of ::notify signals
during this, one of them being about image-loading-policy.
We now correctly check, whether the change was to allow loading
images, or not (and we don't display them in that case).
Finaly, e_mail_display_reload() will always schedule the action via
g_idle_add() so that we can merge plenty of _reload() calls caused by
the afformentioned ::notify emitions into single call when all the noise
is over.
mail/e-mail-display.c | 79 +++++++++++++++++++++++++-----------------------
1 files changed, 41 insertions(+), 38 deletions(-)
---
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c
index 6e0f0a3..07dd09c 100644
--- a/mail/e-mail-display.c
+++ b/mail/e-mail-display.c
@@ -234,8 +234,15 @@ formatter_image_loading_policy_changed_cb (GObject *object,
gpointer user_data)
{
EMailDisplay *display = user_data;
+ EMailFormatter *formatter = E_MAIL_FORMATTER (object);
+ EMailImageLoadingPolicy policy;
- e_mail_display_load_images (display);
+ policy = e_mail_formatter_get_image_loading_policy (formatter);
+ if (policy == E_MAIL_IMAGE_LOADING_POLICY_ALWAYS) {
+ e_mail_display_load_images (display);
+ } else {
+ e_mail_display_reload (display);
+ }
}
static void
@@ -1533,23 +1540,6 @@ e_mail_display_get_mode (EMailDisplay *display)
return display->priv->mode;
}
-static gboolean
-reload_display (EMailDisplay *display)
-{
- e_mail_display_reload (display);
- return FALSE;
-}
-
-static void
-schedule_display_reload (EMailDisplay *display)
-{
- if (display->priv->reload_scheduled)
- return;
-
- g_idle_add ((GSourceFunc) reload_display, display);
- display->priv->reload_scheduled = TRUE;
-}
-
void
e_mail_display_set_mode (EMailDisplay *display,
EMailFormatterMode mode)
@@ -1577,33 +1567,33 @@ e_mail_display_set_mode (EMailDisplay *display,
g_object_connect (formatter,
"swapped-signal::notify::charset",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::image-loading-policy",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::mark-citations",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::only-local-photos",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::show-sender-photo",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::show-real-date",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::animate-images",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::text-color",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::body-color",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::citation-color",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::content-color",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::frame-color",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::notify::header-color",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
"swapped-signal::need-redraw",
- G_CALLBACK (schedule_display_reload), display,
+ G_CALLBACK (e_mail_display_reload), display,
NULL);
e_mail_display_reload (display);
@@ -1718,8 +1708,9 @@ e_mail_display_load (EMailDisplay *display,
g_free (uri);
}
-void
-e_mail_display_reload (EMailDisplay *display)
+
+static gboolean
+do_reload_display (EMailDisplay *display)
{
EWebView *web_view;
const gchar *uri;
@@ -1729,19 +1720,17 @@ e_mail_display_reload (EMailDisplay *display)
GHashTableIter table_iter;
gpointer key, val;
- g_return_if_fail (E_IS_MAIL_DISPLAY (display));
-
web_view = E_WEB_VIEW (display);
uri = e_web_view_get_uri (web_view);
display->priv->reload_scheduled = FALSE;
if (!uri || !*uri)
- return;
+ return FALSE;
if (strstr(uri, "?") == NULL) {
e_web_view_reload (web_view);
- return;
+ return FALSE;
}
base = g_strndup (uri, strstr (uri, "?") - uri + 1);
@@ -1768,6 +1757,20 @@ e_mail_display_reload (EMailDisplay *display)
g_string_free (new_uri, TRUE);
g_hash_table_destroy (table);
+ return FALSE;
+}
+
+void
+e_mail_display_reload (EMailDisplay *display)
+{
+ g_return_if_fail (E_IS_MAIL_DISPLAY (display));
+
+ if (display->priv->reload_scheduled)
+ return;
+
+ /* Schedule reloading if neccessary */
+ g_idle_add ((GSourceFunc) do_reload_display, display);
+ display->priv->reload_scheduled = TRUE;
}
GtkAction *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]