aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2011-08-03 22:59:22 +0800
committerMilan Crha <mcrha@redhat.com>2011-08-03 23:04:31 +0800
commitf2c34011833c291568023f2a52a65f540f59671f (patch)
treeba10673ba228bdcbb2c28d40c007c4e776f4803b /mail
parent903b8e69b0aba3192dcc9c99e7971f47b0f6be33 (diff)
downloadgsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.tar.gz
gsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.tar.zst
gsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.zip
Avoid crashes when moving between messages quickly
The itip-formatter part is clean, but the one for attachment_button can still introduce runtime warnings, which requires more changes and rethinking of this all, which I prefer to postpone, the best after WebKit work will land, because it also may change most of the mail formatting code (I guess). It doesn't crash, at least.
Diffstat (limited to 'mail')
-rw-r--r--mail/em-format-html-display.c2
-rw-r--r--mail/em-format-html.c12
2 files changed, 13 insertions, 1 deletions
diff --git a/mail/em-format-html-display.c b/mail/em-format-html-display.c
index 90b60ac20d..d5e0353bf8 100644
--- a/mail/em-format-html-display.c
+++ b/mail/em-format-html-display.c
@@ -978,10 +978,12 @@ efhd_attachment_button (EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPObj
e_attachment_set_can_show (attachment, info->handle != NULL);
web_view = em_format_html_get_web_view (efh);
+ g_return_val_if_fail (web_view != NULL, TRUE);
parent = gtk_widget_get_toplevel (GTK_WIDGET (web_view));
parent = gtk_widget_is_toplevel (parent) ? parent : NULL;
view = em_format_html_display_get_attachment_view (efhd, info->attachment_view_part_id);
+ g_return_val_if_fail (view != NULL, TRUE);
gtk_widget_show (GTK_WIDGET (view));
store = e_attachment_view_get_store (view);
diff --git a/mail/em-format-html.c b/mail/em-format-html.c
index 4a34aa0f28..d79fa450bc 100644
--- a/mail/em-format-html.c
+++ b/mail/em-format-html.c
@@ -157,6 +157,7 @@ struct _format_msg {
CamelFolder *folder;
gchar *uid;
CamelMimeMessage *message;
+ gboolean cancelled;
};
static gchar *
@@ -177,8 +178,10 @@ efh_format_exec (struct _format_msg *m,
CamelURL *base;
gchar *content;
- if (m->format->priv->web_view == NULL)
+ if (m->format->priv->web_view == NULL) {
+ m->cancelled = TRUE;
return;
+ }
format = EM_FORMAT (m->format);
stream = CAMEL_STREAM (m->estream);
@@ -265,6 +268,10 @@ efh_format_exec (struct _format_msg *m,
(CamelStream *) m->estream,
"</body>\n</html>\n", cancellable, NULL);
camel_stream_close ((CamelStream *) m->estream, cancellable, NULL);
+ if (g_cancellable_is_cancelled (cancellable)) {
+ m->cancelled = TRUE;
+ m->estream->sync.cancel = TRUE;
+ }
g_object_unref (m->estream);
m->estream = NULL;
}
@@ -274,6 +281,7 @@ efh_format_exec (struct _format_msg *m,
d(printf("out of jobs, done\n"));
format->pending_uri_level = puri_level;
+ m->cancelled = m->cancelled || g_cancellable_is_cancelled (cancellable);
}
static void
@@ -294,6 +302,8 @@ efh_format_free (struct _format_msg *m)
g_object_unref (m->format);
if (m->estream) {
camel_stream_close ((CamelStream *) m->estream, NULL, NULL);
+ if (m->cancelled)
+ m->estream->sync.cancel = TRUE;
g_object_unref (m->estream);
}
if (m->folder)