From 2de28c3f598985605eb802ce12d923a16f50e65922ff265b4012b903c5a52da9 Mon Sep 17 00:00:00 2001 From: Dominique Leuenberger Date: Thu, 14 Feb 2013 12:13:32 +0000 Subject: [PATCH] Accepting request 154964 from home:badshah400:branches:GNOME:Factory Add post-3.6.3 patches from upstream git to fix important bugs, including a couple of crashes. Build tested locally for openSUSE:Factory. OBS-URL: https://build.opensuse.org/request/show/154964 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/evolution?expand=0&rev=194 --- evolution-fix-crash-when-searching.patch | 102 ++++++ evolution-fix-empty-body-reply.patch | 152 ++++++++ evolution-fix-message-quoted-twice.patch | 33 ++ evolution-fix-text-css-as-attachment.patch | 58 +++ evolution-pine-importer.patch | 21 ++ ...revent-crash-edit-task-prompt-cancel.patch | 20 ++ ...ution-prevent-crash-on-folder-rename.patch | 32 ++ ...chedule-higher-idle-priority-actions.patch | 338 ++++++++++++++++++ evolution-use-G_PRIORITY_HIGH_IDLE.patch | 232 ++++++++++++ evolution.changes | 18 + evolution.spec | 29 +- 11 files changed, 1034 insertions(+), 1 deletion(-) create mode 100644 evolution-fix-crash-when-searching.patch create mode 100644 evolution-fix-empty-body-reply.patch create mode 100644 evolution-fix-message-quoted-twice.patch create mode 100644 evolution-fix-text-css-as-attachment.patch create mode 100644 evolution-pine-importer.patch create mode 100644 evolution-prevent-crash-edit-task-prompt-cancel.patch create mode 100644 evolution-prevent-crash-on-folder-rename.patch create mode 100644 evolution-schedule-higher-idle-priority-actions.patch create mode 100644 evolution-use-G_PRIORITY_HIGH_IDLE.patch diff --git a/evolution-fix-crash-when-searching.patch b/evolution-fix-crash-when-searching.patch new file mode 100644 index 0000000..009cf3f --- /dev/null +++ b/evolution-fix-crash-when-searching.patch @@ -0,0 +1,102 @@ +From b19b5a6c30216e7663022bd406bcffbf8e6d5aa3 Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Wed, 23 Jan 2013 14:25:19 +0000 +Subject: Bug #639698 - Crash in mail_shell_view_execute_search() + +--- +diff --git a/modules/mail/e-mail-shell-view.c b/modules/mail/e-mail-shell-view.c +index 29bb788..d500cfc 100644 +--- a/modules/mail/e-mail-shell-view.c ++++ b/modules/mail/e-mail-shell-view.c +@@ -546,8 +546,8 @@ all_accounts: + * account-wide searches still in progress. */ + text = e_shell_searchbar_get_search_text (searchbar); + if (text == NULL || *text == '\0') { +- CamelStore *selected_store; +- gchar *selected_folder_name; ++ CamelStore *selected_store = NULL; ++ gchar *selected_folder_name = NULL; + + if (priv->search_account_all != NULL) { + g_object_unref (priv->search_account_all); +@@ -565,13 +565,17 @@ all_accounts: + * avoid search conflicts, so we can't just grab the + * folder URI and let the asynchronous callbacks run + * after we've already kicked off the search. */ +- em_folder_tree_get_selected ( +- folder_tree, &selected_store, &selected_folder_name); +- folder = camel_store_get_folder_sync ( +- selected_store, selected_folder_name, +- CAMEL_STORE_FOLDER_INFO_FAST, NULL, NULL); +- e_mail_reader_set_folder (reader, folder); +- g_object_unref (selected_store); ++ if (em_folder_tree_get_selected (folder_tree, &selected_store, &selected_folder_name) && ++ selected_store && selected_folder_name) { ++ folder = camel_store_get_folder_sync ( ++ selected_store, selected_folder_name, ++ CAMEL_STORE_FOLDER_INFO_FAST, NULL, NULL); ++ e_mail_reader_set_folder (reader, folder); ++ g_object_unref (folder); ++ } ++ ++ if (selected_store) ++ g_object_unref (selected_store); + g_free (selected_folder_name); + + gtk_widget_set_sensitive (GTK_WIDGET (combo_box), TRUE); +@@ -610,7 +614,7 @@ all_accounts: + camel_service_connect_sync (service, NULL, NULL); + + search_folder = (CamelVeeFolder *) camel_vee_folder_new ( +- CAMEL_STORE (service), _("All Account Search"), 0); ++ CAMEL_STORE (service), _("All Account Search"), CAMEL_STORE_FOLDER_PRIVATE); + priv->search_account_all = search_folder; + + g_object_unref (service); +@@ -643,8 +647,8 @@ current_account: + * account-wide searches still in progress. */ + text = e_shell_searchbar_get_search_text (searchbar); + if (text == NULL || *text == '\0') { +- CamelStore *selected_store; +- gchar *selected_folder_name; ++ CamelStore *selected_store = NULL; ++ gchar *selected_folder_name = NULL; + + if (priv->search_account_current != NULL) { + g_object_unref (priv->search_account_current); +@@ -662,13 +666,17 @@ current_account: + * avoid search conflicts, so we can't just grab the + * folder URI and let the asynchronous callbacks run + * after we've already kicked off the search. */ +- em_folder_tree_get_selected ( +- folder_tree, &selected_store, &selected_folder_name); +- folder = camel_store_get_folder_sync ( +- selected_store, selected_folder_name, +- CAMEL_STORE_FOLDER_INFO_FAST, NULL, NULL); +- e_mail_reader_set_folder (reader, folder); +- g_object_unref (selected_store); ++ if (em_folder_tree_get_selected (folder_tree, &selected_store, &selected_folder_name) && ++ selected_store && selected_folder_name) { ++ folder = camel_store_get_folder_sync ( ++ selected_store, selected_folder_name, ++ CAMEL_STORE_FOLDER_INFO_FAST, NULL, NULL); ++ e_mail_reader_set_folder (reader, folder); ++ g_object_unref (folder); ++ } ++ ++ if (selected_store) ++ g_object_unref (selected_store); + g_free (selected_folder_name); + + gtk_widget_set_sensitive (GTK_WIDGET (combo_box), TRUE); +@@ -707,7 +715,7 @@ current_account: + camel_service_connect_sync (service, NULL, NULL); + + search_folder = (CamelVeeFolder *) camel_vee_folder_new ( +- CAMEL_STORE (service), _("Account Search"), 0); ++ CAMEL_STORE (service), _("Account Search"), CAMEL_STORE_FOLDER_PRIVATE); + priv->search_account_current = search_folder; + + g_object_unref (service); +-- +cgit v0.9.0.2 diff --git a/evolution-fix-empty-body-reply.patch b/evolution-fix-empty-body-reply.patch new file mode 100644 index 0000000..d9d0fa6 --- /dev/null +++ b/evolution-fix-empty-body-reply.patch @@ -0,0 +1,152 @@ +From 9f5d682172643701e51452c4803db904cd6dbeac Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Wed, 23 Jan 2013 19:06:47 +0000 +Subject: Bug #680537 - Reply to individual message in digest generates empty body + +--- +diff --git a/modules/mail/e-mail-attachment-handler.c b/modules/mail/e-mail-attachment-handler.c +index 8bc2aad..1623cca 100644 +--- a/modules/mail/e-mail-attachment-handler.c ++++ b/modules/mail/e-mail-attachment-handler.c +@@ -60,40 +60,87 @@ static GtkTargetEntry target_table[] = { + { (gchar *) "x-uid-list", 0, 0 } + }; + +-static void +-mail_attachment_handler_forward (GtkAction *action, +- EAttachmentHandler *handler) ++static CamelMimeMessage * ++mail_attachment_handler_get_selected_message (EAttachmentHandler *handler) + { +- EMailAttachmentHandlerPrivate *priv; +- EShellSettings *shell_settings; + EAttachment *attachment; + EAttachmentView *view; + CamelMimePart *mime_part; + CamelDataWrapper *wrapper; +- EMailForwardStyle style; +- const gchar *property_name; ++ CamelMimeMessage *message = NULL; ++ CamelContentType *content_type; + GList *selected; + + view = e_attachment_handler_get_view (handler); +- priv = E_MAIL_ATTACHMENT_HANDLER_GET_PRIVATE (handler); + + selected = e_attachment_view_get_selected_attachments (view); +- g_return_if_fail (g_list_length (selected) == 1); ++ g_return_val_if_fail (g_list_length (selected) == 1, NULL); + + attachment = E_ATTACHMENT (selected->data); + mime_part = e_attachment_get_mime_part (attachment); + wrapper = camel_medium_get_content (CAMEL_MEDIUM (mime_part)); + ++ content_type = camel_data_wrapper_get_mime_type_field (wrapper); ++ if (content_type && camel_content_type_is (content_type, "message", "rfc822")) { ++ CamelDataWrapper *inner; ++ CamelContentType *inner_content_type; ++ ++ inner = camel_medium_get_content (CAMEL_MEDIUM (wrapper)); ++ inner_content_type = camel_data_wrapper_get_mime_type_field (inner); ++ if (!camel_content_type_is (inner_content_type, content_type->type, content_type->subtype)) { ++ CamelStream *mem; ++ ++ /* Create a message copy in case the inner content-type doesn't match ++ the mime_part's content type, which can happen for multipart/digest, ++ where it confuses the formatter on reply, which skips all rfc822 subparts. ++ */ ++ mem = camel_stream_mem_new (); ++ camel_data_wrapper_write_to_stream_sync (CAMEL_DATA_WRAPPER (wrapper), mem, NULL, NULL); ++ ++ g_seekable_seek (G_SEEKABLE (mem), 0, G_SEEK_SET, NULL, NULL); ++ message = camel_mime_message_new (); ++ if (!camel_data_wrapper_construct_from_stream_sync (CAMEL_DATA_WRAPPER (message), mem, NULL, NULL)) { ++ g_object_unref (message); ++ message = NULL; ++ } ++ ++ g_object_unref (mem); ++ } ++ } ++ ++ if (!message) ++ message = g_object_ref (wrapper); ++ ++ g_list_foreach (selected, (GFunc) g_object_unref, NULL); ++ g_list_free (selected); ++ ++ return message; ++} ++ ++static void ++mail_attachment_handler_forward (GtkAction *action, ++ EAttachmentHandler *handler) ++{ ++ EMailAttachmentHandlerPrivate *priv; ++ EShellSettings *shell_settings; ++ EMailForwardStyle style; ++ CamelMimeMessage *message; ++ const gchar *property_name; ++ ++ priv = E_MAIL_ATTACHMENT_HANDLER_GET_PRIVATE (handler); ++ ++ message = mail_attachment_handler_get_selected_message (handler); ++ g_return_if_fail (message != NULL); ++ + property_name = "mail-forward-style"; + shell_settings = e_shell_get_shell_settings (priv->shell); + style = e_shell_settings_get_int (shell_settings, property_name); + + em_utils_forward_message ( + priv->shell, CAMEL_SESSION (priv->session), +- CAMEL_MIME_MESSAGE (wrapper), style, NULL, NULL); ++ message, style, NULL, NULL); + +- g_list_foreach (selected, (GFunc) g_object_unref, NULL); +- g_list_free (selected); ++ g_object_unref (message); + } + + static void +@@ -102,34 +149,24 @@ mail_attachment_handler_reply (EAttachmentHandler *handler, + { + EMailAttachmentHandlerPrivate *priv; + EShellSettings *shell_settings; +- EAttachment *attachment; +- EAttachmentView *view; +- CamelMimePart *mime_part; +- CamelDataWrapper *wrapper; + EMailReplyStyle style; ++ CamelMimeMessage *message; + const gchar *property_name; +- GList *selected; + +- view = e_attachment_handler_get_view (handler); + priv = E_MAIL_ATTACHMENT_HANDLER_GET_PRIVATE (handler); + +- selected = e_attachment_view_get_selected_attachments (view); +- g_return_if_fail (g_list_length (selected) == 1); +- +- attachment = E_ATTACHMENT (selected->data); +- mime_part = e_attachment_get_mime_part (attachment); +- wrapper = camel_medium_get_content (CAMEL_MEDIUM (mime_part)); ++ message = mail_attachment_handler_get_selected_message (handler); ++ g_return_if_fail (message != NULL); + + property_name = "mail-reply-style"; + shell_settings = e_shell_get_shell_settings (priv->shell); + style = e_shell_settings_get_int (shell_settings, property_name); + + em_utils_reply_to_message ( +- priv->shell, CAMEL_MIME_MESSAGE (wrapper), ++ priv->shell, message, + NULL, NULL, reply_type, style, NULL, NULL); + +- g_list_foreach (selected, (GFunc) g_object_unref, NULL); +- g_list_free (selected); ++ g_object_unref (message); + } + + static void +-- +cgit v0.9.0.2 diff --git a/evolution-fix-message-quoted-twice.patch b/evolution-fix-message-quoted-twice.patch new file mode 100644 index 0000000..363089e --- /dev/null +++ b/evolution-fix-message-quoted-twice.patch @@ -0,0 +1,33 @@ +From 61f3f5669ac6418c33dd4bbfaef61ee29bd9fecd Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Tue, 29 Jan 2013 13:50:00 +0000 +Subject: Bug #692775 - Double-quoting message with HTML and text + +--- +diff --git a/modules/prefer-plain/e-mail-parser-prefer-plain.c b/modules/prefer-plain/e-mail-parser-prefer-plain.c +index 66ff321..02cfd99 100644 +--- a/modules/prefer-plain/e-mail-parser-prefer-plain.c ++++ b/modules/prefer-plain/e-mail-parser-prefer-plain.c +@@ -322,6 +322,20 @@ empe_prefer_plain_parse (EMailParserExtension *extension, + } + + if (plain_text_parts) { ++ if (parts && nparts > 1) { ++ /* a text/html part is hidden, but not marked as attachment, ++ thus do that now, when there exists a text/plain part */ ++ GSList *piter; ++ ++ for (piter = parts; piter; piter = g_slist_next (piter)) { ++ EMailPart *mpart = piter->data; ++ ++ if (mpart && mpart->is_hidden && g_strcmp0 (mpart->mime_type, "text/html") == 0) { ++ mpart->is_attachment = TRUE; ++ } ++ } ++ } ++ + /* plain_text parts should be always first */ + parts = g_slist_concat (plain_text_parts, parts); + } +-- +cgit v0.9.0.2 diff --git a/evolution-fix-text-css-as-attachment.patch b/evolution-fix-text-css-as-attachment.patch new file mode 100644 index 0000000..de9d1ee --- /dev/null +++ b/evolution-fix-text-css-as-attachment.patch @@ -0,0 +1,58 @@ +From d25c6ff68132221ae1369aff29b8d7acbb2fb3aa Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Thu, 24 Jan 2013 12:11:00 +0000 +Subject: Bug #692009 - text/css always formatted as attachment + +Might be the final change for this bug, the two previous commits +were not using the right approach, causing regression in rendering +of text/* parts which were not named in the list of excluded content +types for a 'raw' formatting. +--- +diff --git a/em-format/e-mail-formatter.h b/em-format/e-mail-formatter.h +index 9b4e84d..befa473 100644 +--- a/em-format/e-mail-formatter.h ++++ b/em-format/e-mail-formatter.h +@@ -50,6 +50,7 @@ typedef enum { + E_MAIL_FORMATTER_MODE_NORMAL = 0, + E_MAIL_FORMATTER_MODE_SOURCE, + E_MAIL_FORMATTER_MODE_RAW, ++ E_MAIL_FORMATTER_MODE_CID, + E_MAIL_FORMATTER_MODE_PRINTING, + E_MAIL_FORMATTER_MODE_ALL_HEADERS + } EMailFormatterMode; +diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c +index 9bb3238..9da76863 100644 +--- a/mail/e-mail-display.c ++++ b/mail/e-mail-display.c +@@ -354,7 +354,7 @@ mail_display_resource_requested (WebKitWebView *web_view, + new_uri = e_mail_part_build_uri ( + part_list->folder, part_list->message_uid, + "part_id", G_TYPE_STRING, uri, +- "mode", G_TYPE_INT, E_MAIL_FORMATTER_MODE_RAW, NULL); ++ "mode", G_TYPE_INT, E_MAIL_FORMATTER_MODE_CID, NULL); + + webkit_network_request_set_uri (request, new_uri); + +diff --git a/mail/e-mail-request.c b/mail/e-mail-request.c +index 2794cee..b27b009 100644 +--- a/mail/e-mail-request.c ++++ b/mail/e-mail-request.c +@@ -142,15 +142,7 @@ handle_mail_request (GSimpleAsyncResult *res, + } + + if (part) { +- CamelContentType *content_type; +- +- content_type = camel_mime_part_get_content_type (part->part); +- +- if (context.mode == E_MAIL_FORMATTER_MODE_RAW && content_type && +- camel_content_type_is (content_type, "text", "*") && +- !camel_content_type_is (content_type, "text", "plain") && +- !camel_content_type_is (content_type, "text", "html") && +- !camel_content_type_is (content_type, "text", "calendar")) { ++ if (context.mode == E_MAIL_FORMATTER_MODE_CID) { + CamelDataWrapper *dw; + CamelStream *raw_content; + GByteArray *ba; +-- +cgit v0.9.0.2 diff --git a/evolution-pine-importer.patch b/evolution-pine-importer.patch new file mode 100644 index 0000000..f0ec6cc --- /dev/null +++ b/evolution-pine-importer.patch @@ -0,0 +1,21 @@ +From e0944f093a1dd302cae7995c5e495066fb8b5497 Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Tue, 29 Jan 2013 16:48:40 +0000 +Subject: Bug #692781 - [pine-importer] Abort on book failure during contact import + +--- +diff --git a/mail/importers/pine-importer.c b/mail/importers/pine-importer.c +index 664a77b..60a7c54 100644 +--- a/mail/importers/pine-importer.c ++++ b/mail/importers/pine-importer.c +@@ -157,7 +157,7 @@ import_contact (EBookClient *book_client, + book_client, card, &new_uid, NULL, &error); + + if (error != NULL) { +- g_error ( ++ g_warning ( + "%s: Failed to add contact: %s", + G_STRFUNC, error->message); + g_error_free (error); +-- +cgit v0.9.0.2 diff --git a/evolution-prevent-crash-edit-task-prompt-cancel.patch b/evolution-prevent-crash-edit-task-prompt-cancel.patch new file mode 100644 index 0000000..9833a78 --- /dev/null +++ b/evolution-prevent-crash-edit-task-prompt-cancel.patch @@ -0,0 +1,20 @@ +From ffb1a132cba3700d60a79e250616632a4e1371db Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Tue, 29 Jan 2013 16:07:56 +0000 +Subject: Bug #692783 - [mail-to-task] Crash on edit prompt cancel + +--- +diff --git a/plugins/mail-to-task/mail-to-task.c b/plugins/mail-to-task/mail-to-task.c +index 86d644a..553955c 100644 +--- a/plugins/mail-to-task/mail-to-task.c ++++ b/plugins/mail-to-task/mail-to-task.c +@@ -821,7 +821,6 @@ do_manage_comp_idle (struct _manage_comp *mc) + } else { + /* User canceled editing already existing event, so treat it as if he just closed the editor window */ + comp_editor_closed (NULL, FALSE, mc); +- g_cond_signal (mc->cond); + } + + if (error) { +-- +cgit v0.9.0.2 diff --git a/evolution-prevent-crash-on-folder-rename.patch b/evolution-prevent-crash-on-folder-rename.patch new file mode 100644 index 0000000..a27f08d --- /dev/null +++ b/evolution-prevent-crash-on-folder-rename.patch @@ -0,0 +1,32 @@ +From 0559de901e376c897515d684b357e6d9566f3b89 Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Tue, 29 Jan 2013 15:52:45 +0000 +Subject: Bug #692777 - Crash on folder rename + +--- +diff --git a/mail/e-mail-backend.c b/mail/e-mail-backend.c +index 24a46ed..bad33f5 100644 +--- a/mail/e-mail-backend.c ++++ b/mail/e-mail-backend.c +@@ -685,9 +685,6 @@ mail_backend_folder_renamed_cb (MailFolderCache *folder_cache, + + g_list_free_full (list, (GDestroyNotify) g_object_unref); + +- g_free (old_uri); +- g_free (new_uri); +- + /* Rename GalView files. */ + + for (ii = 0; ii < G_N_ELEMENTS (cachenames); ii++) { +@@ -704,6 +701,9 @@ mail_backend_folder_renamed_cb (MailFolderCache *folder_cache, + g_free (newname); + } + ++ g_free (old_uri); ++ g_free (new_uri); ++ + /* This does something completely different. + * XXX Make it a separate signal handler? */ + mail_filter_rename_folder ( +-- +cgit v0.9.0.2 diff --git a/evolution-schedule-higher-idle-priority-actions.patch b/evolution-schedule-higher-idle-priority-actions.patch new file mode 100644 index 0000000..6dc23c9 --- /dev/null +++ b/evolution-schedule-higher-idle-priority-actions.patch @@ -0,0 +1,338 @@ +From cabfd4b9f6c9f5f8deaba750529308de7aafde5d Mon Sep 17 00:00:00 2001 +From: Michel Dänzer +Date: Fri, 08 Feb 2013 11:37:46 +0000 +Subject: Bug #683867 - Schedule actions with higher idle priority + +--- +diff --git a/em-format/e-mail-parser.c b/em-format/e-mail-parser.c +index 36e6676..b13ebd9 100644 +--- a/em-format/e-mail-parser.c ++++ b/em-format/e-mail-parser.c +@@ -660,9 +660,10 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser, + } + + /* e_attachment_load_async must be called from main thread */ +- g_idle_add ( ++ g_idle_add_full (G_PRIORITY_HIGH, + (GSourceFunc) load_attachment_idle, +- g_object_ref (empa->attachment)); ++ g_object_ref (empa->attachment), ++ NULL); + + if (size != 0) { + GFileInfo *fileinfo; +diff --git a/libemail-engine/e-mail-utils.c b/libemail-engine/e-mail-utils.c +index f29b2f7..3043e06 100644 +--- a/libemail-engine/e-mail-utils.c ++++ b/libemail-engine/e-mail-utils.c +@@ -883,7 +883,7 @@ free_mail_cache_thread (gpointer user_data) + + G_UNLOCK (photos_cache); + +- g_idle_add (free_mail_cache_idle, user_data); ++ g_idle_add_full (G_PRIORITY_HIGH, free_mail_cache_idle, user_data, NULL); + + return NULL; + } +diff --git a/libemail-engine/mail-folder-cache.c b/libemail-engine/mail-folder-cache.c +index 5561bb6..9c9c17d 100644 +--- a/libemail-engine/mail-folder-cache.c ++++ b/libemail-engine/mail-folder-cache.c +@@ -304,8 +304,8 @@ flush_updates (MailFolderCache *cache) + if (g_queue_is_empty (&cache->priv->updates)) + return; + +- cache->priv->update_id = g_idle_add ( +- (GSourceFunc) flush_updates_idle_cb, cache); ++ cache->priv->update_id = g_idle_add_full (G_PRIORITY_DEFAULT, ++ (GSourceFunc) flush_updates_idle_cb, cache, NULL); + } + + /* This is how unread counts work (and don't work): +diff --git a/libemail-utils/mail-mt.c b/libemail-utils/mail-mt.c +index 00b3272..f27a645 100644 +--- a/libemail-utils/mail-mt.c ++++ b/libemail-utils/mail-mt.c +@@ -216,7 +216,7 @@ mail_msg_unref (gpointer msg) + + /* Destroy the message from an idle callback + * so we know we're in the main loop thread. */ +- g_idle_add ((GSourceFunc) mail_msg_free, mail_msg); ++ g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) mail_msg_free, mail_msg, NULL); + } + } + +@@ -429,8 +429,8 @@ mail_msg_proxy (MailMsg *msg) + + G_LOCK (idle_source_id); + if (idle_source_id == 0) +- idle_source_id = g_idle_add ( +- (GSourceFunc) mail_msg_idle_cb, NULL); ++ idle_source_id = g_idle_add_full (G_PRIORITY_DEFAULT, ++ (GSourceFunc) mail_msg_idle_cb, NULL, NULL); + G_UNLOCK (idle_source_id); + } + +@@ -484,8 +484,8 @@ mail_msg_main_loop_push (gpointer msg) + + G_LOCK (idle_source_id); + if (idle_source_id == 0) +- idle_source_id = g_idle_add ( +- (GSourceFunc) mail_msg_idle_cb, NULL); ++ idle_source_id = g_idle_add_full (G_PRIORITY_DEFAULT, ++ (GSourceFunc) mail_msg_idle_cb, NULL, NULL); + G_UNLOCK (idle_source_id); + } + +diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c +index ac72716..6b9d04f 100644 +--- a/mail/e-mail-browser.c ++++ b/mail/e-mail-browser.c +@@ -306,7 +306,7 @@ mail_browser_message_list_built_cb (EMailBrowser *browser, + g_return_if_fail (IS_MESSAGE_LIST (message_list)); + + if (!message_list_count (message_list)) +- g_idle_add (close_on_idle_cb, browser); ++ g_idle_add_full (G_PRIORITY_DEFAULT, close_on_idle_cb, browser, NULL); + } + + static gboolean +diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c +index 9da76863..7430a2e 100644 +--- a/mail/e-mail-display.c ++++ b/mail/e-mail-display.c +@@ -1923,7 +1923,7 @@ e_mail_display_reload (EMailDisplay *display) + + /* Schedule reloading if neccessary */ + display->priv->scheduled_reload = +- g_idle_add ((GSourceFunc) do_reload_display, display); ++ g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) do_reload_display, display, NULL); + } + + GtkAction * +diff --git a/mail/e-mail-ui-session.c b/mail/e-mail-ui-session.c +index 47eeea2..66057c3 100644 +--- a/mail/e-mail-ui-session.c ++++ b/mail/e-mail-ui-session.c +@@ -599,7 +599,7 @@ mail_ui_session_add_service (CamelSession *session, + context->service = g_object_ref (service); + + g_idle_add_full ( +- G_PRIORITY_DEFAULT_IDLE, ++ G_PRIORITY_DEFAULT, + (GSourceFunc) mail_ui_session_add_service_cb, + context, (GDestroyNotify) source_context_free); + } +diff --git a/modules/itip-formatter/itip-view.c b/modules/itip-formatter/itip-view.c +index 0e9b39f..c15fa5d 100644 +--- a/modules/itip-formatter/itip-view.c ++++ b/modules/itip-formatter/itip-view.c +@@ -5723,7 +5723,7 @@ view_response_cb (ItipView *view, + send_item (pitip, view); + break; + case ITIP_VIEW_RESPONSE_OPEN: +- g_idle_add (idle_open_cb, pitip); ++ g_idle_add_full (G_PRIORITY_DEFAULT, idle_open_cb, pitip, NULL); + return; + default: + break; +diff --git a/plugins/mail-to-task/mail-to-task.c b/plugins/mail-to-task/mail-to-task.c +index 553955c..1ff2ccc 100644 +--- a/plugins/mail-to-task/mail-to-task.c ++++ b/plugins/mail-to-task/mail-to-task.c +@@ -1014,7 +1014,7 @@ do_mail_to_event (AsyncData *data) + if (!e_cal_client_get_object_sync (client, icalcomponent_get_uid (icalcomp), NULL, &(mc->stored_comp), NULL, NULL)) + mc->stored_comp = NULL; + +- g_idle_add ((GSourceFunc) do_manage_comp_idle, mc); ++ g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) do_manage_comp_idle, mc, NULL); + + oldmc = mc; + +diff --git a/shell/e-shell-searchbar.c b/shell/e-shell-searchbar.c +index 7975f74..5c8e050 100644 +--- a/shell/e-shell-searchbar.c ++++ b/shell/e-shell-searchbar.c +@@ -1546,7 +1546,7 @@ e_shell_searchbar_load_state (EShellSearchbar *searchbar) + /* Execute the search when we have time. */ + g_object_ref (shell_view); + searchbar->priv->state_dirty = FALSE; +- g_idle_add (idle_execute_search, shell_view); ++ g_idle_add_full (G_PRIORITY_DEFAULT, idle_execute_search, shell_view, NULL); + } + + void +diff --git a/smime/gui/certificate-manager.c b/smime/gui/certificate-manager.c +index 3d823e6..f9f1b8a 100644 +--- a/smime/gui/certificate-manager.c ++++ b/smime/gui/certificate-manager.c +@@ -1078,7 +1078,7 @@ e_cert_manager_config_init (ECertManagerConfig *ecmc) + * fully initialize itself and start its main loop before we + * load certificates, since doing so may trigger a password + * dialog, and dialogs require a main loop. */ +- g_idle_add ((GSourceFunc) populate_ui, ecmc); ++ g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) populate_ui, ecmc, NULL); + + /* Disconnect cert-manager-notebook from it's window and attach it + * to this ECertManagerConfig */ +-- +cgit v0.9.0.2 +From c364610d5f3939d5ee263615a94626602a35a9ae Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Fri, 08 Feb 2013 17:26:30 +0000 +Subject: Add comments around g_idle_add() changes + +--- +diff --git a/em-format/e-mail-parser.c b/em-format/e-mail-parser.c +index b13ebd9..213e324 100644 +--- a/em-format/e-mail-parser.c ++++ b/em-format/e-mail-parser.c +@@ -660,6 +660,7 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser, + } + + /* e_attachment_load_async must be called from main thread */ ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + g_idle_add_full (G_PRIORITY_HIGH, + (GSourceFunc) load_attachment_idle, + g_object_ref (empa->attachment), +diff --git a/libemail-engine/e-mail-utils.c b/libemail-engine/e-mail-utils.c +index 3043e06..72a7473 100644 +--- a/libemail-engine/e-mail-utils.c ++++ b/libemail-engine/e-mail-utils.c +@@ -883,6 +883,7 @@ free_mail_cache_thread (gpointer user_data) + + G_UNLOCK (photos_cache); + ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + g_idle_add_full (G_PRIORITY_HIGH, free_mail_cache_idle, user_data, NULL); + + return NULL; +diff --git a/libemail-engine/mail-folder-cache.c b/libemail-engine/mail-folder-cache.c +index 9c9c17d..5a02340 100644 +--- a/libemail-engine/mail-folder-cache.c ++++ b/libemail-engine/mail-folder-cache.c +@@ -304,6 +304,7 @@ flush_updates (MailFolderCache *cache) + if (g_queue_is_empty (&cache->priv->updates)) + return; + ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + cache->priv->update_id = g_idle_add_full (G_PRIORITY_DEFAULT, + (GSourceFunc) flush_updates_idle_cb, cache, NULL); + } +diff --git a/libemail-utils/mail-mt.c b/libemail-utils/mail-mt.c +index f27a645..38e4d7c 100644 +--- a/libemail-utils/mail-mt.c ++++ b/libemail-utils/mail-mt.c +@@ -216,6 +216,7 @@ mail_msg_unref (gpointer msg) + + /* Destroy the message from an idle callback + * so we know we're in the main loop thread. */ ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) mail_msg_free, mail_msg, NULL); + } + } +@@ -429,6 +430,7 @@ mail_msg_proxy (MailMsg *msg) + + G_LOCK (idle_source_id); + if (idle_source_id == 0) ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + idle_source_id = g_idle_add_full (G_PRIORITY_DEFAULT, + (GSourceFunc) mail_msg_idle_cb, NULL, NULL); + G_UNLOCK (idle_source_id); +@@ -484,6 +486,7 @@ mail_msg_main_loop_push (gpointer msg) + + G_LOCK (idle_source_id); + if (idle_source_id == 0) ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + idle_source_id = g_idle_add_full (G_PRIORITY_DEFAULT, + (GSourceFunc) mail_msg_idle_cb, NULL, NULL); + G_UNLOCK (idle_source_id); +diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c +index 6b9d04f..985beac 100644 +--- a/mail/e-mail-browser.c ++++ b/mail/e-mail-browser.c +@@ -306,6 +306,7 @@ mail_browser_message_list_built_cb (EMailBrowser *browser, + g_return_if_fail (IS_MESSAGE_LIST (message_list)); + + if (!message_list_count (message_list)) ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + g_idle_add_full (G_PRIORITY_DEFAULT, close_on_idle_cb, browser, NULL); + } + +diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c +index 7430a2e..9043a45 100644 +--- a/mail/e-mail-display.c ++++ b/mail/e-mail-display.c +@@ -1922,6 +1922,7 @@ e_mail_display_reload (EMailDisplay *display) + return; + + /* Schedule reloading if neccessary */ ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + display->priv->scheduled_reload = + g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) do_reload_display, display, NULL); + } +diff --git a/mail/e-mail-ui-session.c b/mail/e-mail-ui-session.c +index 66057c3..2e4ded6 100644 +--- a/mail/e-mail-ui-session.c ++++ b/mail/e-mail-ui-session.c +@@ -598,6 +598,7 @@ mail_ui_session_add_service (CamelSession *session, + context->session = g_object_ref (session); + context->service = g_object_ref (service); + ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + g_idle_add_full ( + G_PRIORITY_DEFAULT, + (GSourceFunc) mail_ui_session_add_service_cb, +diff --git a/modules/itip-formatter/itip-view.c b/modules/itip-formatter/itip-view.c +index c15fa5d..520ea7b 100644 +--- a/modules/itip-formatter/itip-view.c ++++ b/modules/itip-formatter/itip-view.c +@@ -5723,6 +5723,7 @@ view_response_cb (ItipView *view, + send_item (pitip, view); + break; + case ITIP_VIEW_RESPONSE_OPEN: ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + g_idle_add_full (G_PRIORITY_DEFAULT, idle_open_cb, pitip, NULL); + return; + default: +diff --git a/plugins/mail-to-task/mail-to-task.c b/plugins/mail-to-task/mail-to-task.c +index 1ff2ccc..6986468 100644 +--- a/plugins/mail-to-task/mail-to-task.c ++++ b/plugins/mail-to-task/mail-to-task.c +@@ -1014,6 +1014,7 @@ do_mail_to_event (AsyncData *data) + if (!e_cal_client_get_object_sync (client, icalcomponent_get_uid (icalcomp), NULL, &(mc->stored_comp), NULL, NULL)) + mc->stored_comp = NULL; + ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) do_manage_comp_idle, mc, NULL); + + oldmc = mc; +diff --git a/shell/e-shell-searchbar.c b/shell/e-shell-searchbar.c +index 5c8e050..4dd8b48 100644 +--- a/shell/e-shell-searchbar.c ++++ b/shell/e-shell-searchbar.c +@@ -1546,6 +1546,7 @@ e_shell_searchbar_load_state (EShellSearchbar *searchbar) + /* Execute the search when we have time. */ + g_object_ref (shell_view); + searchbar->priv->state_dirty = FALSE; ++ /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ + g_idle_add_full (G_PRIORITY_DEFAULT, idle_execute_search, shell_view, NULL); + } + +diff --git a/smime/gui/certificate-manager.c b/smime/gui/certificate-manager.c +index f9f1b8a..978e497 100644 +--- a/smime/gui/certificate-manager.c ++++ b/smime/gui/certificate-manager.c +@@ -1077,7 +1077,9 @@ e_cert_manager_config_init (ECertManagerConfig *ecmc) + /* Run this in an idle callback so Evolution has a chance to + * fully initialize itself and start its main loop before we + * load certificates, since doing so may trigger a password +- * dialog, and dialogs require a main loop. */ ++ * dialog, and dialogs require a main loop. ++ * Schedule with priority higher than gtk+ uses for animations ++ * (check docs for G_PRIORITY_HIGH_IDLE). */ + g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) populate_ui, ecmc, NULL); + + /* Disconnect cert-manager-notebook from it's window and attach it +-- +cgit v0.9.0.2 diff --git a/evolution-use-G_PRIORITY_HIGH_IDLE.patch b/evolution-use-G_PRIORITY_HIGH_IDLE.patch new file mode 100644 index 0000000..b735220 --- /dev/null +++ b/evolution-use-G_PRIORITY_HIGH_IDLE.patch @@ -0,0 +1,232 @@ +From 51419ff0d41e034dcd59ab860184f5e4ba752708 Mon Sep 17 00:00:00 2001 +From: Matthew Barnes +Date: Fri, 08 Feb 2013 19:21:42 +0000 +Subject: G_PRIORITY_HIGH_IDLE is sufficient to beat GTK+ redraws. + +GTK+ uses (G_PRIORITY_HIGH_IDLE + 20) for redrawing operations, which is +actually a slightly lower priority than G_PRIORITY_HIGH_IDLE. Therefore +for our purpose, G_PRIORITY_HIGH_IDLE is sufficient. + +(cherry picked from commit 60d1c3054aa60d02c763538d6b1f16d9d6ab6ade) +--- +diff --git a/em-format/e-mail-parser.c b/em-format/e-mail-parser.c +index 213e324..0a44798 100644 +--- a/em-format/e-mail-parser.c ++++ b/em-format/e-mail-parser.c +@@ -660,8 +660,9 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser, + } + + /* e_attachment_load_async must be called from main thread */ +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- g_idle_add_full (G_PRIORITY_HIGH, ++ /* Prioritize ahead of GTK+ redraws. */ ++ g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, + (GSourceFunc) load_attachment_idle, + g_object_ref (empa->attachment), + NULL); +diff --git a/libemail-engine/e-mail-utils.c b/libemail-engine/e-mail-utils.c +index 72a7473..52c5fb3 100644 +--- a/libemail-engine/e-mail-utils.c ++++ b/libemail-engine/e-mail-utils.c +@@ -883,8 +883,10 @@ free_mail_cache_thread (gpointer user_data) + + G_UNLOCK (photos_cache); + +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- g_idle_add_full (G_PRIORITY_HIGH, free_mail_cache_idle, user_data, NULL); ++ /* Prioritize ahead of GTK+ redraws. */ ++ g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, ++ free_mail_cache_idle, user_data, NULL); + + return NULL; + } +diff --git a/libemail-engine/mail-folder-cache.c b/libemail-engine/mail-folder-cache.c +index 5a02340..e6356cb 100644 +--- a/libemail-engine/mail-folder-cache.c ++++ b/libemail-engine/mail-folder-cache.c +@@ -304,8 +304,9 @@ flush_updates (MailFolderCache *cache) + if (g_queue_is_empty (&cache->priv->updates)) + return; + +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- cache->priv->update_id = g_idle_add_full (G_PRIORITY_DEFAULT, ++ /* Prioritize ahead of GTK+ redraws. */ ++ cache->priv->update_id = g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, + (GSourceFunc) flush_updates_idle_cb, cache, NULL); + } + +diff --git a/libemail-utils/mail-mt.c b/libemail-utils/mail-mt.c +index 38e4d7c..9e7d9d6 100644 +--- a/libemail-utils/mail-mt.c ++++ b/libemail-utils/mail-mt.c +@@ -215,9 +215,11 @@ mail_msg_unref (gpointer msg) + g_mutex_unlock (mail_msg_lock); + + /* Destroy the message from an idle callback +- * so we know we're in the main loop thread. */ +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) mail_msg_free, mail_msg, NULL); ++ * so we know we're in the main loop thread. ++ * Prioritize ahead of GTK+ redraws. */ ++ g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, ++ (GSourceFunc) mail_msg_free, mail_msg, NULL); + } + } + +@@ -430,8 +432,9 @@ mail_msg_proxy (MailMsg *msg) + + G_LOCK (idle_source_id); + if (idle_source_id == 0) +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- idle_source_id = g_idle_add_full (G_PRIORITY_DEFAULT, ++ /* Prioritize ahead of GTK+ redraws. */ ++ idle_source_id = g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, + (GSourceFunc) mail_msg_idle_cb, NULL, NULL); + G_UNLOCK (idle_source_id); + } +@@ -486,8 +489,9 @@ mail_msg_main_loop_push (gpointer msg) + + G_LOCK (idle_source_id); + if (idle_source_id == 0) +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- idle_source_id = g_idle_add_full (G_PRIORITY_DEFAULT, ++ /* Prioritize ahead of GTK+ redraws. */ ++ idle_source_id = g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, + (GSourceFunc) mail_msg_idle_cb, NULL, NULL); + G_UNLOCK (idle_source_id); + } +diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c +index 985beac..3e82aca 100644 +--- a/mail/e-mail-browser.c ++++ b/mail/e-mail-browser.c +@@ -306,8 +306,10 @@ mail_browser_message_list_built_cb (EMailBrowser *browser, + g_return_if_fail (IS_MESSAGE_LIST (message_list)); + + if (!message_list_count (message_list)) +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- g_idle_add_full (G_PRIORITY_DEFAULT, close_on_idle_cb, browser, NULL); ++ /* Prioritize ahead of GTK+ redraws. */ ++ g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, ++ close_on_idle_cb, browser, NULL); + } + + static gboolean +diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c +index 9043a45..5594439 100644 +--- a/mail/e-mail-display.c ++++ b/mail/e-mail-display.c +@@ -1921,10 +1921,11 @@ e_mail_display_reload (EMailDisplay *display) + if (display->priv->scheduled_reload > 0) + return; + +- /* Schedule reloading if neccessary */ +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- display->priv->scheduled_reload = +- g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) do_reload_display, display, NULL); ++ /* Schedule reloading if neccessary. ++ * Prioritize ahead of GTK+ redraws. */ ++ display->priv->scheduled_reload = g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, ++ (GSourceFunc) do_reload_display, display, NULL); + } + + GtkAction * +diff --git a/mail/e-mail-ui-session.c b/mail/e-mail-ui-session.c +index 2e4ded6..d608b22 100644 +--- a/mail/e-mail-ui-session.c ++++ b/mail/e-mail-ui-session.c +@@ -598,9 +598,9 @@ mail_ui_session_add_service (CamelSession *session, + context->session = g_object_ref (session); + context->service = g_object_ref (service); + +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ ++ /* Prioritize ahead of GTK+ redraws. */ + g_idle_add_full ( +- G_PRIORITY_DEFAULT, ++ G_PRIORITY_HIGH_IDLE, + (GSourceFunc) mail_ui_session_add_service_cb, + context, (GDestroyNotify) source_context_free); + } +diff --git a/modules/itip-formatter/itip-view.c b/modules/itip-formatter/itip-view.c +index 520ea7b..668b718 100644 +--- a/modules/itip-formatter/itip-view.c ++++ b/modules/itip-formatter/itip-view.c +@@ -5723,8 +5723,10 @@ view_response_cb (ItipView *view, + send_item (pitip, view); + break; + case ITIP_VIEW_RESPONSE_OPEN: +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- g_idle_add_full (G_PRIORITY_DEFAULT, idle_open_cb, pitip, NULL); ++ /* Prioritize ahead of GTK+ redraws. */ ++ g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, ++ idle_open_cb, pitip, NULL); + return; + default: + break; +diff --git a/modules/mail/e-mail-config-reader.c b/modules/mail/e-mail-config-reader.c +index aacfbd9..3bbf766 100644 +--- a/modules/mail/e-mail-config-reader.c ++++ b/modules/mail/e-mail-config-reader.c +@@ -84,10 +84,11 @@ static void + mail_config_reader_constructed (GObject *object) + { + /* Bind properties to settings from an idle callback so the +- * EMailReader interface has a chance to be initialized first. */ ++ * EMailReader interface has a chance to be initialized first. ++ * Prioritize ahead of GTK+ redraws. */ + g_idle_add_full ( +- G_PRIORITY_DEFAULT_IDLE, +- (GSourceFunc) mail_config_reader_idle_cb, ++ G_PRIORITY_HIGH_IDLE, ++ (GSourceFunc) mail_config_reader_idle_cb, + g_object_ref (object), + (GDestroyNotify) g_object_unref); + +diff --git a/plugins/mail-to-task/mail-to-task.c b/plugins/mail-to-task/mail-to-task.c +index 6986468..add76e9 100644 +--- a/plugins/mail-to-task/mail-to-task.c ++++ b/plugins/mail-to-task/mail-to-task.c +@@ -1014,8 +1014,10 @@ do_mail_to_event (AsyncData *data) + if (!e_cal_client_get_object_sync (client, icalcomponent_get_uid (icalcomp), NULL, &(mc->stored_comp), NULL, NULL)) + mc->stored_comp = NULL; + +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc) do_manage_comp_idle, mc, NULL); ++ /* Prioritize ahead of GTK+ redraws. */ ++ g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, ++ (GSourceFunc) do_manage_comp_idle, mc, NULL); + + oldmc = mc; + +diff --git a/shell/e-shell-searchbar.c b/shell/e-shell-searchbar.c +index 4dd8b48..07a38f0 100644 +--- a/shell/e-shell-searchbar.c ++++ b/shell/e-shell-searchbar.c +@@ -1544,10 +1544,14 @@ e_shell_searchbar_load_state (EShellSearchbar *searchbar) + gtk_action_unblock_activate (action); + + /* Execute the search when we have time. */ ++ + g_object_ref (shell_view); + searchbar->priv->state_dirty = FALSE; +- /* schedule with priority higher than gtk+ uses for animations (check docs for G_PRIORITY_HIGH_IDLE) */ +- g_idle_add_full (G_PRIORITY_DEFAULT, idle_execute_search, shell_view, NULL); ++ ++ /* Prioritize ahead of GTK+ redraws. */ ++ g_idle_add_full ( ++ G_PRIORITY_HIGH_IDLE, ++ idle_execute_search, shell_view, NULL); + } + + void +-- +cgit v0.9.0.2 diff --git a/evolution.changes b/evolution.changes index eb47763..a8c883a 100644 --- a/evolution.changes +++ b/evolution.changes @@ -1,3 +1,21 @@ +------------------------------------------------------------------- +Fri Feb 8 22:58:23 UTC 2013 - badshah400@gmail.com + +- Added patches from upstream git: + + evolution-fix-crash-when-searching.patch (bgo#639698) + + evolution-fix-empty-body-reply.patch (bgo#680537) + + evolution-fix-message-quoted-twice.patch (bgo#692775) + + evolution-fix-text-css-as-attachment.patch (bgo#692009) + + evolution-pine-importer.patch (bgo#692781) + + evolution-prevent-crash-edit-task-prompt-cancel.patch + (bgo#692783) + + evolution-prevent-crash-on-folder-rename.patch (bgo#692777) + + evolution-schedule-higher-idle-priority-actions.patch + (bgo#683867) + + evolution-use-G_PRIORITY_HIGH_IDLE.patch (bgo#683867) [with + minor edit to the upstream patch to fix a build error this + introduced]. + ------------------------------------------------------------------- Tue Jan 22 16:21:44 UTC 2013 - dimstar@opensuse.org diff --git a/evolution.spec b/evolution.spec index bc363ec..d16e156 100644 --- a/evolution.spec +++ b/evolution.spec @@ -33,6 +33,24 @@ Group: Productivity/Networking/Email/Clients # NOTE: Some files are currently GPL-2.0 but pending relicensing, see bnc#749859 Url: http://gnome.org/projects/evolution/ Source0: http://download.gnome.org/sources/evolution/3.6/%{name}-%{version}.tar.xz +# PATCH-FIX-UPSTREAM evolution-fix-crash-when-searching.patch bgo#639698 badshah400@gmail.com -- Fix crash when search is initiated on a non-real folder; patch taken from upstream git. +Patch1: evolution-fix-crash-when-searching.patch +# PATCH-FIX-UPSTREAM evolution-fix-empty-body-reply.patch bgo#680537 badshah400@gmail.com -- Fix a case where replying to a digest mail gives an empty-body mail in composer; patch came from upstream git. +Patch2: evolution-fix-empty-body-reply.patch +# PATCH-FIX-UPSTREAM evolution-fix-text-css-as-attachment.patch bgo#692009 badshah400@gmail.com -- Fix formatting issues with text/css as attachment +Patch3: evolution-fix-text-css-as-attachment.patch +# PATCH-FIX-UPSTREAM evolution-fix-message-quoted-twice.patch bgo#692775 badshah400@gmail.com -- Fix reply to email with both HTML and text constent being quoted twice; patch came from upstream +Patch4: evolution-fix-message-quoted-twice.patch +# PATCH-FIX-UPSTREAM evolution-prevent-crash-on-folder-rename.patch bgo#692777 badshah400@gmail.com -- Prevent crash on folder rename +Patch5: evolution-prevent-crash-on-folder-rename.patch +# PATCH-FIX-UPSTREAM evolution-prevent-crash-edit-task-prompt-cancel.patch bgo#692783 badshah400@gmail.com -- Prevent a crash when cancelling the prompt for editing task; patch taken from upstream git +Patch6: evolution-prevent-crash-edit-task-prompt-cancel.patch +# PATCH-FIX-UPSTREAM evolution-pine-importer.patch bgo#692781 badshah400@gmail.com -- Fix abort on book import failure; patch taken from upstream git +Patch7: evolution-pine-importer.patch +# PATCH-FIX-UPSTREAM evolution-schedule-higher-idle-priority-actions.patch bgo#683867 badshah400@gmail.com -- Schedule actions with highler idle priority; patch taken from upstream git +Patch8: evolution-schedule-higher-idle-priority-actions.patch +# PATCH-FIX-UPSTREAM evolution-use-G_PRIORITY_HIGH_IDLE.patch bgo#683867 badshah400@gmail.com -- Use G_PRIORITY_HIGH_IDLE to beat gtk+ redraws; patch taken from upstream git +Patch9: evolution-use-G_PRIORITY_HIGH_IDLE.patch # PATCH-FIX-UPSTREAM bnc-435722-book-uri-long.patch bnc#435722 abharath@suse.de -- Book URI: Spills Into Second Column. Patch19: bnc-435722-book-uri-long.patch BuildRequires: bison @@ -125,8 +143,17 @@ to develop applications that require these. %lang_package %prep %setup -q -translation-update-upstream %patch19 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +translation-update-upstream %build %if %{need_autogen}