Browse Source

rebase after pushes

Frank-Rainer Grahl 3 years ago
parent
commit
b2f0f62088

+ 0 - 1340
comm-central/patches/1600103-port296655-v1_6-cc.patch

@@ -1,1340 +0,0 @@
-# HG changeset patch
-# User Ian Neal <iann_cvs@blueyonder.co.uk>
-# Date 1603658114 0
-# Parent  002b649f6304edfef7c568a2f54cd3115875ab4a
-Bug 1600103 - Port |Bug 296655 - selection of multiple mailboxes/folders in the folders pane is possible but not usable| to SeaMonkey. r=frg
-Port the relevant changes from:
-* Bug 296655 - selection of multiple mailboxes/folders in the folders pane is possible but not usable
-* Bug 236667 - hide 'Subscribe...' context menu item when not on an account of the proper server type
-* Bug 1210071 - Fix folder contextmenu regression in Bug 236667
-* Bug 39121 - Unspecialize Trash folder for IMAP "Mark as Deleted" & "Remove Immediately" modes
-* Bug 490326 - don't allow sub-folders or saved searches under smart folders inbox
-* Bug 492964 - Get New Messages for <selected account> is trying to get messages for all the accounts when using global inbox
-* Bug 560193 - Allow deleting a saved search under news account
-* Bug 1503734 - Remove needless constants for nsMsgFolderFlags
-* Bug 473642 - the compact button should be disabled for saved searches
-* Bug 496543 - Marks folders as read only marks first folder
-
-diff --git a/mailnews/news/src/nsNntpIncomingServer.cpp b/mailnews/news/src/nsNntpIncomingServer.cpp
---- a/mailnews/news/src/nsNntpIncomingServer.cpp
-+++ b/mailnews/news/src/nsNntpIncomingServer.cpp
-@@ -1468,16 +1468,25 @@ nsNntpIncomingServer::GroupNotFound(nsIM
- 
- NS_IMETHODIMP
- nsNntpIncomingServer::SetPrettyNameForGroup(const nsAString& name,
-                                             const nsAString& prettyName) {
-   return NS_ERROR_NOT_IMPLEMENTED;
- }
- 
- NS_IMETHODIMP
-+nsNntpIncomingServer::GetCanCompactFoldersOnServer(
-+    bool* canCompactFoldersOnServer) {
-+  NS_ENSURE_ARG_POINTER(canCompactFoldersOnServer);
-+  // Initialize canCompactFoldersOnServer false, a default value for NNTP
-+  *canCompactFoldersOnServer = false;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
- nsNntpIncomingServer::GetCanSearchMessages(bool* canSearchMessages) {
-   NS_ENSURE_ARG_POINTER(canSearchMessages);
-   *canSearchMessages = true;
-   return NS_OK;
- }
- 
- NS_IMETHODIMP
- nsNntpIncomingServer::GetOfflineSupportLevel(int32_t* aSupportLevel) {
-diff --git a/mailnews/news/src/nsNntpIncomingServer.h b/mailnews/news/src/nsNntpIncomingServer.h
---- a/mailnews/news/src/nsNntpIncomingServer.h
-+++ b/mailnews/news/src/nsNntpIncomingServer.h
-@@ -53,16 +53,17 @@ class nsNntpIncomingServer : public nsMs
-                                      const nsACString& newName,
-                                      bool hostnameChanged) override;
- 
-   // for nsMsgLineBuffer
-   virtual nsresult HandleLine(const char* line, uint32_t line_size);
- 
-   // override to clear all passwords associated with server
-   NS_IMETHODIMP ForgetPassword() override;
-+  NS_IMETHOD GetCanCompactFoldersOnServer(bool* canCompactFoldersOnServer) override;
-   NS_IMETHOD GetCanSearchMessages(bool* canSearchMessages) override;
-   NS_IMETHOD GetOfflineSupportLevel(int32_t* aSupportLevel) override;
-   NS_IMETHOD GetDefaultCopiesAndFoldersPrefsToServer(
-       bool* aCopiesAndFoldersOnServer) override;
-   NS_IMETHOD GetCanCreateFoldersOnServer(
-       bool* aCanCreateFoldersOnServer) override;
-   NS_IMETHOD GetCanFileMessagesOnServer(
-       bool* aCanFileMessagesOnServer) override;
-diff --git a/suite/locales/en-US/chrome/mailnews/messenger.properties b/suite/locales/en-US/chrome/mailnews/messenger.properties
---- a/suite/locales/en-US/chrome/mailnews/messenger.properties
-+++ b/suite/locales/en-US/chrome/mailnews/messenger.properties
-@@ -6,23 +6,25 @@
- 
- # LOCALIZATION NOTE(statusMessage):
- # Do not translate the words %1$S and %2$S below. Place the word %1$S where the
- # account name should appear and %2$S where the status message should appear.
- # EXAMPLE: Jim's Account: Downloading messages...
- statusMessage=%1$S: %2$S
- 
- renameFolder=Rename Folder…
--compactFolder=Compact This Folder
-+compactFolders=Compact This Folder;Compact These Folders
- removeAccount=Delete Account…
- removeFolder=Delete Folder
- newFolderMenuItem=Folder…
- newSubfolderMenuItem=Subfolder…
- newFolder=New Folder…
- newSubfolder=New Subfolder…
-+markFolderRead=Mark Folder Read;Mark Folders Read
-+markNewsgroupRead=Mark Newsgroup Read;Mark Newsgroups Read
- folderProperties=Folder Properties
- getMessages=Get Messages
- getMessagesFor=Get Messages For Account
- # LOCALIZATION NOTE (getNextNewsMessages): Semi-colon list of plural forms.
- # #1 is the number of news messages to get.
- getNextNewsMessages=Get Next #1 News Message;Get Next #1 News Messages
- advanceNextPrompt=Advance to next unread message in %S?
- titleNewsPreHost=on
-@@ -307,16 +309,17 @@ newsAcctType=News
- feedsAcctType=Feeds
- 
- # LOCALIZATION NOTE(nocachedbodytitle): Do not translate "<TITLE>" or "</TITLE>" in the line below
- nocachedbodytitle=<TITLE>Go Online to View This Message</TITLE>\n
- 
- # mailWindowOverlay.js
- confirmUnsubscribeTitle=Confirm Unsubscribe
- confirmUnsubscribeText=Are you sure you want to unsubscribe from %S?
-+confirmUnsubscribeManyText=Are you sure you want to unsubscribe from these newsgroups?
- 
- # msgHdrViewOverlay.js
- deleteAttachments=The following attachments will be permanently deleted from this message:\n%S\nThis action cannot be undone. Do you wish to continue?
- detachAttachments=The following attachments have been successfully saved and will now be permanently deleted from this message:\n%S\nThis action cannot be undone. Do you wish to continue?
- deleteAttachmentFailure=Failed to delete the selected attachments.
- 
- # This is the format for prepending accesskeys to the
- # each of the attachments in the file|attachments menu:
-diff --git a/suite/mailnews/content/folderPane.js b/suite/mailnews/content/folderPane.js
---- a/suite/mailnews/content/folderPane.js
-+++ b/suite/mailnews/content/folderPane.js
-@@ -69,17 +69,17 @@ var gFolderTreeController = {
-     let folder = aFolder || GetSelectedMsgFolders()[0];
- 
-     // If a server is selected, view settings for that account.
-     if (folder.isServer) {
-       MsgAccountManager(null, folder.server);
-       return;
-     }
- 
--    if (folder.flags & Ci.nsMsgFolderFlags.Virtual) {
-+    if (folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
-       // virtual folders get their own property dialog that contains all of the
-       // search information related to the virtual folder.
-       this.editVirtualFolder(folder);
-       return;
-     }
- 
-     let title = gMessengerBundle.getString("folderProperties");
- 
-@@ -161,40 +161,41 @@ var gFolderTreeController = {
-    * if the selected folder/s happen to be nntp.
-    *
-    * @param aFolder (optional) the folder to delete, if not the selected one
-    */
-   deleteFolder(aFolder) {
-     let folders = aFolder ? [aFolder] : GetSelectedMsgFolders();
-     let prompt = Services.prompt;
-     for (let folder of folders) {
-+      // For newsgroups, "delete" means "unsubscribe".
-+      if (folder.server.type == "nntp" &&
-+          !folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
-+        MsgUnsubscribe([folder]);
-+        continue;
-+      }
-+
-       let canDelete = folder.isSpecialFolder(Ci.nsMsgFolderFlags.Junk, false) ?
-         CanRenameDeleteJunkMail(folder.URI) : folder.deletable;
-       if (!canDelete)
-         continue;
- 
--      if (folder.flags & Ci.nsMsgFolderFlags.Virtual) {
-+      if (folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
-         let confirmation = gMessengerBundle.getString("confirmSavedSearchDeleteMessage");
-         let title = gMessengerBundle.getString("confirmSavedSearchDeleteTitle");
-         let buttonTitle = gMessengerBundle.getString("confirmSavedSearchDeleteButton");
-         let buttonFlags = prompt.BUTTON_TITLE_IS_STRING * prompt.BUTTON_POS_0 +
-                           prompt.BUTTON_TITLE_CANCEL * prompt.BUTTON_POS_1;
-         if (prompt.confirmEx(window, title, confirmation, buttonFlags, buttonTitle,
-                              "", "", "", {}) != 0) /* the yes button is in position 0 */
-           continue;
-         if (gCurrentVirtualFolderUri == folder.URI)
-           gCurrentVirtualFolderUri = null;
-       }
- 
--      if (isNewsURI(folder.URI)) {
--        if (ConfirmUnsubscribe(folder))
--          UnSubscribe(folder);
--        continue;
--      }
--
-       // We can delete this folder.
-       try {
-         folder.deleteSelf(msgWindow);
-       }
-       // Ignore known errors from canceled warning dialogs.
-       catch (ex) {
-         const NS_MSG_ERROR_COPY_FOLDER_ABORTED = 0x8055001a;
-         if (ex.result != NS_MSG_ERROR_COPY_FOLDER_ABORTED) {
-@@ -248,38 +249,55 @@ var gFolderTreeController = {
- 
-     // Now delete the messages.
-     let messages = Array.from(fixIterator(folder.messages));
-     let children = toXPCOMArray(messages, Ci.nsIMutableArray);
-     folder.deleteMessages(children, msgWindow, true, false, null, false);
-   },
- 
-   /**
--   * Compacts either a particular folder, or all folders
-+   * Compacts either particular folder/s, or selected folders.
-    *
--   * @param aCompactAll - whether we should compact all folders
--   * @param aFolder (optional) the folder to compact, if different than the
--   *                           currently selected one
-+   * @param aFolders (optional) the folders to compact, if different than the
-+   *                            currently selected ones
-    */
--  compactFolder(aCompactAll, aFolder) {
--    let folder = aFolder || GetSelectedMsgFolders()[0];
--    let isImapFolder = folder.server.type == "imap";
--    // Can't compact folders that have just been compacted
--    if (!isImapFolder && !folder.expungedBytes && !aCompactAll)
--      return;
-+  compactFolders(aFolders) {
-+    let folders = aFolders || GetSelectedMsgFolders();
-+    for (let folder of folders) {
-+      let isImapFolder = folder.server.type == "imap";
-+      // Can't compact folders that have just been compacted
-+      if (!isImapFolder && !folder.expungedBytes)
-+        return;
-+
-+      // Reset thread pane for non-imap folders.
-+      if (!isImapFolder && gDBView && gDBView.msgFolder == folder) {
-+        this._resetThreadPane();
-+      }
- 
--    // Reset thread pane for non-imap folders.
--    if (!isImapFolder && gDBView &&
--        (gDBView.msgFolder == folder || aCompactAll)) {
--      this._resetThreadPane();
-+      folder.compact(null, msgWindow);
-     }
--    if (aCompactAll)
--      folder.compactAll(null, msgWindow, isImapFolder || folder.server.type == "nntp");
--    else
--      folder.compact(null, msgWindow);
-+  },
-+  /**
-+   * Compacts all folders for accounts that the given folders belong
-+   * to, or all folders for accounts of the currently selected folders.
-+   *
-+   * @param aFolders (optional) the folders for whose accounts we should compact
-+   *                            all folders, if different than the currently
-+   *                            selected ones
-+   */
-+  compactAllFoldersForAccount(aFolders) {
-+    let folders = aFolders || GetSelectedMsgFolders();
-+    for (let folder of folders) {
-+      let isImapFolder = folder.server.type == "imap";
-+      folder.compactAll(null, msgWindow, isImapFolder ||
-+                                         folder.server.type == "nntp");
-+      // Reset thread pane for non-imap folders.
-+      if (gDBView && !isImapFolder)
-+        this._resetThreadPane();
-+    }
-   },
- 
-   /**
-    * Opens the dialog to create a new virtual folder
-    *
-    * @param aName - the default name for the new folder
-    * @param aSearchTerms - the search terms associated with the folder
-    * @param aParent - the folder to run the search terms on
-diff --git a/suite/mailnews/content/mail3PaneWindowCommands.js b/suite/mailnews/content/mail3PaneWindowCommands.js
---- a/suite/mailnews/content/mail3PaneWindowCommands.js
-+++ b/suite/mailnews/content/mail3PaneWindowCommands.js
-@@ -46,38 +46,29 @@ var FolderPaneController =
-     {
-       case "cmd_cut":
-       case "cmd_copy":
-       case "cmd_paste":
-         return false;
-       case "cmd_delete":
-       case "cmd_shiftDelete":
-       case "button_delete":
-+      case "button_shiftDelete":
-+      {
-         // Make sure the button doesn't show "Undelete" for folders.
--        if (command == "button_delete")
--          UpdateDeleteToolbarButton(true);
--      case "button_shiftDelete":
--        if ( command == "cmd_delete" )
--          goSetMenuValue(command, 'valueFolder');
-+        UpdateDeleteToolbarButton(true);
-         let folders = GetSelectedMsgFolders();
--
-         if (folders.length) {
-           let folder = folders[0];
--          let canDeleteThisFolder = CanDeleteFolder(folder);
--          if (folder.server.type == "nntp") {
--             if ( command == "cmd_delete" ) {
--                goSetMenuValue(command, 'valueNewsgroup');
--                goSetAccessKey(command, 'valueNewsgroupAccessKey');
--            }
--          }
--          return canDeleteThisFolder && isCommandEnabled(command);
-+          // XXX Figure out some better way/place to update the folder labels.
-+          UpdateDeleteLabelsFromFolderCommand(folder, command);
-+          return CanDeleteFolder(folder) && folder.isCommandEnabled(command);
-         }
--        else
--          return false;
--
-+        return false;
-+      }
-       default:
-         return false;
-     }
-   },
- 
-   doCommand: function(command)
-   {
-     // if the user invoked a key short cut then it is possible that we got here for a command which is
-@@ -95,16 +86,30 @@ var FolderPaneController =
-     }
-   },
- 
-   onEvent: function(event)
-   {
-   }
- };
- 
-+function UpdateDeleteLabelsFromFolderCommand(folder, command) {
-+  if (command != "cmd_delete")
-+    return;
-+
-+  if (folder.server.type == "nntp" &&
-+      !folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
-+    goSetMenuValue(command, "valueNewsgroup");
-+    goSetAccessKey(command, "valueNewsgroupAccessKey");
-+  }
-+  else {
-+    goSetMenuValue(command, "valueFolder");
-+  }
-+}
-+
- // DefaultController object (handles commands when one of the trees does not have focus)
- var DefaultController =
- {
-   supportsCommand: function(command)
-   {
- 
-     switch ( command )
-     {
-@@ -405,17 +410,21 @@ var DefaultController =
-         return gDBView && !(GetSelectedMsgFolders()[0].flags &
-                             Ci.nsMsgFolderFlags.Virtual);
-       case "cmd_stop":
-         return true;
-       case "cmd_undo":
-       case "cmd_redo":
-           return SetupUndoRedoCommand(command);
-       case "cmd_renameFolder":
--        return IsRenameFolderEnabled();
-+      {
-+        let folders = GetSelectedMsgFolders();
-+        return folders.length == 1 && folders[0].canRename &&
-+               folders[0].isCommandEnabled("cmd_renameFolder");
-+      }
-       case "cmd_sendUnsentMsgs":
-         return IsSendUnsentMsgsEnabled(null);
-       case "cmd_subscribe":
-         return IsSubscribeEnabled();
-       case "cmd_properties":
-         return IsPropertiesEnabled(command);
-       case "button_getNewMessages":
-       case "cmd_getNewMessages":
-@@ -425,17 +434,25 @@ var DefaultController =
-         return IsGetNextNMessagesEnabled();
-       case "cmd_emptyTrash":
-       {
-         let folder = GetSelectedMsgFolders()[0];
-         return folder && folder.server.canEmptyTrashOnExit ?
-                          IsMailFolderSelected() : false;
-       }
-       case "cmd_compactFolder":
--        return IsCompactFolderEnabled();
-+      {
-+        let folders = GetSelectedMsgFolders();
-+        let canCompactAll = function canCompactAll(folder) {
-+          return folder.server.canCompactFoldersOnServer &&
-+                 !folder.getFlag(Ci.nsMsgFolderFlags.Virtual) &&
-+                 folder.isCommandEnabled("cmd_compactFolder");
-+        }
-+        return folders && folders.every(canCompactAll);
-+      }
-       case "cmd_setFolderCharset":
-         return IsFolderCharsetEnabled();
-       case "cmd_downloadFlagged":
-         return !Services.io.offline;
-       case "cmd_downloadSelected":
-         return IsFolderSelected() && !Services.io.offline &&
-                GetNumSelectedMessages() > 0;
-       case "cmd_synchronizeOffline":
-@@ -690,17 +707,17 @@ var DefaultController =
-         return;
-       case "cmd_deleteJunk":
-         deleteJunkInFolder();
-         return;
-       case "cmd_emptyTrash":
-         gFolderTreeController.emptyTrash();
-         return;
-       case "cmd_compactFolder":
--        gFolderTreeController.compactFolder(true);
-+        gFolderTreeController.compactAllFoldersForAccount();
-         return;
-       case "cmd_downloadFlagged":
-         MsgDownloadFlagged();
-         break;
-       case "cmd_downloadSelected":
-         MsgDownloadSelected();
-         break;
-       case "cmd_synchronizeOffline":
-@@ -856,39 +873,37 @@ function IsSubscribeEnabled()
-   // such an account is selected.
-   let preselectedFolder = GetFirstSelectedMsgFolder();
-   if (preselectedFolder && preselectedFolder.server.type == "rss")
-     return true;
- 
-   return false;
- }
- 
--function IsRenameFolderEnabled()
--{
--  let folders = GetSelectedMsgFolders();
--  return folders.length == 1 && folders[0].canRename &&
--         isCommandEnabled("cmd_renameFolder");
--}
--
- function IsFolderCharsetEnabled()
- {
-   return IsFolderSelected();
- }
- 
- function IsPropertiesEnabled(command)
- {
-   let folders = GetSelectedMsgFolders();
-   if (!folders.length)
-     return false;
- 
-   let folder = folders[0];
-   // When servers are selected, it should be "Edit | Properties...".
--  goSetMenuValue(command,
--                 folder.isServer ? "valueGeneric" :
--                   isNewsURI(folder.URI) ? "valueNewsgroup" : "valueFolder");
-+  if (folder.isServer) {
-+    goSetMenuValue(command, "valueGeneric");
-+  } else if (folder.server.type == "nntp" &&
-+             !folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
-+    goSetMenuValue(command, "valueNewsgroup");
-+  } else {
-+    goSetMenuValue(command, "valueFolder");
-+  }
- 
-   return folders.length == 1;
- }
- 
- function IsViewNavigationItemEnabled()
- {
-   return IsFolderSelected();
- }
-@@ -958,31 +973,16 @@ function SetFocusThreadPane()
- function SetFocusMessagePane()
- {
-   // XXX hack: to clear the focus on the previous element first focus
-   // on the message pane element then focus on the main content window
-   GetMessagePane().focus();
-   GetMessagePaneFrame().focus();
- }
- 
--function isCommandEnabled(cmd)
--{
--  var selectedFolders = GetSelectedMsgFolders();
--  var numFolders = selectedFolders.length;
--  if(numFolders !=1)
--    return false;
--
--  var folder = selectedFolders[0];
--  if (!folder)
--    return false;
--  else
--    return folder.isCommandEnabled(cmd);
--
--}
--
- //
- // This function checks if the configured junk mail can be renamed or deleted.
- //
- function CanRenameDeleteJunkMail(aFolderUri)
- {
-   if (!aFolderUri)
-     return false;
- 
-diff --git a/suite/mailnews/content/mailCommands.js b/suite/mailnews/content/mailCommands.js
---- a/suite/mailnews/content/mailCommands.js
-+++ b/suite/mailnews/content/mailCommands.js
-@@ -1,32 +1,15 @@
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
- 
--function GetNewMessages(selectedFolders, server)
--{
--  if (!selectedFolders.length)
--    return;
--
--  var msgFolder = selectedFolders[0];
--
--  // Whenever we do get new messages, clear the old new messages.
--  if (msgFolder)
--  {
--    var nsIMsgFolder = Ci.nsIMsgFolder;
--    msgFolder.biffState = nsIMsgFolder.nsMsgBiffState_NoMail;
--    msgFolder.clearNewMessages();
--  }
--  server.getNewMessages(msgFolder, msgWindow, null);
--}
--
- /**
-  * Get the identity that most likely is the best one to use, given the hint.
-  * @param {Array<nsIMsgIdentity> identities  The candidates to pick from.
-  * @param {String} optionalHint  String containing comma separated mailboxes
-  */
- function getBestIdentity(identities, optionalHint)
- {
-   let identityCount = identities.length;
-@@ -256,27 +239,16 @@ function NewMessageToSelectedAddresses(t
-       }
-       composeFields.to = addressList.join(",");
-       params.composeFields = composeFields;
-       msgComposeService.OpenComposeWindowWithParams(null, params);
-     }
-   }
- }
- 
--function UnSubscribe(folder)
--{
--  // Unsubscribe the current folder from the newsserver, this assumes any confirmation has already
--  // been made by the user  SPL
--
--  var server = folder.server;
--  var subscribableServer = server.QueryInterface(Ci.nsISubscribableServer);
--  subscribableServer.unsubscribe(folder.name);
--  subscribableServer.commitSubscribeChanges();
--}
--
- function Subscribe(preselectedMsgFolder)
- {
-   window.openDialog("chrome://messenger/content/subscribe.xul",
-                     "subscribe", "chrome,modal,titlebar,resizable=yes",
-                     {folder:preselectedMsgFolder,
-                       okCallback:SubscribeOKCallback});
- }
- 
-diff --git a/suite/mailnews/content/mailContextMenus.js b/suite/mailnews/content/mailContextMenus.js
---- a/suite/mailnews/content/mailContextMenus.js
-+++ b/suite/mailnews/content/mailContextMenus.js
-@@ -1,14 +1,17 @@
- /* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- const {MailServices} = ChromeUtils.import("resource:///modules/MailServices.jsm");
-+const {PluralForm} = ChromeUtils.import("resource://gre/modules/PluralForm.jsm");
-+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
-+
- 
- //NOTE: gMessengerBundle must be defined and set or this Overlay won't work
- 
- /**
-  * Function to change the highlighted row back to the row that is currently
-  * outline/dotted without loading the contents of either rows. This is
-  * triggered when the context menu for a given row is hidden/closed
-  * (onpopuphiding).
-@@ -249,176 +252,231 @@ function FolderPaneOnPopupHiding()
- {
-   RestoreSelectionWithoutContentLoad(GetFolderTree());
- }
- 
- function FillFolderPaneContextMenu()
- {
-   let folders = GetSelectedMsgFolders();
-   let numSelected = folders.length;
--  if (numSelected != 1)
-+  if (!numSelected)
-     return false;
- 
-+  function checkIsVirtualFolder(folder) {
-+    return folder.getFlag(Ci.nsMsgFolderFlags.Virtual);
-+  }
-+  let haveAnyVirtualFolders = folders.some(checkIsVirtualFolder);
-+
-+  function checkIsServer(folder) {
-+    return folder.isServer;
-+  }
-+  let selectedServers = folders.filter(checkIsServer);
-+
-   let folder = folders[0];
-   let isServer = folder.isServer;
-   let serverType = folder.server.type;
--  let specialFolder = getSpecialFolderString(folder);
--  var canSubscribeToFolder = (serverType == "nntp") ||
--                             (serverType == "imap") ||
--                             (serverType == "rss");
--  var isNewsgroup = !isServer && serverType == 'nntp';
--  var isMailFolder = !isServer && serverType != 'nntp';
--  var isVirtualFolder = (specialFolder == "Virtual");
--  const kTrashFlag = Ci.nsMsgFolderFlags.Trash;
--  let isChildOfTrash = folder.isSpecialFolder(kTrashFlag, true);
--  var canGetMessages =
--    (isServer && serverType != "none") ||
--    isNewsgroup ||
--    ((serverType == "rss") && !isChildOfTrash && !isVirtualFolder);
-+  let specialFolder = haveAnyVirtualFolders ? "Virtual" :
-+                                              getSpecialFolderString(folder);
-+
-+  function checkCanSubscribeToFolder(folder) {
-+    if (checkIsVirtualFolder(folder))
-+      return false;
-+
-+    // All feed account folders, besides Trash, are subscribable.
-+    if (folder.server.type == "rss" &&
-+        !folder.getFlag(Ci.nsMsgFolderFlags.Trash))
-+      return true;
-+
-+    // We only want the subscribe item on the account nodes.
-+    if (!folder.isServer)
-+      return false;
-+
-+    return folder.server.type == "nntp" ||
-+           folder.server.type == "imap";
-+  }
-+  let haveOnlySubscribableFolders = folders.every(checkCanSubscribeToFolder);
- 
--  if (!isServer)
--  {
-+  function checkIsNewsgroup(folder) {
-+    return !folder.isServer && folder.server.type == "nntp" &&
-+           !folder.getFlag(Ci.nsMsgFolderFlags.Virtual);
-+  }
-+  let haveOnlyNewsgroups = folders.every(checkIsNewsgroup);
-+
-+  function checkIsMailFolder(folder) {
-+    return !folder.isServer && folder.server.type != "nntp";
-+  }
-+  let haveOnlyMailFolders = folders.every(checkIsMailFolder);
-+
-+  function checkCanGetMessages(folder) {
-+    return (folder.isServer && (folder.server.type != "none")) ||
-+            checkIsNewsgroup(folder) ||
-+            ((folder.server.type == "rss") &&
-+             !folder.isSpecialFolder(Ci.nsMsgFolderFlags.Trash, true) &&
-+             !checkIsVirtualFolder(folder));
-+  }
-+  let selectedFoldersThatCanGetMessages = folders.filter(checkCanGetMessages);
-+
-+  // --- Set up folder properties / account settings menu item.
-+  if (numSelected != 1) {
-+    ShowMenuItem("folderPaneContext-settings", false);
-+    ShowMenuItem("folderPaneContext-properties", false);
-+  }
-+  else if (selectedServers.length != 1) {
-     ShowMenuItem("folderPaneContext-settings", false);
-     ShowMenuItem("folderPaneContext-properties", true);
--    EnableMenuItem("folderPaneContext-properties", true);
-   }
--  else
--  {
-+  else {
-     ShowMenuItem("folderPaneContext-properties", false);
-     ShowMenuItem("folderPaneContext-settings", true);
--    EnableMenuItem("folderPaneContext-settings", true);
-   }
- 
--  if ((numSelected <= 1) && canGetMessages)
--    if (isServer)
-+  // --- Set up the get messages menu item.
-+  // Show if only servers, or it's only newsgroups/feeds. We could mix,
-+  // but it gets messy for situations where both server and a folder
-+  // on the server are selected.
-+  let showGet = selectedFoldersThatCanGetMessages.length == numSelected;
-+  ShowMenuItem("folderPaneContext-getMessages", showGet);
-+  if (showGet) {
-+    if (selectedServers.length > 0 &&
-+        selectedServers.length == selectedFoldersThatCanGetMessages.length) {
-       SetMenuItemLabel("folderPaneContext-getMessages",
-                        gMessengerBundle.getString("getMessagesFor"));
--    else
-+    }
-+    else {
-       SetMenuItemLabel("folderPaneContext-getMessages",
-                        gMessengerBundle.getString("getMessages"));
--
--  ShowMenuItem("folderPaneContext-getMessages", (numSelected <= 1) && canGetMessages);
--  EnableMenuItem("folderPaneContext-getMessages", true);
--
--  ShowMenuItem("folderPaneContext-sep4", (numSelected <= 1) && isServer);
--  ShowMenuItem("folderPaneContext-markAllFoldersRead", (numSelected <= 1) && isServer);
--
--  ShowMenuItem("folderPaneContext-openNewWindow", (numSelected <= 1));
--  EnableMenuItem("folderPaneContext-openNewWindow", true);
-+    }
-+  }
- 
--  ShowMenuItem("folderPaneContext-openNewTab", (numSelected <= 1));
--  EnableMenuItem("folderPaneContext-openNewTab", true);
--
--  SetupRenameMenuItem(folder, numSelected, isServer, serverType, specialFolder);
--  SetupRemoveMenuItem(folder, numSelected, isServer, serverType, specialFolder);
--  SetupCompactMenuItem(folder, numSelected);
--  SetupFavoritesMenuItem(folder, numSelected, isServer, "folderPaneContext-favoriteFolder");
--
--  ShowMenuItem("folderPaneContext-emptyTrash", (numSelected <= 1) && (specialFolder == 'Trash'));
--  EnableMenuItem("folderPaneContext-emptyTrash", true);
--  ShowMenuItem("folderPaneContext-emptyJunk", (numSelected <= 1) && (specialFolder == 'Junk'));
--  EnableMenuItem("folderPaneContext-emptyJunk", true);
-+  // --- Setup the Mark All Folders Read menu item.
-+  // Show only in case the server item is selected.
-+  ShowMenuItem("folderPaneContext-markAllFoldersRead",
-+               selectedServers.length > 0);
- 
--  var showSendUnsentMessages = (numSelected <= 1) && (specialFolder == 'Outbox');
--  ShowMenuItem("folderPaneContext-sendUnsentMessages", showSendUnsentMessages);
--  if (showSendUnsentMessages)
--    EnableMenuItem("folderPaneContext-sendUnsentMessages", IsSendUnsentMsgsEnabled(folder));
--
--  ShowMenuItem("folderPaneContext-sep-edit", (numSelected <= 1));
--
--  SetupNewMenuItem(folder, numSelected, isServer, serverType, specialFolder);
--
--  ShowMenuItem("folderPaneContext-subscribe", (numSelected <= 1) && canSubscribeToFolder && !isVirtualFolder);
--  EnableMenuItem("folderPaneContext-subscribe", true);
-+  // --- Set up new sub/folder menu item.
-+  let isInbox = specialFolder == "Inbox";
-+  let showNew =
-+    (numSelected == 1) &&
-+    ((serverType != "nntp" && folder.canCreateSubfolders) || isInbox);
-+  ShowMenuItem("folderPaneContext-new", showNew);
-+  if (showNew) {
-+    EnableMenuItem("folderPaneContext-new",
-+                   serverType != "imap" || !Services.io.offline);
-+    let label = (isServer || isInbox) ? "newFolder" : "newSubfolder";
-+    SetMenuItemLabel("folderPaneContext-new",
-+                     gMessengerBundle.getString(label));
-+  }
- 
--  ShowMenuItem("folderPaneContext-sep1", (numSelected <= 1) && !isServer);
--// News folder context menu =============================================
--
--  ShowMenuItem("folderPaneContext-newsUnsubscribe", (numSelected <= 1) && canSubscribeToFolder && isNewsgroup);
--  EnableMenuItem("folderPaneContext-newsUnsubscribe", true);
--  ShowMenuItem("folderPaneContext-markNewsgroupAllRead", (numSelected <= 1) && isNewsgroup);
--  EnableMenuItem("folderPaneContext-markNewsgroupAllRead", true);
--
--// End of News folder context menu =======================================
--
--  ShowMenuItem("folderPaneContext-markMailFolderAllRead", (numSelected <= 1) && isMailFolder && !isVirtualFolder);
--  EnableMenuItem("folderPaneContext-markMailFolderAllRead", true);
-+  // --- Set up rename menu item.
-+  let canRename = (numSelected == 1) && !isServer && folder.canRename &&
-+                  (specialFolder == "none" || specialFolder == "Virtual" ||
-+                   (specialFolder == "Junk" &&
-+                    CanRenameDeleteJunkMail(folder.URI)));
-+  ShowMenuItem("folderPaneContext-rename", canRename);
-+  if (canRename) {
-+    EnableMenuItem("folderPaneContext-rename",
-+                   !isServer && folder.isCommandEnabled("cmd_renameFolder"));
-+    SetMenuItemLabel("folderPaneContext-rename",
-+                     gMessengerBundle.getString("renameFolder"));
-+  }
- 
--  ShowMenuItem("folderPaneContext-searchMessages", (numSelected <= 1) && !isVirtualFolder);
--  goUpdateCommand('cmd_search');
--
--  return(true);
--}
-+  // --- Set up the delete folder menu item.
-+  function checkCanDeleteFolder(folder) {
-+    if (folder.isSpecialFolder(Ci.nsMsgFolderFlags.Junk, false))
-+      return CanRenameDeleteJunkMail(folder.URI);
-+    return folder.deletable;
-+  }
-+  let haveOnlyDeletableFolders = folders.every(checkCanDeleteFolder);
-+  ShowMenuItem("folderPaneContext-remove",
-+               haveOnlyDeletableFolders && numSelected == 1);
-+  if (haveOnlyDeletableFolders && numSelected == 1)
-+    SetMenuItemLabel("folderPaneContext-remove",
-+                     gMessengerBundle.getString("removeFolder"));
- 
--function SetupRenameMenuItem(msgFolder, numSelected, isServer, serverType, specialFolder)
--{
--  var canRename = (specialFolder == "Junk") ?
--                  CanRenameDeleteJunkMail(msgFolder.URI) : msgFolder.canRename;
--  ShowMenuItem("folderPaneContext-rename", (numSelected <= 1) && canRename);
--  EnableMenuItem("folderPaneContext-rename", !isServer && msgFolder.isCommandEnabled("cmd_renameFolder"));
--
--  if (canRename)
--    SetMenuItemLabel("folderPaneContext-rename", gMessengerBundle.getString("renameFolder"));
--}
--
--function SetupRemoveMenuItem(msgFolder, numSelected, isServer, serverType, specialFolder)
--{
--  var isMail = serverType != 'nntp';
--  var canDelete = (specialFolder == "Junk") ?
--                  CanRenameDeleteJunkMail(msgFolder.URI) : msgFolder.deletable;
--
--  var showRemove = (numSelected <=1) && isMail && canDelete;
-+  function checkIsDeleteEnabled(folder) {
-+    return folder.isCommandEnabled("cmd_delete");
-+  }
-+  let haveOnlyDeleteEnabledFolders = folders.every(checkIsDeleteEnabled);
-+  EnableMenuItem("folderPaneContext-remove", haveOnlyDeleteEnabledFolders);
- 
--  ShowMenuItem("folderPaneContext-remove", showRemove);
--  if (showRemove)
--    EnableMenuItem("folderPaneContext-remove", msgFolder.isCommandEnabled("cmd_delete"));
--  if (canDelete)
--    SetMenuItemLabel("folderPaneContext-remove", gMessengerBundle.getString("removeFolder"));
--}
--
--function SetupCompactMenuItem(folder, numSelected)
--{
--  let canCompact = folder.canCompact;
--  ShowMenuItem("folderPaneContext-compact", numSelected <= 1 && canCompact);
--  EnableMenuItem("folderPaneContext-compact", folder.isCommandEnabled("cmd_compactFolder"));
-+  // --- Set up the compact folder menu item.
-+  function checkCanCompactFolder(folder) {
-+    return folder.canCompact &&
-+           !folder.getFlag(Ci.nsMsgFolderFlags.Virtual) &&
-+           folder.isCommandEnabled("cmd_compactFolder");
-+  }
-+  let haveOnlyCompactableFolders = folders.every(checkCanCompactFolder);
-+  ShowMenuItem("folderPaneContext-compact", haveOnlyCompactableFolders);
-+  if (haveOnlyCompactableFolders)
-+    SetMenuItemLabel("folderPaneContext-compact",
-+                     PluralForm.get(numSelected, gMessengerBundle.getString("compactFolders")));
- 
--  if (canCompact)
--    SetMenuItemLabel("folderPaneContext-compact", gMessengerBundle.getString("compactFolder"));
--}
-+  function checkIsCompactEnabled(folder) {
-+    return folder.isCommandEnabled("cmd_compactFolder");
-+  }
-+  let haveOnlyCompactEnabledFolders = folders.every(checkIsCompactEnabled);
-+  EnableMenuItem("folderPaneContext-compact", haveOnlyCompactEnabledFolders);
- 
--function SetupFavoritesMenuItem(folder, numSelected, isServer, menuItemId)
--{
--  var showItem = !isServer && (numSelected <=1);
--  ShowMenuItem(menuItemId, showItem);
--
--  // adjust the checked state on the menu
--  if (showItem)
--  {
--    document.getElementById(menuItemId)
-+  // --- Set up favorite folder menu item.
-+  let showFavorite = (numSelected == 1) && !isServer;
-+  ShowMenuItem("folderPaneContext-favoriteFolder", showFavorite);
-+  if (showFavorite) {
-+    // Adjust the checked state on the menu item.
-+    document.getElementById("folderPaneContext-favoriteFolder")
-             .setAttribute("checked",
-                           folder.getFlag(Ci.nsMsgFolderFlags.Favorite));
-   }
--}
-+
-+  // --- Set up the empty trash menu item.
-+  ShowMenuItem("folderPaneContext-emptyTrash",
-+               numSelected == 1 && specialFolder == "Trash");
-+
-+  // --- Set up the empty junk menu item.
-+  ShowMenuItem("folderPaneContext-emptyJunk",
-+               numSelected == 1 && specialFolder == "Junk");
- 
--function SetupNewMenuItem(folder, numSelected, isServer, serverType, specialFolder)
--{
--  var isInbox = specialFolder == "Inbox";
-+  // --- Set up the send unsent messages menu item.
-+  let showSendUnsentMessages = numSelected == 1 && specialFolder == "Outbox";
-+  ShowMenuItem("folderPaneContext-sendUnsentMessages", showSendUnsentMessages);
-+  if (showSendUnsentMessages)
-+    EnableMenuItem("folderPaneContext-sendUnsentMessages",
-+                   IsSendUnsentMsgsEnabled(folder));
-+
-+  // --- Set up the subscribe menu item.
-+  ShowMenuItem("folderPaneContext-subscribe",
-+               numSelected == 1 && haveOnlySubscribableFolders);
-+
-+  // --- Set up the unsubscribe menu item.
-+  ShowMenuItem("folderPaneContext-newsUnsubscribe", haveOnlyNewsgroups);
- 
--  let showNew = (numSelected <= 1 && serverType != "nntp" &&
--                 folder.canCreateSubfolders) || isInbox;
--  ShowMenuItem("folderPaneContext-new", showNew);
--  EnableMenuItem("folderPaneContext-new",
--                 folder.server.type != "imap" || !Services.io.offline);
--  if (showNew)
--  {
--    if (isServer || isInbox)
--      SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newFolder"));
--    else
--      SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newSubfolder"));
--  }
-+  // --- Set up the mark newsgroup/s read menu item.
-+  ShowMenuItem("folderPaneContext-markNewsgroupAllRead", haveOnlyNewsgroups);
-+  SetMenuItemLabel("folderPaneContext-markNewsgroupAllRead",
-+                   PluralForm.get(numSelected, gMessengerBundle.getString("markNewsgroupRead")));
-+
-+  // --- Set up the mark folder/s read menu item.
-+  ShowMenuItem("folderPaneContext-markMailFolderAllRead",
-+               haveOnlyMailFolders && !haveAnyVirtualFolders);
-+  SetMenuItemLabel("folderPaneContext-markMailFolderAllRead",
-+                   PluralForm.get(numSelected, gMessengerBundle.getString("markFolderRead")));
-+
-+  // Set up the search menu item.
-+  ShowMenuItem("folderPaneContext-searchMessages",
-+               numSelected == 1 && !haveAnyVirtualFolders);
-+  goUpdateCommand('cmd_search');
-+
-+  ShowMenuItem("folderPaneContext-openNewWindow", numSelected == 1);
-+  ShowMenuItem("folderPaneContext-openNewTab", numSelected == 1);
-+
-+  // Hide / Show our menu separators based on the menu items we are showing.
-+  ShowMenuItem("folderPaneContext-sep-edit", numSelected == 1);
-+  ShowMenuItem("folderPaneContext-sep1", selectedServers.length == 0);
-+  ShowMenuItem("folderPaneContext-sep4", selectedServers.length > 0);
-+
-+  return true;
- }
- 
- function ShowMenuItem(id, showItem)
- {
-   var item = document.getElementById(id);
-   if(item && item.hidden != "true")
-     item.hidden = !showItem;
- }
-@@ -704,19 +762,18 @@ function CheckForMessageIdInFolder(folde
-   {
-     messageHeader = messageDatabase.getMsgHdrForMessageID(messageId);
-   }
-   catch (ex)
-   {
-     dump("Failed to find message-id in folder!");
-   }
- 
--  const nsMsgFolderFlags = Ci.nsMsgFolderFlags;
-   if (!MailServices.mailSession.IsFolderOpenInWindow(folder) &&
--      !(folder.flags & (nsMsgFolderFlags.Trash | nsMsgFolderFlags.Inbox)))
-+      !folder.getFlag(Ci.nsMsgFolderFlags.Trash | Ci.nsMsgFolderFlags.Inbox))
-   {
-     folder.msgDatabase = null;
-   }
- 
-   return messageHeader;
- }
- 
- // CreateFilter opens the Message Filters and Filter Rules dialogs.
-diff --git a/suite/mailnews/content/mailWindowOverlay.js b/suite/mailnews/content/mailWindowOverlay.js
---- a/suite/mailnews/content/mailWindowOverlay.js
-+++ b/suite/mailnews/content/mailWindowOverlay.js
-@@ -41,41 +41,42 @@ var gDisallow_classes_no_html = 1; /* th
-      if HTML is not allowed. I assume, that the user could have set this to a
-      value > 1 in his prefs.js or user.js, but that the value will not
-      change during runtime other than through the MsgBody*() functions below.*/
- 
- // Disable the File | New | Account... menu item if the account preference is locked.
- // Two other affected areas are the account central and the account manager dialogs.
- function menu_new_init()
- {
-+  let folders = GetSelectedMsgFolders();
-+  if (folders.length != 1)
-+    return;
-+
-+  let folder = folders[0];
-+
-   if (!gMessengerBundle)
-     gMessengerBundle = document.getElementById("bundle_messenger");
- 
--  var newAccountItem = document.getElementById('newAccountMenuItem');
-   if (Services.prefs.prefIsLocked("mail.disable_new_account_addition"))
--    newAccountItem.setAttribute("disabled","true");
--
--  // Change New Folder... menu according to the context
--  var folderArray = GetSelectedMsgFolders();
--  if (folderArray.length == 0)
--    return;
--  var msgFolder = folderArray[0];
--  var isServer = msgFolder.isServer;
--  var serverType = msgFolder.server.type;
--  var canCreateNew = msgFolder.canCreateSubfolders;
--  var isInbox = msgFolder.isSpecialFolder(
--                  Ci.nsMsgFolderFlags.Inbox, false);
--  var isIMAPFolder = serverType == "imap";
--  var showNew = ((serverType != 'nntp') && canCreateNew) || isInbox;
-+    document.getElementById("newAccountMenuItem")
-+            .setAttribute("disabled", "true");
-+
-+  let isInbox = folder.isSpecialFolder(Ci.nsMsgFolderFlags.Inbox, false);
-+  let showNew = folder.canCreateSubfolders ||
-+                (isInbox && !(folder.flags & Ci.nsMsgFolderFlags.Virtual));
-   ShowMenuItem("menu_newFolder", showNew);
-   ShowMenuItem("menu_newVirtualFolder", showNew);
--  EnableMenuItem("menu_newFolder", !isIMAPFolder || !Services.io.offline);
--  EnableMenuItem("menu_newVirtualFolder", true);
--  if (showNew)
--    SetMenuItemLabel("menu_newFolder", gMessengerBundle.getString((isServer || isInbox) ? "newFolderMenuItem" : "newSubfolderMenuItem"));
-+  EnableMenuItem("menu_newFolder", folder.server.type != "imap" ||
-+                                   !Services.io.offline);
-+  if (showNew) {
-+    // Change "New Folder..." menu according to the context.
-+    let label = (folder.isServer || isInbox) ? "newFolderMenuItem" :
-+                                               "newSubfolderMenuItem";
-+    SetMenuItemLabel("menu_newFolder", gMessengerBundle.getString(label));
-+  }
- }
- 
- function goUpdateMailMenuItems(commandset)
- {
-   for (var i = 0; i < commandset.childNodes.length; i++)
-   {
-     var commandID = commandset.childNodes[i].getAttribute("id");
-     if (commandID)
-@@ -887,17 +888,17 @@ function GetMessagesForInboxOnServer(ser
-   var inboxFolder = GetInboxFolder(server);
- 
-   // If the server doesn't support an inbox it could be an RSS server or
-   // some other server type, just use the root folder and the server
-   // implementation can figure out what to do.
-   if (!inboxFolder)
-     inboxFolder = server.rootFolder;
- 
--  GetNewMessages([inboxFolder], server);
-+  GetNewMsgs(server, inboxFolder);
- }
- 
- function MsgGetMessage()
- {
-   // if offline, prompt for getting messages
-   if (DoGetNewMailWhenOffline())
-     GetFolderMessages();
- }
-@@ -1428,33 +1429,50 @@ function MsgSubscribe(folder)
-   var preselectedFolder = folder || GetFirstSelectedMsgFolder();
- 
-   if (preselectedFolder && preselectedFolder.server.type == "rss")
-     openSubscriptionsDialog(preselectedFolder); // open feed subscription dialog
-   else
-     Subscribe(preselectedFolder); // open imap/nntp subscription dialog
- }
- 
--function ConfirmUnsubscribe(folder)
--{
--    if (!gMessengerBundle)
--        gMessengerBundle = document.getElementById("bundle_messenger");
--
--    var titleMsg = gMessengerBundle.getString("confirmUnsubscribeTitle");
--    var dialogMsg = gMessengerBundle.getFormattedString("confirmUnsubscribeText",
--                                        [folder.name], 1);
--    return Services.prompt.confirm(window, titleMsg, dialogMsg);
-+/**
-+ * Show a confirmation dialog - check if the user really want to unsubscribe
-+ * from the given newsgroup/s.
-+ * @folders an array of newsgroup folders to unsubscribe from
-+ * @return true if the user said it's ok to unsubscribe
-+ */
-+function ConfirmUnsubscribe(folders) {
-+  if (!gMessengerBundle)
-+      gMessengerBundle = document.getElementById("bundle_messenger");
-+
-+  let titleMsg = gMessengerBundle.getString("confirmUnsubscribeTitle");
-+  let dialogMsg = (folders.length == 1) ?
-+    gMessengerBundle.getFormattedString("confirmUnsubscribeText",
-+                                        [folders[0].name], 1) :
-+    gMessengerBundle.getString("confirmUnsubscribeManyText");
-+
-+  return Services.prompt.confirm(window, titleMsg, dialogMsg);
- }
- 
--function MsgUnsubscribe()
--{
--    var folder = GetFirstSelectedMsgFolder();
--    if (ConfirmUnsubscribe(folder)) {
--        UnSubscribe(folder);
--    }
-+/**
-+ * Unsubscribe from selected or passed in newsgroup/s.
-+ * @param newsgroups (optional param) the newsgroup folders to unsubscribe from
-+ */
-+function MsgUnsubscribe(newsgroups) {
-+  let folders = newsgroups || GetSelectedMsgFolders();
-+  if (!ConfirmUnsubscribe(folders))
-+    return;
-+
-+  for (let folder of folders) {
-+    let subscribableServer =
-+      folder.server.QueryInterface(Ci.nsISubscribableServer);
-+    subscribableServer.unsubscribe(folder.name);
-+    subscribableServer.commitSubscribeChanges();
-+  }
- }
- 
- function ToggleFavoriteFolderFlag()
- {
-   var folder = GetFirstSelectedMsgFolder();
-   folder.toggleFlag(Ci.nsMsgFolderFlags.Favorite);
- }
- 
-@@ -1490,34 +1508,34 @@ function MsgOpenFromFile()
-     let uri = fp.fileURL.QueryInterface(Ci.nsIURL);
-     uri.query = "type=application/x-message-display";
- 
-     window.openDialog("chrome://messenger/content/messageWindow.xul", "_blank",
-                     "all,chrome,dialog=no,status,toolbar", uri);
-   });
- }
- 
--function MsgOpenNewWindowForFolder(uri, key)
--{
--  var uriToOpen = uri;
--  var keyToSelect = key;
--
--  if (!uriToOpen)
--    // Use GetSelectedMsgFolders() to find out which message to open instead of
--    // GetLoadedMsgFolder().URI. This is required because on a right-click, the
--    // currentIndex value will be different from the actual row that is
--    // highlighted. GetSelectedMsgFolders() will return the message that is
--    // highlighted.
--    uriToOpen = GetSelectedMsgFolders()[0].URI;
--
--  if (uriToOpen) {
--   // get the messenger window open service and ask it to open a new window for us
--   var mailWindowService = Cc["@mozilla.org/messenger/windowservice;1"].getService(Ci.nsIMessengerWindowService);
--   if (mailWindowService)
--     mailWindowService.openMessengerWindowWithUri("mail:3pane", uriToOpen, keyToSelect);
-+function MsgOpenNewWindowForFolder(folderURI, msgKeyToSelect) {
-+  let mailWindowService = Cc["@mozilla.org/messenger/windowservice;1"]
-+                            .getService(Ci.nsIMessengerWindowService);
-+  if (!mailWindowService)
-+    return;
-+
-+  if (folderURI) {
-+    mailWindowService.openMessengerWindowWithUri("mail:3pane", folderURI,
-+                                                 msgKeyToSelect);
-+    return;
-+  }
-+
-+  // If there is a right-click happening, GetSelectedMsgFolders()
-+  // will tell us about it (while the selection's currentIndex would reflect
-+  // the node that was selected/displayed before the right-click.)
-+  for (let folder of GetSelectedMsgFolders()) {
-+    mailWindowService.openMessengerWindowWithUri("mail:3pane", folder.URI,
-+                                                 msgKeyToSelect);
-   }
- }
- 
- function MsgOpenSelectedMessages()
- {
-   // Toggle message body (feed summary) and content-base url in message pane or
-   // load in browser, per pref, otherwise open summary or web page in new window
-   // or tab, per that pref.
-@@ -1675,19 +1693,18 @@ function MsgMarkReadByDate()
- {
-     window.openDialog( "chrome://messenger/content/markByDate.xul","",
-                        "chrome,modal,titlebar,centerscreen",
-                        GetLoadedMsgFolder() );
- }
- 
- function MsgMarkAllRead()
- {
--  var folder = GetSelectedMsgFolders()[0];
--
--  if (folder)
-+  let folders = GetSelectedMsgFolders();
-+  for (let folder of folders)
-     folder.markAllMessagesRead(msgWindow);
- }
- 
- function MsgDownloadFlagged()
- {
-   gDBView.doCommand(nsMsgViewCommandType.downloadFlaggedForOffline);
- }
- 
-@@ -2040,28 +2057,16 @@ function IsGetNextNMessagesEnabled()
-         menuItem.removeAttribute("hidden");
-         return true;
-     }
- 
-     menuItem.setAttribute("hidden","true");
-     return false;
- }
- 
--function IsCompactFolderEnabled()
--{
--  let folder = GetSelectedMsgFolders()[0];
--  if (!folder)
--    return false;
--  let server = folder.server;
--  return (server &&
--      (server.type != 'nntp') && // compact news folder is not supported
--      ((server.type != 'imap') || server.canCompactFoldersOnServer) &&
--      isCommandEnabled("cmd_compactFolder"));   // checks e.g. if IMAP is offline
--}
--
- function SetUpToolbarButtons(uri)
- {
-   let deleteButton = document.getElementById("button-delete");
-   let replyAllButton = document.getElementById("button-replyall");
- 
-   // Eventually, we might want to set up the toolbar differently for imap,
-   // pop, and news. For now, just tweak it based on if it is news or not.
-   let forNews = isNewsURI(uri);
-@@ -2211,54 +2216,73 @@ function GetDefaultAccountRootFolder()
- {
-   var account = accountManager.defaultAccount;
-   if (account) {
-     return account.incomingServer.rootMsgFolder;
-   }
-   return null;
- }
- 
--function GetFolderMessages()
--{
-+/**
-+ * Check for new messages for all selected folders, or for the default account
-+ * in case no folders are selected.
-+ */
-+function GetFolderMessages() {
-   var selectedFolders = GetSelectedMsgFolders();
-   var defaultAccountRootFolder = GetDefaultAccountRootFolder();
- 
--  // if nothing selected, use the default
--  var folder = selectedFolders.length ? selectedFolders[0] : defaultAccountRootFolder;
--
--  if (!folder)
--    return;
--
--  var serverType = folder.server.type;
--
--  if (folder.isServer && (serverType == "nntp")) {
--    // if we're doing "get msgs" on a news server
--    // update unread counts on this server
--    folder.server.performExpand(msgWindow);
-+  var folders = (selectedFolders.length) ? selectedFolders
-+                                         : [defaultAccountRootFolder];
-+
-+  if (!folders[0]) {
-     return;
-   }
--  else if (serverType == "none") {
--    // if "Local Folders" is selected
--    // and the user does "Get Msgs"
--    // and LocalFolders is not deferred to,
--    // get new mail for the default account
--    //
--    // XXX TODO
--    // should shift click get mail for all (authenticated) accounts?
--    // see bug #125885
--    if (!folder.server.isDeferredTo)
--      folder = defaultAccountRootFolder;
-+
-+  for (let folder of folders) {
-+    var serverType = folder.server.type;
-+    if (folder.isServer && (serverType == "nntp")) {
-+      // If we're doing "get msgs" on a news server,
-+      // update unread counts on this server.
-+      folder.server.performExpand(msgWindow);
-+    }
-+    else if (serverType == "none") {
-+      // If "Local Folders" is selected and the user does "Get Msgs" and
-+      // LocalFolders is not deferred to, get new mail for the default account
-+      //
-+      // XXX TODO
-+      // Should shift click get mail for all (authenticated) accounts?
-+      // see bug #125885.
-+      if (!folder.server.isDeferredTo) {
-+        if (!defaultAccountRootFolder) {
-+          continue;
-+        }
-+        GetNewMsgs(defaultAccountRootFolder.server, defaultAccountRootFolder);
-+      } else {
-+        GetNewMsgs(folder.server, folder);
-+      }
-+    }
-+    else {
-+      GetNewMsgs(folder.server, folder);
-+    }
-   }
--
--  if (!folder)
--    return;
--
--  var folders = [folder];
--
--  GetNewMessages(folders, folder.server);
-+}
-+
-+/**
-+ * Gets new messages for the given server, for the given folder.
-+ * @param server which nsIMsgIncomingServer to check for new messages
-+ * @param folder which nsIMsgFolder folder to check for new messages
-+ */
-+function GetNewMsgs(server, folder) {
-+  // Note that for Global Inbox folder.server != server when we want to get
-+  // messages for a specific account.
-+
-+  // Whenever we do get new messages, clear the old new messages.
-+  folder.biffState = Ci.nsIMsgFolder.nsMsgBiffState_NoMail;
-+  folder.clearNewMessages();
-+  server.getNewMessages(folder, msgWindow, null);
- }
- 
- function SendUnsentMessages()
- {
-   var msgSendlater = Cc["@mozilla.org/messengercompose/sendlater;1"]
-                .getService(Ci.nsIMsgSendLater);
-   var allIdentities, numMessages, msgFolder;
- 
-diff --git a/suite/mailnews/content/mailWindowOverlay.xul b/suite/mailnews/content/mailWindowOverlay.xul
---- a/suite/mailnews/content/mailWindowOverlay.xul
-+++ b/suite/mailnews/content/mailWindowOverlay.xul
-@@ -453,17 +453,17 @@
-     <menuitem id="folderPaneContext-rename"
-         label="&folderContextRename.label;"
-         accesskey="&folderContextRename.accesskey;"
-         oncommand="gFolderTreeController.renameFolder();"/>
- 
-     <menuitem id="folderPaneContext-compact"
-         label="&folderContextCompact.label;"
-         accesskey="&folderContextCompact.accesskey;"
--        oncommand="gFolderTreeController.compactFolder(false);"/>
-+        oncommand="gFolderTreeController.compactFolders();"/>
-     <menuitem id="folderPaneContext-markMailFolderAllRead"
-               label="&folderContextMarkMailFolderRead.label;"
-               accesskey="&folderContextMarkMailFolderRead.accesskey;"
-               oncommand="MsgMarkAllRead();"/>
-     <menuitem id="folderPaneContext-markNewsgroupAllRead"
-               label="&folderContextMarkNewsgroupRead.label;"
-               accesskey="&folderContextMarkNewsgroupRead.accesskey;"
-               oncommand="MsgMarkAllRead();"/>

+ 0 - 353
comm-central/patches/1680140-iehelprip-cc.patch

@@ -1,353 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Date 1606854708 -3600
-# Parent  afe3edcd32c68ae91951b13bc24883a4f9fc0937
-Bug 1680140 - Remove obsolete internet explorer online help refrerences. r=IanN
-
-diff --git a/suite/base/content/utilityOverlay.xul b/suite/base/content/utilityOverlay.xul
---- a/suite/base/content/utilityOverlay.xul
-+++ b/suite/base/content/utilityOverlay.xul
-@@ -596,21 +596,16 @@
-                 command="cmd_openHelp"/>
- #else
-       <menuitem label="&openHelpCmdMac.label;"
-                 accesskey="&openHelpCmdMac.accesskey;"
-                 id="help"
-                 key="key_openHelp"
-                 command="cmd_openHelp"/>
- #endif
--#ifdef XP_WIN
--      <menuitem label="&helpForIEUsers.label;"
--                accesskey="&helpForIEUsers.accesskey;"
--                oncommand="openHelp('ieusers', 'chrome://communicator/locale/help/suitehelp.rdf');"/>
--#endif
-       <menuitem id="troubleShooting"
-                 accesskey="&helpTroubleshootingInfo.accesskey;"
-                 label="&helpTroubleshootingInfo.label;"
-                 oncommand="goTroubleshootingPage();"/>
-       <menuitem id="releaseUrl"
-                 accesskey="&releaseCmd.accesskey;"
-                 label="&releaseCmd.label;"
-                 oncommand="goReleaseNotes();"/>
-diff --git a/suite/locales/en-US/chrome/common/help/forieusers.xhtml b/suite/locales/en-US/chrome/common/help/forieusers.xhtml
-deleted file mode 100644
---- a/suite/locales/en-US/chrome/common/help/forieusers.xhtml
-+++ /dev/null
-@@ -1,149 +0,0 @@
--<?xml version="1.0" encoding="UTF-8"?>
--<!-- This Source Code Form is subject to the terms of the Mozilla Public
--   - License, v. 2.0. If a copy of the MPL was not distributed with this
--   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
--
--
--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
--  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"[
--  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
--  %brandDTD;
--]>
--
--<html xmlns="http://www.w3.org/1999/xhtml">
--<head>
--<title>For Microsoft Internet Explorer Users</title>
--<link rel="stylesheet" href="helpFileLayout.css"
--  type="text/css"/>
--</head>
--<body>
--
--<h1 id="for_internet_explorer_users">For Internet Explorer Users</h1>
--
--<p>If you&apos;ve been using Microsoft&reg; Internet Explorer, you&apos;ll find
--  that it&apos;s easy to begin using &brandShortName; for
--  <a href="nav_help.xhtml#browsing_the_web">browsing the web</a>,
--  <a href="mailnews_getting_started.xhtml">managing your mail</a>, and much
--  more.</p>
--
--<div class="contentsBox">In this section:
--  <ul>
--    <li><a href="#mozilla_and_internet_explorer_terminology_differences">&brandShortName;
--      and Internet Explorer Terminology Differences</a></li>
--    <li><a href="#about_your_ie_favorites">About Your IE Favorites</a></li>
--    <li><a href="#browser_features">Browser Features</a></li>
--    <li><a href="#other_features">Other Features</a></li>
--    <li><a href="#keyboard_shortcuts">Keyboard Shortcuts</a></li>
--  </ul>
--</div>
--
--<h2 id="mozilla_and_internet_explorer_terminology_differences">&brandShortName;
--  and Internet Explorer Terminology Differences</h2>
--
--<table class="defaultTable">
--  <thead>
--    <tr>
--      <th>Internet Explorer</th>
--      <th>&brandShortName;</th>
--    </tr>
--  </thead>
--  <tbody class="tbody-default">
--    <tr>
--      <td>Internet Options</td>
--      <td><a href="cs_nav_prefs_navigator.xhtml">Preferences</a></td>
--    </tr>
--    <tr>
--      <td>Temporary Internet Files</td>
--      <td><a href="nav_help.xhtml#changing_cache_settings">Cache</a></td>
--    </tr>
--    <tr>
--      <td>Favorites</td>
--      <td><a href="customize_help.xhtml#bookmarks">Bookmarks</a></td>
--    </tr>
--    <tr>
--      <td>Address Bar</td>
--      <td><a href="nav_help.xhtml#moving_to_another_page">Location Bar</a></td>
--    </tr>
--    <tr>
--      <td>Refresh</td>
--      <td><a href="nav_help.xhtml#stopping_and_reloading">Reload</a></td>
--    </tr>
--    <tr>
--      <td>Links Bar</td>
--      <td><a href="customize_help.xhtml#personal_toolbar">Personal Toolbar</a></td>
--    </tr>
--    <tr>
--      <td>Copy Shortcut</td>
--      <td>Copy Link Location</td>
--    </tr>
--  </tbody>
--</table>
--
--<h2 id="about_your_ie_favorites">About Your IE Favorites</h2>
--
--<p>Your IE Favorites are imported automatically. To access them, open the
--  Bookmarks menu and choose Imported IE Favorites.</p>
--
--<h2 id="browser_features">Browser Features</h2>
--
--<ul>
--  <li><strong><a href="nav_help.xhtml#using_tabbed_browsing">Tabbed
--    Browsing</a></strong>: Instead of opening a separate browser window for
--    each website you want to visit, you can open multiple websites within the
--    same window and tab between them. You can also
--    <a href="cs_nav_prefs_navigator.xhtml#navigator">set a group of tabs as
--    your home page</a>.</li>
--  <li><strong><a href="cs_priv_prefs_popup.xhtml">Pop-up Window
--    Controls</a></strong>: Lets you allow or suppress both popup and popunder
--    windows.</li>
--  <li><strong><a href="customize_help.xhtml#sidebar">Sidebar</a></strong>:
--    Customize &brandShortName; with frequently accessed content and tools such
--    as news, stock quotes, your bookmarks, browser history, and many other
--    options.</li>
--  <li><strong><a href="profiles_help.xhtml#managing_profiles">Profile
--    Manager</a></strong>: Create different profiles, each with its own
--    bookmarks, preferences, mail settings, and so on. This is useful if you
--    must share &brandShortName; on the same computer with other people, or
--    if you want to keep your work and personal settings separate.</li>
--  <li><strong><a href="using_priv_help.xhtml">Cookie Manager</a></strong>: Lets
--    you view detailed information about each cookie and remove cookies you
--    don&apos;t want to be stored on your computer. You can also control which
--    websites are allowed to store cookies on your computer.</li>
--  <li><strong><a href="using_priv_help.xhtml#managing_images">Image
--    Manager</a></strong>: Enables you to disable images from certain websites,
--    or disable them all together. This is useful if you wish to decrease the
--    amount of time it takes for websites to load.</li>
--</ul>
--
--<h2 id="other_features">Other Features</h2>
--
--<p>In the lower left-hand corner of your browser, a component bar gives you
--  quick access to several useful features:</p>
--
--<ul>
--  <li><strong><a href="mailnews_getting_started.xhtml">Mail &amp;
--    Newsgroups</a></strong>: Conveniently manage all your Internet
--    communications. You can set up and maintain multiple  business and personal
--    mail accounts and Internet newsgroups, all from one window. You can
--    <a href="mailnews_getting_started.xhtml#importing_mail_from_other_programs">import</a>
--    mail and settings from other popular email programs.</li>
--  <li><strong><a href="mailnews_addressbooks.xhtml#using_address_books">Address
--    Books</a></strong>: Create an address book or
--    <a href="mailnews_addressbooks.xhtml#importing_address_books">import</a>
--    contact information from other popular mail programs.</li>
--  <li><strong><a href="composer_help.xhtml">Composer</a></strong>:
--    Create, edit, and publish your pages on the web with this built-in web page
--    editor.</li>
--  <li><strong>ChatZilla</strong>: Built-in IRC client that lets you chat with
--    other people over IRC networks.</li>
--</ul>
--
--<h2 id="keyboard_shortcuts">Keyboard Shortcuts</h2>
--
--<p>You will notice that Microsoft Internet Explorer and &brandShortName;
--  share many of the same shortcut keys. For a full list of shortcut keys, see
--  the List of <a href="shortcuts.xhtml">&brandShortName; Keyboard
--  Shortcuts</a>.</p>
--
--</body>
--</html>
-diff --git a/suite/locales/en-US/chrome/common/help/help-win.rdf b/suite/locales/en-US/chrome/common/help/help-win.rdf
---- a/suite/locales/en-US/chrome/common/help/help-win.rdf
-+++ b/suite/locales/en-US/chrome/common/help/help-win.rdf
-@@ -4,48 +4,16 @@
-    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
- 
- 
- <!DOCTYPE rdf:RDF SYSTEM "chrome://branding/locale/brand.dtd" >
- 
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-          xmlns:nc="http://home.netscape.com/NC-rdf#">
- 
--<rdf:Description about="suite-toc.rdf#ieusers"
--  nc:name="For Internet Explorer Users"
--  nc:link="forieusers.xhtml">
--  <nc:subheadings>
--    <rdf:Seq><rdf:li>
--      <rdf:Description ID="terms"
--        nc:name="Terminology Differences"
--        nc:link="forieusers.xhtml#mozilla_and_internet_explorer_terminology_differences"/>
--    </rdf:li>
--    <rdf:li>
--      <rdf:Description ID="favorites"
--        nc:name="About Your IE Favorites"
--        nc:link="forieusers.xhtml#about_your_ie_favorites"/>
--    </rdf:li>
--    <rdf:li>
--      <rdf:Description ID="key-features"
--        nc:name="Browser Features"
--        nc:link="forieusers.xhtml#browser_features"/>
--    </rdf:li>
--    <rdf:li>
--      <rdf:Description ID="more-features"
--        nc:name="Other Features"
--        nc:link="forieusers.xhtml#other_features"/>
--    </rdf:li>
--    <rdf:li>
--      <rdf:Description ID="keyboard-shortcuts"
--        nc:name="Keyboard Shortcuts"
--        nc:link="forieusers.xhtml#keyboard_shortcuts"/>
--    </rdf:li></rdf:Seq>
--  </nc:subheadings>
--</rdf:Description>
--
- <rdf:Description about="suite-toc.rdf#nav-doc-ses">
-   <nc:subheadings>
-     <rdf:Seq><rdf:li>
-       <rdf:Description ID="nav-doc-default"
-         nc:name="Making &brandShortName; Your Default Browser"
-         nc:link="nav_help.xhtml#making_mozilla_your_default_browser"/>
-     </rdf:li></rdf:Seq>
-   </nc:subheadings>
-@@ -66,51 +34,16 @@
-      <rdf:Seq><rdf:li>
-        <rdf:Description ID="default_browser_preferences"
-          nc:name="default browser preferences"
-          nc:link="cs_nav_prefs_navigator.xhtml#navigator"/>
-      </rdf:li></rdf:Seq>
-    </nc:subheadings>
- </rdf:Description>
- 
--<rdf:Description about="help-indexAZ.rdf#i">
--   <nc:subheadings>
--     <rdf:Seq><rdf:li>
--       <rdf:Description ID="ieusers"
--         nc:name="Internet Explorer User Help"
--         nc:link="forieusers.xhtml"/>
--     </rdf:li></rdf:Seq>
--   </nc:subheadings>
--</rdf:Description>
--
--<rdf:Description about="#ieusers">
--   <nc:subheadings>
--     <rdf:Seq><rdf:li>
--       <rdf:Description ID="ieusers:terminology-differences"
--         nc:name="Terminology Differences"
--         nc:link="forieusers.xhtml#mozilla_and_internet_explorer_terminology_differences"/>
--     </rdf:li>
--     <rdf:li>
--       <rdf:Description ID="ieusers:your-favorites"
--         nc:name="About Your IE Favorites"
--         nc:link="forieusers.xhtml#about_your_ie_favorites"/>
--     </rdf:li>
--     <rdf:li>
--       <rdf:Description ID="ieusers:additional-software"
--         nc:name="Other Features"
--         nc:link="forieusers.xhtml#other_features"/>
--     </rdf:li>
--     <rdf:li>
--       <rdf:Description ID="ieusers:keyboard-shortcuts"
--         nc:name="Keyboard Shortcuts"
--         nc:link="forieusers.xhtml#keyboard_shortcuts"/>
--     </rdf:li></rdf:Seq>
--   </nc:subheadings>
--</rdf:Description>
--
- <rdf:Description about="help-index1.rdf#preferences">
-    <nc:subheadings>
-      <rdf:Seq><rdf:li>
-        <rdf:Description ID="preferences:default_browser"
-          nc:name="default browser preferences"
-          nc:link="cs_nav_prefs_navigator.xhtml#navigator"/>
-      </rdf:li></rdf:Seq>
-    </nc:subheadings>
-diff --git a/suite/locales/en-US/chrome/common/help/suite-toc.rdf b/suite/locales/en-US/chrome/common/help/suite-toc.rdf
---- a/suite/locales/en-US/chrome/common/help/suite-toc.rdf
-+++ b/suite/locales/en-US/chrome/common/help/suite-toc.rdf
-@@ -9,17 +9,16 @@
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-          xmlns:nc="http://home.netscape.com/NC-rdf#">
- 
-   <rdf:Description about="urn:root">
-     <nc:subheadings>
-       <rdf:Seq>
-         <rdf:li> <rdf:Description ID="welcome" nc:name="Help and Support Center" nc:link="welcome_help.xhtml"/> </rdf:li>
-         <rdf:li> <rdf:Description ID="help-help" nc:name="Using the Help Window" nc:link="help_help.xhtml"/> </rdf:li>
--        <rdf:li> <rdf:Description ID="ieusers"/> </rdf:li>
-         <rdf:li> <rdf:Description ID="nav" nc:name="Browsing the Web" nc:link="nav_help.xhtml"/> </rdf:li>
-         <rdf:li> <rdf:Description ID="mail" nc:name="Using Mail &amp; Newsgroups" nc:link="mailnews_getting_started.xhtml"/> </rdf:li>
-         <rdf:li> <rdf:Description ID="comp" nc:name="Creating Web Pages"  nc:link="composer_help.xhtml"/> </rdf:li>
-         <rdf:li> <rdf:Description ID="cust" nc:name="Customizing &brandShortName;"  nc:link="customize_help.xhtml"/> </rdf:li>
-         <rdf:li> <rdf:Description ID="using-priv-help" nc:name="Using Privacy Features" nc:link="privacy_help.xhtml"/> </rdf:li>
-         <rdf:li> <rdf:Description ID="using-help-certs" nc:name="Using Certificates" nc:link="using_certs_help.xhtml"/> </rdf:li>
-         <rdf:li> <rdf:Description ID="profile-help" nc:name="Managing Profiles" nc:link="profiles_help.xhtml"/> </rdf:li>
-         <rdf:li> <rdf:Description ID="shortcuts" nc:name="&brandShortName; Keyboard Shortcuts" nc:link="shortcuts.xhtml"/> </rdf:li>
-diff --git a/suite/locales/en-US/chrome/common/utilityOverlay.dtd b/suite/locales/en-US/chrome/common/utilityOverlay.dtd
---- a/suite/locales/en-US/chrome/common/utilityOverlay.dtd
-+++ b/suite/locales/en-US/chrome/common/utilityOverlay.dtd
-@@ -136,18 +136,16 @@
- <!-- LOCALIZATION NOTE some localizations of Windows use "?"
-      for the help button in the menubar. -->
- <!ENTITY helpMenuWin.label                "Help">
- <!ENTITY helpMenuWin.accesskey            "H">
- <!ENTITY openHelpCmd.label                "Help Contents">
- <!ENTITY openHelpCmd.accesskey            "H">
- <!ENTITY openHelpCmd.key                  "VK_F1">
- 
--<!ENTITY helpForIEUsers.label               "For Internet Explorer Users">
--<!ENTITY helpForIEUsers.accesskey           "I">
- <!ENTITY helpTroubleshootingInfo.label      "Troubleshooting Information">
- <!ENTITY helpTroubleshootingInfo.accesskey  "T">
- <!ENTITY releaseCmd.label                   "Release Notes">
- <!ENTITY releaseCmd.accesskey               "N">
- <!ENTITY helpSafeMode.label                 "Restart with Add-ons Disabled">
- <!ENTITY helpSafeMode.accesskey             "R">
- <!ENTITY updateCmd.label                    "Check for Updates…">
- <!ENTITY updateCmd.accesskey                "C">
-diff --git a/suite/locales/jar.mn b/suite/locales/jar.mn
---- a/suite/locales/jar.mn
-+++ b/suite/locales/jar.mn
-@@ -61,17 +61,16 @@
-   locale/@AB_CD@/communicator/help/certs_prefs_help.xhtml                   (%chrome/common/help/certs_prefs_help.xhtml)
-   locale/@AB_CD@/communicator/help/composer_help.xhtml                      (%chrome/common/help/composer_help.xhtml)
-   locale/@AB_CD@/communicator/help/cs_nav_prefs_advanced.xhtml              (%chrome/common/help/cs_nav_prefs_advanced.xhtml)
-   locale/@AB_CD@/communicator/help/cs_nav_prefs_appearance.xhtml            (%chrome/common/help/cs_nav_prefs_appearance.xhtml)
-   locale/@AB_CD@/communicator/help/cs_nav_prefs_navigator.xhtml             (%chrome/common/help/cs_nav_prefs_navigator.xhtml)
-   locale/@AB_CD@/communicator/help/cs_priv_prefs_popup.xhtml                (%chrome/common/help/cs_priv_prefs_popup.xhtml)
-   locale/@AB_CD@/communicator/help/customize_help.xhtml                     (%chrome/common/help/customize_help.xhtml)
-   locale/@AB_CD@/communicator/help/developer_tools.xhtml                    (%chrome/common/help/developer_tools.xhtml)
--  locale/@AB_CD@/communicator/help/forieusers.xhtml                         (%chrome/common/help/forieusers.xhtml)
-   locale/@AB_CD@/communicator/help/glossary.xhtml                           (%chrome/common/help/glossary.xhtml)
-   locale/@AB_CD@/communicator/help/suitehelp.rdf                            (%chrome/common/help/suitehelp.rdf)
-   locale/@AB_CD@/communicator/help/helpFileLayout.css                       (%chrome/common/help/helpFileLayout.css)
-   locale/@AB_CD@/communicator/help/help-glossary.rdf                        (%chrome/common/help/help-glossary.rdf)
-   locale/@AB_CD@/communicator/help/help_help.xhtml                          (%chrome/common/help/help_help.xhtml)
-   locale/@AB_CD@/communicator/help/help-index1.rdf                          (%chrome/common/help/help-index1.rdf)
-   locale/@AB_CD@/communicator/help/help-indexAZ.rdf                         (%chrome/common/help/help-indexAZ.rdf)
-   locale/@AB_CD@/communicator/help/help-win.rdf                             (%chrome/common/help/help-win.rdf)

+ 0 - 52
comm-central/patches/1680144-debugqaesr68-cc.patch

@@ -1,52 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Date 1606682288 -3600
-# Parent  fbe474229a151149bd2c6f66c3cb6dfdc0383187
-Bug 1680144 - Remove obsolete esr68 repos from debug QA extension. r=IanN
-
-diff --git a/suite/extensions/debugQA/content/debugQAMenuOverlay.xul b/suite/extensions/debugQA/content/debugQAMenuOverlay.xul
---- a/suite/extensions/debugQA/content/debugQAMenuOverlay.xul
-+++ b/suite/extensions/debugQA/content/debugQAMenuOverlay.xul
-@@ -195,20 +195,16 @@
-         <menuitem label="Recent comm-central Checkins"
-                   oncommand="openQAUrl('https://hg.mozilla.org/comm-central/pushloghtml?startdate=24+hours+ago&amp;enddate=now');"/>
-         <menuitem label="Recent mozilla-central Checkins"
-                   oncommand="openQAUrl('https://hg.mozilla.org/mozilla-central/pushloghtml?startdate=24+hours+ago&amp;enddate=now');"/>
-         <menuitem label="Recent comm-esr78 Checkins"
-                   oncommand="openQAUrl('https://hg.mozilla.org/releases/comm-esr78/pushloghtml?startdate=96+hours+ago&amp;enddate=now');"/>
-         <menuitem label="Recent mozilla-esr78 Checkins"
-                   oncommand="openQAUrl('https://hg.mozilla.org/releases/mozilla-esr78/pushloghtml?startdate=96+hours+ago&amp;enddate=now');"/>
--        <menuitem label="Recent comm-esr68 Checkins"
--                  oncommand="openQAUrl('https://hg.mozilla.org/releases/comm-esr68/pushloghtml?startdate=96+hours+ago&amp;enddate=now');"/>
--        <menuitem label="Recent mozilla-esr68 Checkins"
--                  oncommand="openQAUrl('https://hg.mozilla.org/releases/mozilla-esr68/pushloghtml?startdate=96+hours+ago&amp;enddate=now');"/>
-         <menuitem label="Recent gitlab 2.53 comm Activity"
-                   oncommand="openQAUrl('https://gitlab.com/seamonkey-project/seamonkey-2.53-comm/activity');"/>
-         <menuitem label="Recent gitlab 2.53 mozilla Activity"
-                   oncommand="openQAUrl('https://gitlab.com/seamonkey-project/seamonkey-2.53-mozilla/activity');"/>
-         <menuitem label="Recent gitlab 2.53 l10n Activity"
-                   oncommand="openQAUrl('https://gitlab.com/seamonkey-project/seamonkey-2.53-l10n/activity');"/>
-        <menuitem label="Tree Status"
-                   oncommand="openQAUrl('https://treestatus.mozilla-releng.net/static/ui/treestatus/');"/>
-diff --git a/suite/extensions/debugQA/install.rdf.in b/suite/extensions/debugQA/install.rdf.in
---- a/suite/extensions/debugQA/install.rdf.in
-+++ b/suite/extensions/debugQA/install.rdf.in
-@@ -5,17 +5,17 @@
- 
- 
- #filter substitution
- 
- <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-      xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-   <Description about="urn:mozilla:install-manifest">
-     <em:id>debugQA@mozilla.org</em:id>
--    <em:version>2.0.6</em:version>
-+    <em:version>2.0.7</em:version>
- 
-     <em:targetApplication>
-       <!-- Suite -->
-       <Description>
-         <em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id>
-         <em:minVersion>2.53</em:minVersion>
-         <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion>
-       </Description>

+ 56 - 0
comm-central/patches/1680928-cancompact-cc.patch

@@ -0,0 +1,56 @@
+# HG changeset patch
+# User Ian Neal <iann_cvs@blueyonder.co.uk>
+# Date 1603658114 0
+# Parent  b944d175bb8687c74623e40d6da8e612bd51c833
+Bug 1680928 - Add GetCanCompactFoldersOnServer method to NNTP. r=mkmelin
+
+diff --git a/mailnews/news/src/nsNntpIncomingServer.cpp b/mailnews/news/src/nsNntpIncomingServer.cpp
+--- a/mailnews/news/src/nsNntpIncomingServer.cpp
++++ b/mailnews/news/src/nsNntpIncomingServer.cpp
+@@ -1468,16 +1468,25 @@ nsNntpIncomingServer::GroupNotFound(nsIM
+ 
+ NS_IMETHODIMP
+ nsNntpIncomingServer::SetPrettyNameForGroup(const nsAString& name,
+                                             const nsAString& prettyName) {
+   return NS_ERROR_NOT_IMPLEMENTED;
+ }
+ 
+ NS_IMETHODIMP
++nsNntpIncomingServer::GetCanCompactFoldersOnServer(
++    bool* canCompactFoldersOnServer) {
++  NS_ENSURE_ARG_POINTER(canCompactFoldersOnServer);
++  // Initialize canCompactFoldersOnServer false, a default value for NNTP
++  *canCompactFoldersOnServer = false;
++  return NS_OK;
++}
++
++NS_IMETHODIMP
+ nsNntpIncomingServer::GetCanSearchMessages(bool* canSearchMessages) {
+   NS_ENSURE_ARG_POINTER(canSearchMessages);
+   *canSearchMessages = true;
+   return NS_OK;
+ }
+ 
+ NS_IMETHODIMP
+ nsNntpIncomingServer::GetOfflineSupportLevel(int32_t* aSupportLevel) {
+diff --git a/mailnews/news/src/nsNntpIncomingServer.h b/mailnews/news/src/nsNntpIncomingServer.h
+--- a/mailnews/news/src/nsNntpIncomingServer.h
++++ b/mailnews/news/src/nsNntpIncomingServer.h
+@@ -53,16 +53,17 @@ class nsNntpIncomingServer : public nsMs
+                                      const nsACString& newName,
+                                      bool hostnameChanged) override;
+ 
+   // for nsMsgLineBuffer
+   virtual nsresult HandleLine(const char* line, uint32_t line_size);
+ 
+   // override to clear all passwords associated with server
+   NS_IMETHODIMP ForgetPassword() override;
++  NS_IMETHOD GetCanCompactFoldersOnServer(bool* canCompactFoldersOnServer) override;
+   NS_IMETHOD GetCanSearchMessages(bool* canSearchMessages) override;
+   NS_IMETHOD GetOfflineSupportLevel(int32_t* aSupportLevel) override;
+   NS_IMETHOD GetDefaultCopiesAndFoldersPrefsToServer(
+       bool* aCopiesAndFoldersOnServer) override;
+   NS_IMETHOD GetCanCreateFoldersOnServer(
+       bool* aCanCreateFoldersOnServer) override;
+   NS_IMETHOD GetCanFileMessagesOnServer(
+       bool* aCanFileMessagesOnServer) override;

+ 1 - 3
comm-central/patches/series

@@ -1,6 +1,4 @@
-1600103-port296655-v1_6-cc.patch
-1680140-iehelprip-cc.patch
-1680144-debugqaesr68-cc.patch
+1680928-cancompact-cc.patch
 TOP-1642188-remove-nsDOMIEvent-cc.patch
 TOP-1611010-DOMEventListener-cc.patch
 TOP-1614671-port1456035-4-and-5-61a1-cc.patch