From 4ba8b147ac806e197e96ba66d8a4d2fd26623f71 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 17 Jun 2014 14:16:42 +0200 Subject: Bug 731231 - Automatic 'mark as seen' sometimes cancelled incorrectly --- mail/e-mail-reader.c | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 46c4cf92e3..9dc6ed3001 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; -- cgit v1.2.3