summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2014-06-03 12:17:39 +0200
committerAleksander Machniak <alec@alec.pl>2014-06-03 12:17:39 +0200
commitd28daec9181534aea9520906bd3b660dad3f2bb0 (patch)
treea79c46af9019d69b7255c5458ea617ac52f87057
parentbf743b7681f24c5128c7ceb9c8176a0ab15fa169 (diff)
Fix so message list and counters are updated when a message is opened in new window (#1489919)
-rw-r--r--CHANGELOG1
-rw-r--r--program/js/app.js34
-rw-r--r--program/steps/mail/show.inc7
3 files changed, 31 insertions, 11 deletions
diff --git a/CHANGELOG b/CHANGELOG
index b0cca3a19..61a48f715 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -36,6 +36,7 @@ CHANGELOG Roundcube Webmail
- Fix unintentional line-height style modification in HTML messages (#1489917)
- Fix broken normalize_string(), add support for ISO-8859-2 (#1489918)
- Support csv contacts import in German localization (#1489920)
+- Fix so message list and counters are updated when a message is opened in new window (#1489919)
RELEASE 1.0.1
-------------
diff --git a/program/js/app.js b/program/js/app.js
index 45e4c3b14..124079938 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -2115,20 +2115,38 @@ function rcube_webmail()
this.location_href(this.env.comm_path+url, target, true);
// mark as read and change mbox unread counter
- if (preview && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread && this.env.preview_pane_mark_read >= 0) {
+ if (preview && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread && this.env.preview_pane_mark_read > 0) {
this.preview_read_timer = setTimeout(function() {
- ref.set_message(id, 'unread', false);
- if (ref.env.unread_counts[ref.env.mailbox]) {
- ref.env.unread_counts[ref.env.mailbox] -= 1;
- ref.set_unread_count(ref.env.mailbox, ref.env.unread_counts[ref.env.mailbox], ref.env.mailbox == 'INBOX');
- }
- if (ref.env.preview_pane_mark_read > 0)
- ref.http_post('mark', {_uid: id, _flag: 'read', _quiet: 1});
+ ref.set_unread_message(id, ref.env.mailbox);
+ ref.http_post('mark', {_uid: id, _flag: 'read', _quiet: 1});
}, this.env.preview_pane_mark_read * 1000);
}
}
};
+ // update message status and unread counter after marking a message as read
+ this.set_unread_message = function(id, folder)
+ {
+ var self = this;
+
+ // find window with messages list
+ if (!self.message_list)
+ self = self.opener();
+
+ if (!self && window.parent)
+ self = parent.rcmail;
+
+ if (!self || !self.message_list)
+ return;
+
+ self.set_message(id, 'unread', false);
+
+ if (self.env.unread_counts[folder] > 0) {
+ self.env.unread_counts[folder] -= 1;
+ self.set_unread_count(folder, self.env.unread_counts[folder], folder == 'INBOX');
+ }
+ };
+
this.show_contentframe = function(show)
{
var frame, win, name = this.env.contentframe;
diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc
index beb2cc6e9..f1c10da3d 100644
--- a/program/steps/mail/show.inc
+++ b/program/steps/mail/show.inc
@@ -148,11 +148,14 @@ if ($uid) {
if (empty($MESSAGE->headers->flags['SEEN'])
&& ($RCMAIL->action == 'show' || ($RCMAIL->action == 'preview' && intval($RCMAIL->config->get('preview_pane_mark_read')) == 0))
) {
+ $RCMAIL->output->command('set_unread_message', $MESSAGE->uid, $mbox_name);
$RCMAIL->plugins->exec_hook('message_read', array(
'uid' => $MESSAGE->uid,
'mailbox' => $mbox_name,
'message' => $MESSAGE,
));
+
+ $set_seen_flag = true;
}
}
@@ -174,9 +177,7 @@ else
// mark message as read
-if ($MESSAGE && $MESSAGE->headers && empty($MESSAGE->headers->flags['SEEN']) &&
- ($RCMAIL->action == 'show' || ($RCMAIL->action == 'preview' && intval($RCMAIL->config->get('preview_pane_mark_read')) == 0))
-) {
+if (!empty($set_seen_flag)) {
if ($RCMAIL->storage->set_flag($MESSAGE->uid, 'SEEN')) {
if ($count = rcmail_get_unseen_count($mbox_name)) {
rcmail_set_unseen_count($mbox_name, $count - 1);