[evolution] Bug 731231 - Automatic 'mark as seen' sometimes cancelled incorrectly
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 731231 - Automatic 'mark as seen' sometimes cancelled incorrectly
- Date: Tue, 17 Jun 2014 12:17:07 +0000 (UTC)
commit 4ba8b147ac806e197e96ba66d8a4d2fd26623f71
Author: Milan Crha <mcrha redhat com>
Date: Tue Jun 17 14:16:42 2014 +0200
Bug 731231 - Automatic 'mark as seen' sometimes cancelled incorrectly
mail/e-mail-reader.c | 34 +++++++++++++++++++++++++++-------
1 files changed, 27 insertions(+), 7 deletions(-)
---
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index 46c4cf9..9dc6ed3 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -2899,19 +2899,39 @@ mail_reader_message_selected_cb (EMailReader *reader,
/* Cancel the previous message retrieval activity. */
g_cancellable_cancel (priv->retrieving_message);
- /* Cancel the seen timer. */
- message_list = MESSAGE_LIST (e_mail_reader_get_message_list (reader));
- if (message_list != NULL && message_list->seen_id) {
- g_source_remove (message_list->seen_id);
- message_list->seen_id = 0;
- }
-
/* Cancel the message selected timer. */
if (priv->message_selected_timeout_id > 0) {
g_source_remove (priv->message_selected_timeout_id);
priv->message_selected_timeout_id = 0;
}
+ message_list = MESSAGE_LIST (e_mail_reader_get_message_list (reader));
+ if (message_list) {
+ EMailPartList *parts;
+ const gchar *cursor_uid, *format_uid;
+
+ parts = e_mail_display_get_part_list (e_mail_reader_get_mail_display (reader));
+
+ cursor_uid = MESSAGE_LIST (message_list)->cursor_uid;
+ if (parts != NULL)
+ format_uid = e_mail_part_list_get_message_uid (parts);
+ else
+ format_uid = NULL;
+
+ /* It can happen when the message was loaded that quickly that
+ it was delivered before this callback. */
+ if (g_strcmp0 (cursor_uid, format_uid) == 0) {
+ e_mail_reader_changed (reader);
+ return;
+ }
+ }
+
+ /* Cancel the seen timer. */
+ if (message_list != NULL && message_list->seen_id) {
+ g_source_remove (message_list->seen_id);
+ message_list->seen_id = 0;
+ }
+
if (message_list_selected_count (message_list) != 1) {
EMailDisplay *display;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]