From 64f7d6758fd269823ab19270a6ef5658f0a28669 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 05 Jun 2014 09:54:25 -0400
Subject: [PATCH] Select/scroll to previously selected message when returning from message page (#1489023)

---
 CHANGELOG                   |    1 +
 program/steps/mail/func.inc |    4 ++++
 program/js/app.js           |   24 ++++++++++++++++++++----
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 61a48f7..32a0c27 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Select/scroll to previously selected message when returning from message page (#1489023)
 - Display a warning if popup window was blocked (#1489618)
 - Remove (was: ...) from message subject on reply (#1489375)
 - Update to TinyMCE 4.0 (#1489057)
diff --git a/program/js/app.js b/program/js/app.js
index 6d66aa2..53eaa4a 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -2428,6 +2428,9 @@
       url._framed = 1;
     }
 
+    if (this.env.uid)
+      url._uid = this.env.uid;
+
     // load message list to target frame/window
     if (mbox) {
       this.set_busy(true, 'loading');
@@ -7255,11 +7258,24 @@
           this.enable_command('expand-all', 'expand-unread', 'collapse-all', this.env.threading && this.env.messagecount && !is_multifolder);
 
           if ((response.action == 'list' || response.action == 'search') && this.message_list) {
+            var list = this.message_list, uid = this.env.list_uid;
+
+            // highlight message row when we're back from message page
+            if (uid) {
+              if (!list.rows[uid])
+                uid += '-' + this.env.mailbox;
+              if (list.rows[uid]) {
+                list.select(uid);
+              }
+              delete this.env.list_uid;
+            }
+
             this.enable_command('set-listmode', this.env.threads && !is_multifolder);
-            if (this.message_list.rowcount > 0)
-              this.message_list.focus();
-            this.msglist_select(this.message_list);
-            this.triggerEvent('listupdate', { folder:this.env.mailbox, rowcount:this.message_list.rowcount });
+            if (list.rowcount > 0)
+              list.focus();
+            this.msglist_select(list);
+            this.triggerEvent('listupdate', { folder:this.env.mailbox, rowcount:list.rowcount });
+
           }
         }
         else if (this.task == 'addressbook') {
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 0dba3c1..ac343ad 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -104,6 +104,10 @@
         }
     }
 
+    if (!empty($_GET['_uid'])) {
+        $OUTPUT->set_env('list_uid', $_GET['_uid']);
+    }
+
     // set configuration
     $RCMAIL->set_env_config(array('delete_junk', 'flag_for_deletion', 'read_when_deleted',
         'skip_deleted', 'display_next', 'message_extwin', 'compose_extwin', 'forward_attachment'));

--
Gitblit v1.9.1