fix #72262 and #72269. when loading a folder, scroll to the first new message (but don't select it.) when loading a folder while doing cross folder navigation, scroll to and select the proper messsage. r=mscott, sr=bienvenu

git-svn-id: svn://10.0.0.236/trunk@91248 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
sspitzer%netscape.com 2001-04-04 04:32:10 +00:00
parent 04121d876f
commit 56acdd67fa
4 changed files with 40 additions and 43 deletions

View File

@ -676,25 +676,11 @@ function OnClickThreadAndMessagePaneSplitter()
if(collapsed)
{
LoadSelectionIntoMessagePane();
setTimeout("PositionThreadPane();",0);
setTimeout("ScrollToMessage(new,true,true);",0);
}
*/
}
function PositionThreadPane()
{
dump("XXX fix PositionThreadPane\n");
/*
var selArray = tree.selectedItems;
if ( selArray && (selArray.length > 0))
try {
tree.ensureElementIsVisible(selArray[0]);
}
catch(e) { }
*/
}
function FolderPaneSelectionChange()
{
var tree = GetFolderTree();

View File

@ -393,7 +393,6 @@ nsMsgWindowCommands.prototype =
},
SelectFolder: function(folderUri)
{
SelectFolder(folderUri);
},

View File

@ -41,7 +41,7 @@ var gCurrentLoadingFolderViewFlags = 0;
var gCurrentDisplayedMessage = null;
var gNextMessageAfterDelete = null;
var gNextMessageAfterLoad = false;
var gNextMessageAfterLoad = null;
var gNextMessageViewIndexAfterDelete = -1;
var gActiveThreadPaneSortColumn = "";
@ -123,12 +123,14 @@ var folderListener = {
gCurrentLoadingFolderViewFlags = 0;
SetFocusThreadPane();
var scrolled = false;
if (gNextMessageAfterLoad)
{
gNextMessageAfterLoad = false;
var type = gNextMessageAfterLoad;
gNextMessageAfterLoad = null;
// should scroll to new here.
PositionThreadPane();
// scroll to and select the proper message
scrolled = ScrollToMessage(type, true, true /* selectMessage */);
}
}
}
@ -136,11 +138,15 @@ var folderListener = {
{
gCurrentLoadingFolderURI = "";
//Now let's select the first new message if there is one
var beforeScrollToNew;
var beforeScrollToNew;
if(showPerformance) {
beforeScrollToNew = new Date();
}
ScrollToFirstNewMessage();
if (!scrolled) {
// if we didn't just scroll, scroll to the first new message
// don't select it though
ScrollToMessage(nsMsgNavigationType.firstNew, true, false /* selectMessage */);
}
if(showPerformance) {
var afterScrollToNew = new Date();

View File

@ -71,11 +71,6 @@ function FindNextFolder(originalFolderURI)
return null;
}
function ScrollToFirstNewMessage()
{
dump("XXX ScrollToFirstNewMessage needs to be rewritten.\n");
}
function GetTopLevelMessageForMessage(message, folder)
{
if(!folder)
@ -90,7 +85,7 @@ function GetTopLevelMessageForMessage(message, folder)
return topMessage;
}
function CrossFolderNavigation (type, supportsFolderPane )
function CrossFolderNavigation(type, supportsFolderPane )
{
if (type != nsMsgNavigationType.nextUnreadMessage)
{
@ -148,38 +143,33 @@ function CrossFolderNavigation (type, supportsFolderPane )
{
case 0:
// do this unconditionally
gNextMessageAfterLoad = true;
gNextMessageAfterLoad = type;
if (supportsFolderPane)
SelectFolder(nextFolderURI);
dump("XXX we need code to select the correct type of message, after we load the folder\n");
break;
case 1:
default:
var promptText = gMessengerBundle.getFormattedString("advanceNextPrompt", [ nextFolder.name ], 1);
if (commonDialogs.Confirm(window, promptText, promptText)) {
gNextMessageAfterLoad = true;
gNextMessageAfterLoad = type;
if (supportsFolderPane)
SelectFolder(nextFolderURI);
dump("XXX we need code to select the correct type of message, after we load the folder\n");
}
break;
default:
dump("huh?");
break;
}
}
return nextFolderURI;
}
function GoNextMessage(type, startFromBeginning)
function ScrollToMessage(type, wrap, selectMessage)
{
dump("XXX ScrollToMessage " + type + "," + selectMessage + "\n");
try {
var outlinerView = gDBView.QueryInterface(Components.interfaces.nsIOutlinerView);
var outlinerSelection = outlinerView.selection;
var currentIndex = outlinerSelection.currentIndex;
var status = gDBView.navigateStatus(type);
var resultId = new Object;
var resultIndex = new Object;
var threadIndex = new Object;
@ -188,12 +178,28 @@ function GoNextMessage(type, startFromBeginning)
// only scroll and select if we found something
if ((resultId.value != -1) && (resultIndex.value != -1)) {
outlinerSelection.select(resultIndex.value);
EnsureRowInThreadOutlinerIsVisible(resultIndex.value);
return;
if (selectMessage) {
outlinerSelection.select(resultIndex.value);
}
EnsureRowInThreadOutlinerIsVisible(resultIndex.value);
return true;
}
else {
return false;
}
}
catch (ex) {
return false;
}
}
function GoNextMessage(type, startFromBeginning)
{
try {
var succeeded = ScrollToMessage(type, startFromBeginning, true);
if (!succeeded) {
CrossFolderNavigation(type, true);
}
CrossFolderNavigation(type, true);
}
catch (ex) {
dump("GoNextMessage ex = " + ex + "\n");