mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-25 11:15:34 +00:00
fix for #17801. r=putterman. make it so "next" will take you across folders.
still work to be done before this feature is perfect, but this gets the ball rolling.
This commit is contained in:
parent
d22a8ccf15
commit
9c447f45a0
@ -39,6 +39,7 @@ var gCurrentLoadingFolderSortDirection = null;
|
|||||||
|
|
||||||
var gCurrentDisplayedMessage = null;
|
var gCurrentDisplayedMessage = null;
|
||||||
var gNextMessageAfterDelete = null;
|
var gNextMessageAfterDelete = null;
|
||||||
|
var gNextMessageAfterLoad = false;
|
||||||
|
|
||||||
var gActiveThreadPaneSortColumn = "";
|
var gActiveThreadPaneSortColumn = "";
|
||||||
|
|
||||||
@ -101,7 +102,7 @@ var folderListener = {
|
|||||||
if(resource)
|
if(resource)
|
||||||
{
|
{
|
||||||
var uri = resource.Value;
|
var uri = resource.Value;
|
||||||
//dump("In OnFolderLoaded for " + uri +"\n");
|
dump("In OnFolderLoaded for " + uri +"\n");
|
||||||
if(uri == gCurrentFolderToReroot)
|
if(uri == gCurrentFolderToReroot)
|
||||||
{
|
{
|
||||||
gCurrentFolderToReroot="";
|
gCurrentFolderToReroot="";
|
||||||
@ -114,6 +115,15 @@ var folderListener = {
|
|||||||
gCurrentLoadingFolderSortID = "";
|
gCurrentLoadingFolderSortID = "";
|
||||||
gCurrentLoadingFolderSortDirection = null;
|
gCurrentLoadingFolderSortDirection = null;
|
||||||
|
|
||||||
|
if (gNextMessageAfterLoad) {
|
||||||
|
gNextMessageAfterLoad = false;
|
||||||
|
|
||||||
|
GoNextMessage(navigateUnread, true);
|
||||||
|
|
||||||
|
msgNavigationService.EnsureDocumentIsLoaded(document);
|
||||||
|
SetFocusThreadPane();
|
||||||
|
PositionThreadPane();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(uri == gCurrentLoadingFolderURI)
|
if(uri == gCurrentLoadingFolderURI)
|
||||||
@ -884,6 +894,7 @@ function SelectFolder(folderUri)
|
|||||||
|
|
||||||
function SelectMessage(messageUri)
|
function SelectMessage(messageUri)
|
||||||
{
|
{
|
||||||
|
dump("SelectMessage: " + messageUri + "\n");
|
||||||
var tree = GetThreadTree();
|
var tree = GetThreadTree();
|
||||||
var treeitem = document.getElementById(messageUri);
|
var treeitem = document.getElementById(messageUri);
|
||||||
if(tree && treeitem)
|
if(tree && treeitem)
|
||||||
|
@ -26,6 +26,56 @@ var navigateUnread = 1;
|
|||||||
var navigateFlagged = 2;
|
var navigateFlagged = 2;
|
||||||
var navigateNew = 3;
|
var navigateNew = 3;
|
||||||
|
|
||||||
|
var Bundle = srGetStrBundle("chrome://messenger/locale/messenger.properties");
|
||||||
|
var commonDialogs = Components.classes["@mozilla.org/appshell/commonDialogs;1"].getService();
|
||||||
|
commonDialogs = commonDialogs.QueryInterface(Components.interfaces.nsICommonDialogs);
|
||||||
|
|
||||||
|
function FindNextFolder(originalFolderURI)
|
||||||
|
{
|
||||||
|
if (!originalFolderURI) return;
|
||||||
|
|
||||||
|
var originalFolderResource = RDF.GetResource(originalFolderURI);
|
||||||
|
var folder = originalFolderResource.QueryInterface(Components.interfaces.nsIFolder);
|
||||||
|
if (!folder) return null;
|
||||||
|
dump("folder = " + folder.URI + "\n");
|
||||||
|
|
||||||
|
try {
|
||||||
|
var subFolderEnumerator = folder.GetSubFolders();
|
||||||
|
var done = false;
|
||||||
|
while (!done) {
|
||||||
|
var element = subFolderEnumerator.currentItem();
|
||||||
|
var currentSubFolder = element.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||||
|
dump("current folder = " + currentSubFolder.URI + "\n");
|
||||||
|
if (currentSubFolder.getNumUnread(false /* don't descend */) > 0) {
|
||||||
|
dump("if the child has unread, use it.\n");
|
||||||
|
return currentSubFolder.URI;
|
||||||
|
}
|
||||||
|
else if (currentSubFolder.getNumUnread(true /* descend */) > 0) {
|
||||||
|
dump("if the child doesn't have any unread, but it's children do, recurse\n");
|
||||||
|
return FindNextFolder(currentSubFolder.URI);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
subFolderEnumerator.next();
|
||||||
|
}
|
||||||
|
catch (ex) {
|
||||||
|
done=true;
|
||||||
|
}
|
||||||
|
} // while
|
||||||
|
}
|
||||||
|
catch (ex) {
|
||||||
|
// one way to get here is if the folder has no sub folders
|
||||||
|
}
|
||||||
|
|
||||||
|
if (folder.parent && folder.parent.URI) {
|
||||||
|
dump("parent = " + folder.parent.URI + "\n");
|
||||||
|
return FindNextFolder(folder.parent.URI);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dump("no parent\n");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/*GoNextMessage finds the message that matches criteria and selects it.
|
/*GoNextMessage finds the message that matches criteria and selects it.
|
||||||
nextFunction is the function that will be used to detertime if a message matches criteria.
|
nextFunction is the function that will be used to detertime if a message matches criteria.
|
||||||
@ -57,8 +107,24 @@ function GoNextMessage(type, startFromBeginning )
|
|||||||
|
|
||||||
var nextMessage = msgNavigationService.FindNextMessage(type, tree, currentMessage, RDF, document, startFromBeginning, messageView.showThreads);
|
var nextMessage = msgNavigationService.FindNextMessage(type, tree, currentMessage, RDF, document, startFromBeginning, messageView.showThreads);
|
||||||
//Only change the selection if there's a valid nextMessage
|
//Only change the selection if there's a valid nextMessage
|
||||||
if(nextMessage && (nextMessage != currentMessage))
|
if(nextMessage && (nextMessage != currentMessage)) {
|
||||||
ChangeSelection(tree, nextMessage);
|
ChangeSelection(tree, nextMessage);
|
||||||
|
}
|
||||||
|
else if (type == navigateUnread) {
|
||||||
|
var treeFolder = GetThreadTreeFolder();
|
||||||
|
var originalFolderURI = treeFolder.getAttribute('ref');
|
||||||
|
var nextFolderURI = FindNextFolder(originalFolderURI);
|
||||||
|
if (nextFolderURI && (originalFolderURI != nextFolderURI)) {
|
||||||
|
var nextFolderResource = RDF.GetResource(nextFolderURI);
|
||||||
|
var nextFolder = nextFolderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||||
|
|
||||||
|
var promptText = Bundle.formatStringFromName("advanceNextPrompt", [ nextFolder.name ], 1);
|
||||||
|
if (commonDialogs.Confirm(window, promptText, promptText)) {
|
||||||
|
gNextMessageAfterLoad = true;
|
||||||
|
SelectFolder(nextFolderURI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var afterGoNextMessage = new Date();
|
var afterGoNextMessage = new Date();
|
||||||
|
@ -34,6 +34,7 @@ removeFolder=Delete Folder...
|
|||||||
newFolder=New Folder...
|
newFolder=New Folder...
|
||||||
newSubfolder=New Subfolder...
|
newSubfolder=New Subfolder...
|
||||||
getNextNMessages=Get Next %S News Messages
|
getNextNMessages=Get Next %S News Messages
|
||||||
|
advanceNextPrompt=Advance to next unread message in %S?
|
||||||
titleNewsPreHost=on
|
titleNewsPreHost=on
|
||||||
titleMailPreHost=for
|
titleMailPreHost=for
|
||||||
replyToSender=Reply to Sender
|
replyToSender=Reply to Sender
|
||||||
|
Loading…
Reference in New Issue
Block a user