[evolution/evolution-3-12] Bug 731231 - Automatic 'mark as seen' sometimes cancelled incorrectly



commit f7f6b9db3da90f3341a9e5ab2d9d8ef065702bad
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 21eec0d..f5f8a6b 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -2895,19 +2895,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]