From 6ef6def82db8a2b5cad42389352ecb3fe9616f8a Mon Sep 17 00:00:00 2001 From: "bienvenu%nventure.com" Date: Tue, 16 Nov 2004 20:41:45 +0000 Subject: [PATCH] fix269725 sr=mscott status messages don't show up in main window if you've opened up a stand-alone msg window git-svn-id: svn://10.0.0.236/trunk@165405 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/mail/base/content/mailCommands.js | 36 +++++++++++----- .../base/src/nsMsgFolderDataSource.cpp | 42 ++++++++++++------- .../mailnews/base/src/nsMsgFolderDataSource.h | 4 +- 3 files changed, 55 insertions(+), 27 deletions(-) diff --git a/mozilla/mail/base/content/mailCommands.js b/mozilla/mail/base/content/mailCommands.js index ba7aa913467..f99c24a1ee6 100644 --- a/mozilla/mail/base/content/mailCommands.js +++ b/mozilla/mail/base/content/mailCommands.js @@ -21,16 +21,22 @@ function DoRDFCommand(dataSource, command, srcArray, argumentArray) { var commandResource = RDF.GetResource(command); if(commandResource) { - try { - dataSource.DoCommand(srcArray, commandResource, argumentArray); - } - catch(e) { - if (command == "http://home.netscape.com/NC-rdf#NewFolder") { - throw(e); // so that the dialog does not automatically close. - } - dump("Exception : In mail commands" + e + "\n"); - } + try { + if (!argumentArray) + argumentArray = Components.classes["@mozilla.org/supports-array;1"] + .createInstance(Components.interfaces.nsISupportsArray); + + if (argumentArray) + argumentArray.AppendElement(msgWindow); + dataSource.DoCommand(srcArray, commandResource, argumentArray); } + catch(e) { + if (command == "http://home.netscape.com/NC-rdf#NewFolder") { + throw(e); // so that the dialog does not automatically close. + } + dump("Exception : In mail commands" + e + "\n"); + } + } } function GetNewMessages(selectedFolders, server, compositeDataSource) @@ -627,7 +633,11 @@ function analyzeFolderForJunk() var messages = new Array(count) for (var i = 0; i < count; i++) { - messages[i] = view.getURIForViewIndex(i); + try + { + messages[i] = view.getURIForViewIndex(i); + } + catch (ex) {} // blow off errors here - dummy headers will fail } analyzeMessages(messages); } @@ -688,9 +698,13 @@ function deleteJunkInFolder() var clearedSelection = false; // select the junk messages + var messageUri; for (var i = 0; i < count; i++) { - var messageUri = view.getURIForViewIndex(i); + try { + messageUri = view.getURIForViewIndex(i); + } + catch (ex) {continue;} // blow off errors for dummy rows var msgHdr = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri); var junkScore = msgHdr.getStringProperty("junkscore"); var isJunk = ((junkScore != "") && (junkScore != "0")); diff --git a/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp b/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp index ec3ceb12882..07efd0535bf 100644 --- a/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp +++ b/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp @@ -793,6 +793,20 @@ nsMsgFolderDataSource::DoCommand(nsISupportsArray/**/* aSources, { nsresult rv = NS_OK; nsCOMPtr supports; + nsCOMPtr window; + + // callers can pass in the msgWindow as the last element of the arguments + // array. If they do, we'll use that as the msg window for progress, etc. + if (aArguments) + { + PRUint32 numArgs; + aArguments->Count(&numArgs); + if (numArgs > 1) + window = do_QueryElementAt(aArguments, numArgs - 1); + } + if (!window) + window = mWindow; + // XXX need to handle batching of command applied to all sources PRUint32 cnt = 0; @@ -808,37 +822,37 @@ nsMsgFolderDataSource::DoCommand(nsISupportsArray/**/* aSources, { if ((aCommand == kNC_Delete)) { - rv = DoDeleteFromFolder(folder, aArguments, mWindow, PR_FALSE); + rv = DoDeleteFromFolder(folder, aArguments, window, PR_FALSE); } if ((aCommand == kNC_ReallyDelete)) { - rv = DoDeleteFromFolder(folder, aArguments, mWindow, PR_TRUE); + rv = DoDeleteFromFolder(folder, aArguments, window, PR_TRUE); } else if((aCommand == kNC_NewFolder)) { - rv = DoNewFolder(folder, aArguments); + rv = DoNewFolder(folder, aArguments, window); } else if((aCommand == kNC_GetNewMessages)) { nsCOMPtr server = do_QueryElementAt(aArguments, i, &rv); NS_ENSURE_SUCCESS(rv, rv); - rv = server->GetNewMessages(folder, mWindow, nsnull); + rv = server->GetNewMessages(folder, window, nsnull); } else if((aCommand == kNC_Copy)) { - rv = DoCopyToFolder(folder, aArguments, mWindow, PR_FALSE); + rv = DoCopyToFolder(folder, aArguments, window, PR_FALSE); } else if((aCommand == kNC_Move)) { - rv = DoCopyToFolder(folder, aArguments, mWindow, PR_TRUE); + rv = DoCopyToFolder(folder, aArguments, window, PR_TRUE); } else if((aCommand == kNC_CopyFolder)) { - rv = DoFolderCopyToFolder(folder, aArguments, mWindow, PR_FALSE); + rv = DoFolderCopyToFolder(folder, aArguments, window, PR_FALSE); } else if((aCommand == kNC_MoveFolder)) { - rv = DoFolderCopyToFolder(folder, aArguments, mWindow, PR_TRUE); + rv = DoFolderCopyToFolder(folder, aArguments, window, PR_TRUE); } else if((aCommand == kNC_MarkAllMessagesRead)) { @@ -846,15 +860,15 @@ nsMsgFolderDataSource::DoCommand(nsISupportsArray/**/* aSources, } else if ((aCommand == kNC_Compact)) { - rv = folder->Compact(nsnull, mWindow); + rv = folder->Compact(nsnull, window); } else if ((aCommand == kNC_CompactAll)) { - rv = folder->CompactAll(nsnull, mWindow, nsnull, PR_TRUE, nsnull); + rv = folder->CompactAll(nsnull, window, nsnull, PR_TRUE, nsnull); } else if ((aCommand == kNC_EmptyTrash)) { - rv = folder->EmptyTrash(mWindow, nsnull); + rv = folder->EmptyTrash(window, nsnull); } else if ((aCommand == kNC_Rename)) { @@ -864,7 +878,7 @@ nsMsgFolderDataSource::DoCommand(nsISupportsArray/**/* aSources, nsXPIDLString name; literal->GetValue(getter_Copies(name)); - rv = folder->Rename(name.get(),mWindow); + rv = folder->Rename(name.get(), window); } } } @@ -2087,7 +2101,7 @@ nsresult nsMsgFolderDataSource::DoDeleteFromFolder( return rv; } -nsresult nsMsgFolderDataSource::DoNewFolder(nsIMsgFolder *folder, nsISupportsArray *arguments) +nsresult nsMsgFolderDataSource::DoNewFolder(nsIMsgFolder *folder, nsISupportsArray *arguments, nsIMsgWindow *window) { nsresult rv = NS_OK; nsCOMPtr literal = do_QueryElementAt(arguments, 0, &rv); @@ -2096,7 +2110,7 @@ nsresult nsMsgFolderDataSource::DoNewFolder(nsIMsgFolder *folder, nsISupportsArr nsXPIDLString name; literal->GetValue(getter_Copies(name)); - rv = folder->CreateSubfolder(name,mWindow); + rv = folder->CreateSubfolder(name, window); } return rv; diff --git a/mozilla/mailnews/base/src/nsMsgFolderDataSource.h b/mozilla/mailnews/base/src/nsMsgFolderDataSource.h index c50d9894fa9..6881eac36a6 100644 --- a/mozilla/mailnews/base/src/nsMsgFolderDataSource.h +++ b/mozilla/mailnews/base/src/nsMsgFolderDataSource.h @@ -188,8 +188,8 @@ protected: nsresult DoFolderCopyToFolder(nsIMsgFolder *dstFolder, nsISupportsArray *arguments, nsIMsgWindow *msgWindow, PRBool isMoveFolder); - nsresult DoNewFolder(nsIMsgFolder *folder, - nsISupportsArray *arguments); + nsresult DoNewFolder(nsIMsgFolder *folder, nsISupportsArray *arguments, + nsIMsgWindow *window); nsresult DoFolderAssert(nsIMsgFolder *folder, nsIRDFResource *property, nsIRDFNode *target); nsresult DoFolderUnassert(nsIMsgFolder *folder, nsIRDFResource *property, nsIRDFNode *target);