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 gNextMessageAfterDelete = null;
|
||||
var gNextMessageAfterLoad = false;
|
||||
|
||||
var gActiveThreadPaneSortColumn = "";
|
||||
|
||||
@ -101,7 +102,7 @@ var folderListener = {
|
||||
if(resource)
|
||||
{
|
||||
var uri = resource.Value;
|
||||
//dump("In OnFolderLoaded for " + uri +"\n");
|
||||
dump("In OnFolderLoaded for " + uri +"\n");
|
||||
if(uri == gCurrentFolderToReroot)
|
||||
{
|
||||
gCurrentFolderToReroot="";
|
||||
@ -114,6 +115,15 @@ var folderListener = {
|
||||
gCurrentLoadingFolderSortID = "";
|
||||
gCurrentLoadingFolderSortDirection = null;
|
||||
|
||||
if (gNextMessageAfterLoad) {
|
||||
gNextMessageAfterLoad = false;
|
||||
|
||||
GoNextMessage(navigateUnread, true);
|
||||
|
||||
msgNavigationService.EnsureDocumentIsLoaded(document);
|
||||
SetFocusThreadPane();
|
||||
PositionThreadPane();
|
||||
}
|
||||
}
|
||||
}
|
||||
if(uri == gCurrentLoadingFolderURI)
|
||||
@ -884,6 +894,7 @@ function SelectFolder(folderUri)
|
||||
|
||||
function SelectMessage(messageUri)
|
||||
{
|
||||
dump("SelectMessage: " + messageUri + "\n");
|
||||
var tree = GetThreadTree();
|
||||
var treeitem = document.getElementById(messageUri);
|
||||
if(tree && treeitem)
|
||||
|
@ -26,6 +26,56 @@ var navigateUnread = 1;
|
||||
var navigateFlagged = 2;
|
||||
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.
|
||||
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);
|
||||
//Only change the selection if there's a valid nextMessage
|
||||
if(nextMessage && (nextMessage != currentMessage))
|
||||
if(nextMessage && (nextMessage != currentMessage)) {
|
||||
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();
|
||||
|
@ -34,6 +34,7 @@ removeFolder=Delete Folder...
|
||||
newFolder=New Folder...
|
||||
newSubfolder=New Subfolder...
|
||||
getNextNMessages=Get Next %S News Messages
|
||||
advanceNextPrompt=Advance to next unread message in %S?
|
||||
titleNewsPreHost=on
|
||||
titleMailPreHost=for
|
||||
replyToSender=Reply to Sender
|
||||
|
Loading…
Reference in New Issue
Block a user