diff --git a/build.bat b/build.bat
index 1b34aa37f..a84e273c3 100644
--- a/build.bat
+++ b/build.bat
@@ -8,6 +8,6 @@ pwsh -Command "(gc -en UTF8NoBOM manifest.json) -replace 'pre%oldRev%', 'pre%qui
rem "C:\Program Files\7-Zip\7z" a -xr!.svn quickFolders.zip install.rdf chrome.manifest chrome defaults license.txt
"C:\Program Files\7-Zip\7z" a -xr!.svn QuickFoldersWeb.zip manifest.json install.rdf chrome.manifest chrome defaults license.txt
echo %quickFoldersRev% > revision.txt
-move QuickFolders*.xpi "..\..\Release\_Test Versions\4.20\"
+move QuickFolders*.xpi "..\..\Release\_Test Versions\4.21\"
pwsh -Command "Start-Sleep -m 150"
-rename QuickFoldersWeb.zip QuickFolders-wx-4.20pre%quickFoldersRev%.xpi
\ No newline at end of file
+rename QuickFoldersWeb.zip QuickFolders-wx-4.21pre%quickFoldersRev%.xpi
\ No newline at end of file
diff --git a/chrome/content/options.js b/chrome/content/options.js
index e202724ee..33464d31b 100644
--- a/chrome/content/options.js
+++ b/chrome/content/options.js
@@ -249,12 +249,13 @@ QuickFolders.Options = {
QI = QuickFolders.Interface,
options = QuickFolders.Options,
licenser = util.Licenser;
+ let isOptionsTab = window.arguments && window.arguments.length>1;
util.logDebug("QuickFolders.Options.load()");
if (prefs.isDebugOption('options')) debugger;
// version number must be copied over first!
- if (window.arguments && window.arguments[1].inn.instance) {
+ if (isOptionsTab && window.arguments[1].inn.instance) {
// QuickFolders = window.arguments[1].inn.instance; // avoid creating a new QuickFolders instance, reuse the one passed in!!
util.mExtensionVer = window.arguments[1].inn.instance.Util.Version;
}
@@ -265,12 +266,26 @@ QuickFolders.Options = {
if (!version) debugger;
util.logDebugOptional('options', 'QuickFolders.Options.load()');
- if (window.arguments) {
+ let modeNum = -1;
+ if (isOptionsTab) {
try {
this.optionsMode = window.arguments[1].inn.mode;
// force selection of a certain pane (-1 ignores)
- if (this.optionsMode >= 0)
- prefs.setIntPref('lastSelectedOptionsTab', this.optionsMode);
+ if (this.optionsMode) {
+ switch (this.optionsMode) {
+ case "helpOnly":
+ modeNum = this.QF_PREF_HELP;
+ break;
+ case "supportOnly":
+ modeNum = this.QF_PREF_SUPPORT;
+ break;
+ case "licenseKey":
+ modeNum = this.QF_PREF_LICENSE;
+ break;
+ }
+ }
+ if (modeNum >= 0)
+ prefs.setIntPref('lastSelectedOptionsTab', modeNum);
}
catch(e) {;}
}
diff --git a/chrome/content/qf-advancedTab.js b/chrome/content/qf-advancedTab.js
index 12b1fcbca..b4efb2b1b 100644
--- a/chrome/content/qf-advancedTab.js
+++ b/chrome/content/qf-advancedTab.js
@@ -95,7 +95,7 @@ QuickFolders.AdvancedTab = {
iUnread.checked = (entry.flags & ADVANCED_FLAGS.SETMAIL_UNREAD) && true;
elem('txtColor').value = entry.cssColor || '';
- elem('txtColorPicker').color = elem('txtColor').value;
+ elem('txtColorPicker').value = elem('txtColor').value;
elem('txtBackground').value = entry.cssBack || '';
// custom palette
let isPalette = (entry.flags & ADVANCED_FLAGS.CUSTOM_PALETTE) && true;
@@ -338,7 +338,7 @@ QuickFolders.AdvancedTab = {
updatePicker: function updatePicker(textbox) {
if (textbox.length) {
- document.getElementById('txtColorPicker').color = textbox.value;
+ document.getElementById('txtColorPicker').value = textbox.value;
}
} ,
diff --git a/chrome/content/quickfolders-advanced-tab-props.xul b/chrome/content/quickfolders-advanced-tab-props.xul
index 3a280d8f9..28e2b46f3 100644
--- a/chrome/content/quickfolders-advanced-tab-props.xul
+++ b/chrome/content/quickfolders-advanced-tab-props.xul
@@ -19,6 +19,7 @@
buttonlabelextra2="&btnReset;"
buttonlabelextra1="&btnApply;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml"
onload="QuickFolders.AdvancedTab.load();"
>
@@ -159,13 +160,14 @@
-
-
-
+
+
+
diff --git a/chrome/content/quickfolders-interface.js b/chrome/content/quickfolders-interface.js
index 769255b22..d50b53bc2 100644
--- a/chrome/content/quickfolders-interface.js
+++ b/chrome/content/quickfolders-interface.js
@@ -342,13 +342,6 @@ QuickFolders.Interface = {
// Start iterating at the top of the hierarchy, that is, with the root
// folders for every account.
acctMgr = Cc["@mozilla.org/messenger/account-manager;1"].getService(Ci.nsIMsgAccountManager);
- // Postbox only:
- if (util.isLegacyIterator) {
- for (let acct in fixIterator(acctMgr.accounts, Ci.nsIMsgAccount)) {
- addIfRecent(acct.incomingServer.rootFolder);
- checkSubFolders(acct.incomingServer.rootFolder);
- }
- }
recentFolders.sort(sorter);
return recentFolders;
@@ -1229,7 +1222,7 @@ QuickFolders.Interface = {
const separator = "==============================\n";
let f = 0, affected = 0;
util.logDebug(separator + "loading Dictionary…");
- //let allFolders = util.allFoldersIterator(false);
+
util.logDebug(separator + "Iterating all folders…");
for (let folder of util.allFoldersIterator(false)) {
//let folder = allFolders[i];
@@ -1340,7 +1333,8 @@ QuickFolders.Interface = {
return this._selectedCategories;
} ,
set currentActiveCategories(v) {
- const util = QuickFolders.Util;
+ const util = QuickFolders.Util,
+ prefs = QuickFolders.Preferences;
this._selectedCategories = v; // set menuitem value?
let menulist = this.CategoryMenu,
cats = v.split('|'),
@@ -1350,8 +1344,9 @@ QuickFolders.Interface = {
menulist.value = v;
// if multiple select, check all boxes
for (let i=0; i a.startsWith(ancestors[maxLevel]) && a.length>1)) {
// 1st (top level) match
if (!directParent) directParent = f;
@@ -5034,7 +5032,9 @@ QuickFolders.Interface = {
directParent = null;
while (f && maxLevel) {
maxLevel--;
- if (f.prettyName.toLowerCase().indexOf(ancestors[maxLevel])==0) {
+ // [issue 135] allow in-string search for children using delimiters: - _ . and space!
+ let folderNameMatches = f.prettyName.toLowerCase().split(/[-_. ]/);
+ if (folderNameMatches.some(a => a.startsWith(search))) {
if (!directParent) directParent = folder;
if (maxLevel == 0) {
if (parentList.indexOf(directParent)<0) {
@@ -5108,25 +5108,7 @@ QuickFolders.Interface = {
parentCount = parentString.split("/").length + 1; // original entry for parent
}
let isFiling = QuickFolders.quickMove.isActive;
- /********* old jump point *********/
- /*
- // [Bug 26565] if 1 unique full match is found - without children!, we can automatically jump there
- if ( (matches.length == 1)
- && (!isFiling) && (matches[0].folder && !matches[0].folder.hasSubFolders)
- && (matches[0].lname == searchString) // one exact FULL match
- || (wordStartMatch(matches[0].lname) && forceFind)) // match starts with search string + [Enter] key was pressed
- ) {
- // go to folder
- isSelected = QuickFolders_MySelectFolder(matches[0].uri);
- if (matches[0].parentString)
- QuickFolders.quickMove.rememberLastFolder(matches[0].uri, matches[0].parentString);
- setTimeout(function() {
- QuickFolders.Interface.tearDownSearchBox();
- }, 400);
- return; // ????
- }
- */
-
+
// if quickMove is active we need to suppress matches from newsgroups (as we can't move mail to them)
// "parent/" no name given, only lists the direct children
// "parent/X" can it list grandchildren? It does, but shouldn't - test with "Addons/Qu"
@@ -5134,36 +5116,15 @@ QuickFolders.Interface = {
if (parentPos>0) maxParentLevel = 1; // no subfolders when SLASH is entered
// multiple slashes?
- let isLegacyIterator = util.isLegacyIterator;
- if (isLegacyIterator) {
- util.logDebugOptional("interface.findFolder", "Using old folder iterator for Platform=" + util.PlatformVersion);
- let AF = util.allFoldersIterator(isFiling);
- util.logDebugOptional("Assigned AllFolders = " + AF);
- for (let fi=0; fi0) {
- if (isLegacyIterator) { // util.Application == 'Postbox'
- let AF = util.allFoldersIterator(isFiling);
- for (let fi=0; fi 0) {
// check previous siblings to see if target button is found - then it's to the left. otherwise it's to the right
let i = null,
sib = node;
@@ -1818,8 +1828,7 @@ var QuickFolders = {
QI = QuickFolders.Interface,
prefs = QuickFolders.Preferences,
Ci = Components.interfaces,
- Cc = Components.classes;
-
+ Cc = Components.classes;
if (!dragSession) dragSession = Cc["@mozilla.org/widget/dragservice;1"].getService(Ci.nsIDragService).getCurrentSession();
let isShift = evt.shiftKey,
@@ -1839,17 +1848,15 @@ var QuickFolders = {
switch (contentType) {
case "text/x-moz-folder":
- if (!isShift) {
- // [issue 75] support moving folders through quickMove
- if (DropTarget.id && DropTarget.id =="QuickFolders-quickMove") {
- isMoveFolderQuickMove = true;
- }
- else {
- let sPrompt = util.getBundleString("qfMoveFolderOrNewTab",
- "Please drag new folders to an empty area of the toolbar! If you want to MOVE the folder, please hold down SHIFT while dragging.");
- util.alert(sPrompt);
- break;
- }
+ // [issue 75] support moving folders through quickMove
+ if (DropTarget.id && DropTarget.id =="QuickFolders-quickMove") {
+ isMoveFolderQuickMove = true;
+ }
+ if (!isShift && !isMoveFolderQuickMove) {
+ let sPrompt = util.getBundleString("qfMoveFolderOrNewTab",
+ "Please drag new folders to an empty area of the toolbar! If you want to MOVE the folder, please hold down SHIFT while dragging.");
+ util.alert(sPrompt);
+ break;
}
// handler for dropping folders
try {
diff --git a/chrome/content/shim12/quickfolders-shim.js b/chrome/content/shim12/quickfolders-shim.js
index 39983e248..e90097892 100644
--- a/chrome/content/shim12/quickfolders-shim.js
+++ b/chrome/content/shim12/quickfolders-shim.js
@@ -57,6 +57,7 @@ QuickFolders.Util.allFoldersIterator = function allFoldersIterator(writable) {
allFolders = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
// accounts will be changed from nsIMutableArray to nsIArray Tb24 (Sm2.17)
for (let account of fixIterator(acctMgr.accounts, Ci.nsIMsgAccount)) {
+ if ((writable) && !account.canFileMessagesOnServer) continue;
if (account.rootFolder)
account.rootFolder.ListDescendents(allFolders);
for (let aFolder of fixIterator(allFolders, Ci.nsIMsgFolder)) {
diff --git a/defaults/preferences/quickfolders.js b/defaults/preferences/quickfolders.js
index 0ed18cc0a..18b17f060 100644
--- a/defaults/preferences/quickfolders.js
+++ b/defaults/preferences/quickfolders.js
@@ -36,14 +36,15 @@ pref("extensions.quickfolders.quickMove.Hotkey", 'M');
pref("extensions.quickfolders.quickMove.Hotkey.Shift", true);
pref("extensions.quickfolders.quickMove.lastFolderName","");
pref("extensions.quickfolders.quickMove.autoFill",true);
-pref("extensions.quickfolders.quickMove.premium.silentMode", false);
+pref("extensions.quickfolders.quickMove.folderLabel", true);
+pref("extensions.quickfolders.quickMove.reopenMsgTabAfterMove", false);
+pref("extensions.quickfolders.quickMove.gotoNextUnreadAfterMove", true);
pref("extensions.quickfolders.quickCopy.useHotkey", false);
pref("extensions.quickfolders.quickCopy.Hotkey", 'T');
pref("extensions.quickfolders.quickCopy.Hotkey.Shift", true);
pref("extensions.quickfolders.skipFolder.useHotkey", false);
pref("extensions.quickfolders.skipFolder.Hotkey", 'S');
pref("extensions.quickfolders.skipFolder.Hotkey.Shift", true);
-pref("extensions.quickfolders.quickMove.folderLabel", true);
pref("extensions.quickfolders.showToolIcon", true);
pref("extensions.quickfolders.bookmarks.folderLabel", true);
pref("extensions.quickfolders.bookmarks.showButton", true);
@@ -164,6 +165,7 @@ pref("extensions.quickfolders.debug.interface.buttonStyles", false);
pref("extensions.quickfolders.debug.interface.findFolder", false);
pref("extensions.quickfolders.debug.interface.currentFolderBar", false);
pref("extensions.quickfolders.debug.interface.update",false);
+pref("extensions.quickfolders.debug.interface.userStyles", false);
pref("extensions.quickfolders.debug.listeners.tabmail", false);
pref("extensions.quickfolders.debug.listeners.folder", false);
pref("extensions.quickfolders.debug.mailTabs", false);
@@ -244,6 +246,7 @@ pref("extensions.quickfolders.premium.categories.multiSelect",false);
pref("extensions.quickfolders.premium.findFolder.maxParentLevel", 2); // Bug 26088
pref("extensions.quickfolders.premium.findFolder.maxPathItems", 3); // Bug 25991
pref("extensions.quickfolders.premium.findFolder.folderPathDetail", 2); // Bug 25991
+pref("extensions.quickfolders.quickMove.premium.silentMode", false);
/* popupProFeature( ) counts how often these features are used */
pref("extensions.quickfolders.premium.advancedTabProperties.usage", 0);
pref("extensions.quickfolders.premium.bookmarks.usage", 0);
diff --git a/install.rdf b/install.rdf
index acd7ee3e7..f805a0da3 100644
--- a/install.rdf
+++ b/install.rdf
@@ -13,7 +13,7 @@
em:icon64URL="chrome://quickfolders/skin/ico/QF64x64.png"
em:optionsURL="chrome://quickfolders/content/options.xul">
2
- 4.20
+ 4.21https://quickfolders.mozdev.org/index.html
diff --git a/manifest.json b/manifest.json
index 45dbd5897..8709bacb5 100644
--- a/manifest.json
+++ b/manifest.json
@@ -3,7 +3,7 @@
"manifest_version": 2,
"name": "QuickFolders",
"description": "Bookmark your favorite mail folders in Thunderbird.",
- "version": "4.20",
+ "version": "4.21",
"developer": {
"name": "Axel Grude",
"url": "https://quickfolders.org/index.html"
diff --git a/release-notes.html b/release-notes.html
index e31ddba77..c8a10ca83 100644
--- a/release-notes.html
+++ b/release-notes.html
@@ -1,21 +1,21 @@
-Release 4.20
+Release 4.21
This release backports some of the fixes that were also done in the new version for Thunderbird 78. If you want to get the latest features, I highly recommend updating Thunderbird to the current 78 release version.
To support QuickFolders, buy a license or donate to support the project.
Improvements
-
[issue 82] Improved sorting of search results during quickMove / quickJump.
-
[issue 109] Menu item Mark Messages read in Folder + subfolders not displayed as expected - it was only shown if the folder of the tab didn't have unread emails itself. This additional menu item that can be used to set subfolders read was only displayed if the actual folder of the tab itself had no unread emails, and only child folders had them. Configure this command in QuickFolders settings / Advanced / Menu Configuration / Mail Commands
-
[issue 37] When no match is found using the "/" in quickMove box, display "No matching parent folders!" instead of "..."
+
[issue 117] Added color picker for text color in tab-specific properties.
+
[issue 132] In a single message tab, quickMove used to redisplay the mail after moving it with quickMove.
+This behavior has now been changed on request to go to the next unread email instead. It can be modified by editing the following configuration settings (the Thunderbird 78 version of QuickFolders has a dedicated User Interface):
+
+extensions.quickfolders.quickMove.reopenMsgTabAfterMove
+extensions.quickfolders.quickMove.gotoNextUnreadAfterMove
+
QuickFolders Settings, now makes sure that correct options tab is opened / remembered
+
+
Bug Fixes
-
[issue 101] If multiple categories are selected, closing QuickFolders settings reverts to "Show All"
-
Fixed: When dragging mails on a subfolder item contained in a QuickFolders tab popup, the folder item is shown with an underline. But all child folders were also displayed underlined.
-
[issue 107] Restoring general / layout Settings only works if option for restoring folders also active.
-
-
[issue 92] do not apply "To address" from advanced tab propertiues when replying to an email!
-
[issue 110] "Tab-specific Properties" overwrites To Address when clicking Write from Address Book.
-
[issue 112] Reading List menu - Add current Item not working.
+
[issue 115] Fixed restoring of config values. Some general / layout settings were not restored properly even when they were saved during backup.