aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2014-06-17 20:16:42 +0800
committerMilan Crha <mcrha@redhat.com>2014-06-17 20:16:42 +0800
commit4ba8b147ac806e197e96ba66d8a4d2fd26623f71 (patch)
tree09e01ba2d5753c8c096bef119b856bf60c652d53
parentcef3b32167f0b04f028767eceb3030eea81cabc9 (diff)
downloadgsoc2013-evolution-4ba8b147ac806e197e96ba66d8a4d2fd26623f71.tar
gsoc2013-evolution-4ba8b147ac806e197e96ba66d8a4d2fd26623f71.tar.gz
gsoc2013-evolution-4ba8b147ac806e197e96ba66d8a4d2fd26623f71.tar.bz2
gsoc2013-evolution-4ba8b147ac806e197e96ba66d8a4d2fd26623f71.tar.lz
gsoc2013-evolution-4ba8b147ac806e197e96ba66d8a4d2fd26623f71.tar.xz
gsoc2013-evolution-4ba8b147ac806e197e96ba66d8a4d2fd26623f71.tar.zst
gsoc2013-evolution-4ba8b147ac806e197e96ba66d8a4d2fd26623f71.zip
Bug 731231 - Automatic 'mark as seen' sometimes cancelled incorrectly
-rw-r--r--mail/e-mail-reader.c34
1 files 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;