pacho 14/03/16 14:41:07
Added: evolution-3.10.4-nntp-outbox.patch
evolution-3.10.4-main-ui.patch
evolution-3.10.4-imap-crash.patch
Log:
Apply some fixes from upstream 3.8 branch that also solves crash with IMAP
folder creation (#504062 by Jaroslaw Strauchmann)
(Portage version: 2.2.8-r1/cvs/Linux x86_64, signed Manifest commit with key
A188FBD4)
Revision Changes Path
1.1
mail-client/evolution/files/evolution-3.10.4-nntp-outbox.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-nntp-outbox.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-nntp-outbox.patch?rev=1.1&content-type=text/plain
Index: evolution-3.10.4-nntp-outbox.patch
===================================================================
>From 9de8f573e9eba07a096c7f97f97bb5ac876278c8 Mon Sep 17 00:00:00 2001
From: Milan Crha <[email protected]>
Date: Mon, 10 Feb 2014 16:57:28 +0000
Subject: Bug #722041 - NNTP Messages are silently dropped from Outbox
---
diff --git a/libemail-engine/mail-ops.c b/libemail-engine/mail-ops.c
index 4f3dbd3..4db5dae 100644
--- a/libemail-engine/mail-ops.c
+++ b/libemail-engine/mail-ops.c
@@ -682,22 +682,18 @@ mail_send_message (struct _send_queue_msg *m,
info = camel_message_info_new (NULL);
camel_message_info_set_flags (info, CAMEL_MESSAGE_SEEN, ~0);
- for (header = xev; header; header = header->next) {
+ for (header = xev; header && !local_error; header = header->next) {
gchar *uri;
if (strcmp (header->name, "X-Evolution-PostTo") != 0)
continue;
- /* TODO: don't lose errors */
-
uri = g_strstrip (g_strdup (header->value));
- /* FIXME Not passing a GCancellable or GError here. */
folder = e_mail_session_uri_to_folder_sync (
- m->session, uri, 0, NULL, NULL);
+ m->session, uri, 0, cancellable, &local_error);
if (folder != NULL) {
- /* FIXME Not passing a GCancellable or GError here. */
camel_folder_append_message_sync (
- folder, message, info, NULL, NULL, NULL);
+ folder, message, info, NULL, cancellable,
&local_error);
g_object_unref (folder);
folder = NULL;
}
@@ -707,7 +703,7 @@ mail_send_message (struct _send_queue_msg *m,
/* post process */
mail_tool_restore_xevolution_headers (message, xev);
- if (driver) {
+ if (local_error == NULL && driver) {
camel_filter_driver_filter_message (
driver, message, info, NULL, NULL,
NULL, "", cancellable, &local_error);
@@ -735,10 +731,9 @@ mail_send_message (struct _send_queue_msg *m,
}
}
- if (provider == NULL
- || !(provider->flags & CAMEL_PROVIDER_DISABLE_SENT_FOLDER)) {
+ if (local_error == NULL && (provider == NULL
+ || !(provider->flags & CAMEL_PROVIDER_DISABLE_SENT_FOLDER))) {
CamelFolder *local_sent_folder;
- GError *local_error = NULL;
local_sent_folder = e_mail_session_get_local_folder (
m->session, E_MAIL_LOCAL_FOLDER_SENT);
@@ -798,6 +793,7 @@ mail_send_message (struct _send_queue_msg *m,
_("Failed to append to "
"local 'Sent' folder: %s"),
local_error->message);
+ g_clear_error (&local_error);
}
}
}
@@ -836,7 +832,7 @@ mail_send_message (struct _send_queue_msg *m,
camel_folder_synchronize_sync (queue, FALSE, NULL, NULL);
}
- if (err->len > 0) {
+ if (local_error == NULL && err->len > 0) {
/* set the culmulative exception report */
g_set_error (
&local_error, CAMEL_ERROR,
--
cgit v0.9.2
1.1 mail-client/evolution/files/evolution-3.10.4-main-ui.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-main-ui.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-main-ui.patch?rev=1.1&content-type=text/plain
Index: evolution-3.10.4-main-ui.patch
===================================================================
>From 37a95e0e6b74fa9fe1692c788983142d8d4774d4 Mon Sep 17 00:00:00 2001
From: Milan Crha <[email protected]>
Date: Mon, 10 Feb 2014 14:59:24 +0000
Subject: Bug #724023 - Run EMailFormatter in the main/UI thread
Any GtkWidget creation or manipulation should be done exclusively
from the main/UI thread, thus make sure it is done that way.
Of course, evolution can freeze for a little time (depends on the message
size), until its formatting is done. It's unnoticeable with usual messages.
---
diff --git a/em-format/e-mail-part-attachment-bar.c
b/em-format/e-mail-part-attachment-bar.c
index 5cebd9b..57f49be 100644
--- a/em-format/e-mail-part-attachment-bar.c
+++ b/em-format/e-mail-part-attachment-bar.c
@@ -60,12 +60,7 @@ e_mail_part_attachment_bar_class_init
(EMailPartAttachmentBarClass *class)
static void
e_mail_part_attachment_bar_init (EMailPartAttachmentBar *part)
{
- GtkTreeModel *tree_model;
-
part->priv = E_MAIL_PART_ATTACHMENT_BAR_GET_PRIVATE (part);
-
- tree_model = e_attachment_store_new ();
- part->priv->store = E_ATTACHMENT_STORE (tree_model);
}
EMailPart *
@@ -84,6 +79,18 @@ e_mail_part_attachment_bar_get_store (EMailPartAttachmentBar
*part)
{
g_return_val_if_fail (E_IS_MAIL_PART_ATTACHMENT_BAR (part), NULL);
+ if (!part->priv->store) {
+ GtkTreeModel *tree_model;
+
+ /* Create the store only on demand. The EMailParser runs in a
dedicated
+ thread, but the EAttachmentStore is a GtkWidget descendant,
which should
+ be manipulated only from the main/UI thread, thus postpone
its creating
+ until it's really needed, which might be during the
EMailFormatter run,
+ which runs from the main/UI thread. */
+ tree_model = e_attachment_store_new ();
+ part->priv->store = E_ATTACHMENT_STORE (tree_model);
+ }
+
return part->priv->store;
}
diff --git a/mail/e-mail-request.c b/mail/e-mail-request.c
index bfbedc3..615bce3 100644
--- a/mail/e-mail-request.c
+++ b/mail/e-mail-request.c
@@ -365,9 +365,12 @@ mail_request_send_async (SoupRequest *request,
simple, handle_contact_photo_request,
G_PRIORITY_DEFAULT, cancellable);
} else {
- g_simple_async_result_run_in_thread (
- simple, handle_mail_request,
- G_PRIORITY_DEFAULT, cancellable);
+ /* Process e-mail mail requests in this thread, which should be
+ the main/UI thread, because any EMailFormatter can create
+ GtkWidget-s, or manipulate with them, which should be always
+ done in the main/UI thread. */
+ handle_mail_request (simple, G_OBJECT (request), cancellable);
+ g_simple_async_result_complete_in_idle (simple);
}
g_object_unref (simple);
--
cgit v0.9.2
1.1
mail-client/evolution/files/evolution-3.10.4-imap-crash.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-imap-crash.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-imap-crash.patch?rev=1.1&content-type=text/plain
Index: evolution-3.10.4-imap-crash.patch
===================================================================
>From 5e4b28e2fae285fa632ab189707489e0df8d79aa Mon Sep 17 00:00:00 2001
From: Fabiano FidĂȘncio <[email protected]>
Date: Tue, 21 Jan 2014 14:48:54 +0000
Subject: Bug #722698 - Crash creating a new folder
---
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index b15041a..cd7f67e 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -1108,15 +1108,27 @@ folder_tree_dispose (GObject *object)
{
EMFolderTreePrivate *priv;
GtkTreeModel *model;
+ GtkTreeSelection *selection;
priv = EM_FOLDER_TREE_GET_PRIVATE (object);
model = gtk_tree_view_get_model (GTK_TREE_VIEW (object));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (object));
if (priv->loaded_row_id != 0) {
g_signal_handler_disconnect (model, priv->loaded_row_id);
priv->loaded_row_id = 0;
}
+ if (priv->loading_row_id != 0) {
+ g_signal_handler_disconnect (model, priv->loading_row_id);
+ priv->loading_row_id = 0;
+ }
+
+ if (priv->selection_changed_handler_id != 0) {
+ g_signal_handler_disconnect (selection,
priv->selection_changed_handler_id);
+ priv->selection_changed_handler_id = 0;
+ }
+
if (priv->autoscroll_id != 0) {
g_source_remove (priv->autoscroll_id);
priv->autoscroll_id = 0;
--
cgit v0.9.2