From 97dd6a29b267c1bbad4e9041f8b1c4f981aa02b8 Mon Sep 17 00:00:00 2001 From: "Stephen J. Kiernan" Date: Thu, 28 May 2026 16:19:11 -0400 Subject: [PATCH] Fix folder bounce back during initialization Refine session restoration to only trigger at the default entry point (Inbox with no specific message or action in the URL). This prevents the plugin from unexpectedly jumping back to a remembered mailbox during normal interactions, such as after deleting an email, while still preserving the 'remember last folder' behavior for fresh sessions. --- contextmenu_folder.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/contextmenu_folder.js b/contextmenu_folder.js index a846925..c995938 100644 --- a/contextmenu_folder.js +++ b/contextmenu_folder.js @@ -1,4 +1,4 @@ -// Plugin: contextmenu_folder +// Plugin: contextmenu_folder // Roundcube Context Menu Folder Manager // Adds context menus with mailbox operations @@ -18,6 +18,9 @@ function plugin_contextmenu_folder() { // mailbox full path this.selected_folder = null; + this.initial_mailbox = rcmail.env ? rcmail.env.mailbox : null; + this.initial_uid = rcmail.env ? rcmail.env.uid : null; + // message imap uid this.selected_message = null; @@ -1162,12 +1165,24 @@ plugin_contextmenu_folder.prototype.initialize = function initialize() { window.setTimeout(function remember_mailbox() { self.log('...'); if (self.has_feature('remember_mailbox')) { - self.mbox_locate(self.env('memento_current_mailbox')); + var memento = self.env('memento_current_mailbox'); + var is_initial = rcmail.env.mailbox == self.initial_mailbox; + var is_entry = !(/[?&]_mbox=/.test(window.location.search)) && !(/[?&]_action=/.test(window.location.search)); + var is_inbox = !rcmail.env.mailbox || rcmail.env.mailbox == 'INBOX'; + if (memento && memento != 'INBOX' && is_inbox && is_initial && is_entry) { + self.mbox_locate(memento); + } } window.setTimeout(function remember_message() { self.log('...'); if (self.has_feature('remember_message')) { - self.mesg_locate(self.env('memento_current_message')); + var memento_msg = self.env('memento_current_message'); + var is_initial_msg = rcmail.env.uid == self.initial_uid; + var is_entry_msg = !(/[?&]_uid=/.test(window.location.search)) && !(/[?&]_action=/.test(window.location.search)); + var is_no_msg = !rcmail.env.uid; + if (memento_msg && memento_msg != rcmail.env.uid && is_initial_msg && is_entry_msg && is_no_msg) { + self.mesg_locate(memento_msg); + } } }, 500); }, 500); @@ -2466,3 +2481,4 @@ if (window.rcmail && !rcmail.is_framed()) { }); } +