diff --git a/mozilla/mailnews/base/public/nsIMsgProgress.idl b/mozilla/mailnews/base/public/nsIMsgProgress.idl index bdad2c650fc..404bba3b166 100644 --- a/mozilla/mailnews/base/public/nsIMsgProgress.idl +++ b/mozilla/mailnews/base/public/nsIMsgProgress.idl @@ -41,6 +41,7 @@ #include "nsIWebProgressListener.idl" interface nsIDOMWindowInternal; +interface nsIMsgWindow; [scriptable, uuid(9f4dd200-3b1f-11d5-9daa-c345c9453d3c)] interface nsIMsgProgress: nsIWebProgressListener { @@ -48,7 +49,7 @@ interface nsIMsgProgress: nsIWebProgressListener { /* Open the progress dialog you can specify parameters through an xpcom object */ - void openProgressDialog(in nsIDOMWindowInternal parent, in string dialogURL, in nsISupports parameters); + void openProgressDialog(in nsIDOMWindowInternal parent, in nsIMsgWindow aMsgWindow, in string dialogURL, in nsISupports parameters); /* Close the progress dialog */ void closeProgressDialog(in boolean forceClose); @@ -64,6 +65,8 @@ interface nsIMsgProgress: nsIWebProgressListener { /* Indicated if the user asked to cancel the current process */ attribute boolean processCanceledByUser; + + attribute nsIMsgWindow msgWindow; }; diff --git a/mozilla/mailnews/base/src/nsMsgProgress.cpp b/mozilla/mailnews/base/src/nsMsgProgress.cpp index b3a0c30ff28..032b3f57f7d 100644 --- a/mozilla/mailnews/base/src/nsMsgProgress.cpp +++ b/mozilla/mailnews/base/src/nsMsgProgress.cpp @@ -68,13 +68,16 @@ nsMsgProgress::~nsMsgProgress() (void)ReleaseListeners(); } -/* void openProgressDialog (in nsIDOMWindowInternal parent, in string dialogURL, in nsISupports parameters); */ -NS_IMETHODIMP nsMsgProgress::OpenProgressDialog(nsIDOMWindowInternal *parent, +/* void openProgressDialog (in nsIDOMWindowInternal parent, in nsIMsgWindow aMsgWindow, + in string dialogURL, in nsISupports parameters); +*/ +NS_IMETHODIMP nsMsgProgress::OpenProgressDialog(nsIDOMWindowInternal *parent, nsIMsgWindow *aMsgWindow, const char *dialogURL, nsISupports *parameters) { nsresult rv = NS_ERROR_FAILURE; + m_msgWindow = aMsgWindow; if (m_dialog) return NS_ERROR_ALREADY_INITIALIZED; @@ -206,6 +209,9 @@ NS_IMETHODIMP nsMsgProgress::OnStateChange(nsIWebProgress *aWebProgress, nsIRequ } } + if (aStateFlags == nsIWebProgressListener::STATE_STOP && m_msgWindow) + m_msgWindow->StopUrls(); + return NS_OK; } @@ -331,3 +337,15 @@ NS_IMETHODIMP nsMsgProgress::CloseWindow() return NS_ERROR_NOT_IMPLEMENTED; } +NS_IMETHODIMP nsMsgProgress::SetMsgWindow(nsIMsgWindow *aMsgWindow) +{ + m_msgWindow = aMsgWindow; + return NS_OK; +} + +NS_IMETHODIMP nsMsgProgress::GetMsgWindow(nsIMsgWindow **aMsgWindow) +{ + NS_ENSURE_ARG_POINTER(aMsgWindow); + NS_IF_ADDREF(*aMsgWindow = m_msgWindow); + return NS_OK; +} diff --git a/mozilla/mailnews/base/src/nsMsgProgress.h b/mozilla/mailnews/base/src/nsMsgProgress.h index 258ad3d330f..8fa77ba1aab 100644 --- a/mozilla/mailnews/base/src/nsMsgProgress.h +++ b/mozilla/mailnews/base/src/nsMsgProgress.h @@ -43,17 +43,18 @@ #include "nsIDOMWindowInternal.h" #include "nsIMsgStatusFeedback.h" #include "nsString.h" +#include "nsIMsgWindow.h" class nsMsgProgress : public nsIMsgProgress, public nsIMsgStatusFeedback { public: - NS_DECL_ISUPPORTS + NS_DECL_ISUPPORTS NS_DECL_NSIMSGPROGRESS NS_DECL_NSIWEBPROGRESSLISTENER NS_DECL_NSIMSGSTATUSFEEDBACK - nsMsgProgress(); - virtual ~nsMsgProgress(); + nsMsgProgress(); + virtual ~nsMsgProgress(); private: nsresult ReleaseListeners(void); @@ -64,5 +65,6 @@ private: PRInt32 m_pendingStateFlags; PRInt32 m_pendingStateValue; nsCOMPtr m_dialog; + nsCOMPtr m_msgWindow; nsCOMPtr m_listenerList; }; diff --git a/mozilla/mailnews/compose/public/nsIMsgCompose.idl b/mozilla/mailnews/compose/public/nsIMsgCompose.idl index 34f0ec36bf4..4898733f23a 100644 --- a/mozilla/mailnews/compose/public/nsIMsgCompose.idl +++ b/mozilla/mailnews/compose/public/nsIMsgCompose.idl @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * David Bienvenu - bienvenu@nventure.com * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -45,6 +46,7 @@ interface nsIDOMWindowInternal; interface nsIDOMNode; interface nsIEditor; +interface nsIMsgWindow; typedef long MSG_ComposeSaveType; @@ -139,7 +141,7 @@ interface nsIMsgCompose : nsISupports { void UnregisterStateListener(in nsIMsgComposeStateListener stateListener); /* ... */ - void SendMsg(in MSG_DeliverMode deliverMode, in nsIMsgIdentity identity, in nsIMsgProgress progress); + void SendMsg(in MSG_DeliverMode deliverMode, in nsIMsgIdentity identity, in nsIMsgWindow aMsgWindow, in nsIMsgProgress progress); /* ... */ void CloseWindow(in boolean reclycleIt); diff --git a/mozilla/mailnews/compose/resources/content/MsgComposeCommands.js b/mozilla/mailnews/compose/resources/content/MsgComposeCommands.js index e1b9c9d5eb2..0faa47e56e4 100644 --- a/mozilla/mailnews/compose/resources/content/MsgComposeCommands.js +++ b/mozilla/mailnews/compose/resources/content/MsgComposeCommands.js @@ -54,6 +54,7 @@ var sNameProperty = null; in the other js file. */ var msgWindow = Components.classes["@mozilla.org/messenger/msgwindow;1"].createInstance(); +msgWindow = msgWindow.QueryInterface(Components.interfaces.nsIMsgWindow); /** @@ -1668,7 +1669,9 @@ function GenericSendMessage( msgType ) progress.registerListener(progressListener); gSendOrSaveOperationInProgress = true; } - gMsgCompose.SendMsg(msgType, getCurrentIdentity(), progress); + msgWindow.SetDOMWindow(window); + + gMsgCompose.SendMsg(msgType, getCurrentIdentity(), msgWindow, progress); } catch (ex) { dump("failed to SendMsg: " + ex + "\n"); @@ -2309,7 +2312,7 @@ function FocusOnFirstAttachment() function AttachmentElementHasItems() { - var element = document.getElementById("bucketList"); + var element = document.getElementById("attachmentBucket"); return element ? element.childNodes.length : 0; } diff --git a/mozilla/mailnews/compose/src/nsMsgCompose.cpp b/mozilla/mailnews/compose/src/nsMsgCompose.cpp index 8d45453450e..a0bfd47c26c 100644 --- a/mozilla/mailnews/compose/src/nsMsgCompose.cpp +++ b/mozilla/mailnews/compose/src/nsMsgCompose.cpp @@ -970,7 +970,7 @@ nsresult nsMsgCompose::_SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *ide return rv; } -NS_IMETHODIMP nsMsgCompose::SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *identity, nsIMsgProgress *progress) +NS_IMETHODIMP nsMsgCompose::SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *identity, nsIMsgWindow *aMsgWindow, nsIMsgProgress *progress) { nsresult rv = NS_OK; PRBool entityConversionDone = PR_FALSE; @@ -1058,7 +1058,7 @@ NS_IMETHODIMP nsMsgCompose::SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity params->SetSubject((const PRUnichar*) msgSubject); params->SetDeliveryMode(deliverMode); - mProgress->OpenProgressDialog(m_window, "chrome://messenger/content/messengercompose/sendProgress.xul", params); + mProgress->OpenProgressDialog(m_window, aMsgWindow, "chrome://messenger/content/messengercompose/sendProgress.xul", params); mProgress->GetPrompter(getter_AddRefs(prompt)); } } @@ -2795,10 +2795,6 @@ nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aS nsCOMPtr progress; compose->GetProgress(getter_AddRefs(progress)); - //Unregister ourself from msg compose progress - if (progress) - progress->UnregisterListener(this); - if (NS_SUCCEEDED(aStatus)) { #ifdef NS_DEBUG @@ -2821,7 +2817,10 @@ nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aS { compose->NotifyStateListeners(eComposeProcessDone, NS_OK); if (progress) + { + progress->UnregisterListener(this); progress->CloseProgressDialog(PR_FALSE); + } compose->CloseWindow(PR_TRUE); } } @@ -2830,7 +2829,10 @@ nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aS { compose->NotifyStateListeners(eComposeProcessDone, NS_OK); if (progress) + { + progress->UnregisterListener(this); progress->CloseProgressDialog(PR_FALSE); + } compose->CloseWindow(PR_TRUE); // if we fail on the simple GetFcc call, close the window to be safe and avoid // windows hanging around to prevent the app from exiting. } @@ -2848,7 +2850,10 @@ nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aS #endif compose->NotifyStateListeners(eComposeProcessDone,aStatus); if (progress) + { progress->CloseProgressDialog(PR_TRUE); + progress->UnregisterListener(this); + } } nsCOMPtr externalListener; @@ -2915,7 +2920,12 @@ nsMsgComposeSendListener::OnStopCopy(nsresult aStatus) nsCOMPtr progress; compose->GetProgress(getter_AddRefs(progress)); if (progress) + { + //Unregister ourself from msg compose progress + progress->UnregisterListener(this); progress->CloseProgressDialog(NS_FAILED(aStatus)); + } + compose->NotifyStateListeners(eComposeProcessDone,aStatus); if (NS_SUCCEEDED(aStatus)) diff --git a/mozilla/mailnews/compose/src/nsMsgCopy.cpp b/mozilla/mailnews/compose/src/nsMsgCopy.cpp index c0a6d2b241b..4250837771c 100644 --- a/mozilla/mailnews/compose/src/nsMsgCopy.cpp +++ b/mozilla/mailnews/compose/src/nsMsgCopy.cpp @@ -59,6 +59,7 @@ #include "nsIMsgImapMailFolder.h" #include "nsIEventQueueService.h" #include "nsMsgSimulateError.h" +#include "nsIMsgWindow.h" static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID); static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); @@ -238,10 +239,20 @@ nsMsgCopy::StartCopyOperation(nsIMsgIdentity *aUserIdentity, return NS_MSG_COULDNT_OPEN_FCC_FOLDER; } + nsCOMPtr msgWindow; + + if (aMsgSendObj) + { + nsCOMPtr progress; + aMsgSendObj->GetProgress(getter_AddRefs(progress)); + if (progress) + progress->GetMsgWindow(getter_AddRefs(msgWindow)); + } + mMode = aMode; if (!waitForUrl) { - rv = DoCopy(aFileSpec, dstFolder, aMsgToReplace, isDraft, nsnull, aMsgSendObj); + rv = DoCopy(aFileSpec, dstFolder, aMsgToReplace, isDraft, msgWindow, aMsgSendObj); } else { diff --git a/mozilla/mailnews/compose/src/nsMsgSend.cpp b/mozilla/mailnews/compose/src/nsMsgSend.cpp index 80d92ac00f9..fa6755f480b 100644 --- a/mozilla/mailnews/compose/src/nsMsgSend.cpp +++ b/mozilla/mailnews/compose/src/nsMsgSend.cpp @@ -4681,7 +4681,6 @@ nsMsgComposeAndSend::StartMessageCopyOperation(nsIFileSpec *aFileSpec, // default to the default "Flagged" folder choices // nsresult rv; - if (dest_uri && *dest_uri) m_folderName = dest_uri; else diff --git a/mozilla/mailnews/mapi/mapihook/src/msgMapiHook.cpp b/mozilla/mailnews/mapi/mapihook/src/msgMapiHook.cpp index cbce2d2c9a7..818d72ee0dc 100644 --- a/mozilla/mailnews/mapi/mapihook/src/msgMapiHook.cpp +++ b/mozilla/mailnews/mapi/mapihook/src/msgMapiHook.cpp @@ -398,7 +398,7 @@ nsresult nsMapiHook::BlindSendMail (unsigned long aSession, nsIMsgCompFields * a rv = pMsgCompose->Initialize(hiddenWindow, pMsgComposeParams) ; if (NS_FAILED(rv)) return rv ; - pMsgCompose->SendMsg(nsIMsgSend::nsMsgDeliverNow, pMsgId, nsnull) ; + pMsgCompose->SendMsg(nsIMsgSend::nsMsgDeliverNow, pMsgId, nsnull, nsnull) ; if (NS_FAILED(rv)) return rv ; // assign to interface pointer from nsCOMPtr to facilitate typecast below