mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-26 06:11:37 +00:00
add support for identity-specific HTML compose and signatures
This commit is contained in:
parent
49c8c525b5
commit
0fc7315583
@ -79,9 +79,10 @@ interface nsIMsgCompose : nsISupports {
|
||||
|
||||
/* ... */
|
||||
void Initialize(in nsIDOMWindow aWindow, in wstring originalMsgURI,
|
||||
in MSG_ComposeType type, in MSG_ComposeFormat format,
|
||||
in nsIMsgCompFields compFields,
|
||||
in nsISupports object); /*object is temporary*/
|
||||
in MSG_ComposeType type, in MSG_ComposeFormat format,
|
||||
in nsIMsgCompFields compFields,
|
||||
in nsISupports object, /*object is temporary*/
|
||||
in nsIMsgIdentity identity);
|
||||
|
||||
/* ... */
|
||||
void SetDocumentCharset(in wstring charset);
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "nsISupports.idl"
|
||||
#include "domstubs.idl"
|
||||
#include "nsIMsgCompose.idl"
|
||||
#include "nsIMsgIdentity.idl"
|
||||
|
||||
%{ C++
|
||||
#include "nsIDOMWindow.h"
|
||||
@ -42,7 +43,11 @@ interface nsIMsgComposeService : nsISupports {
|
||||
void OpenComposeWindowWithCompFields(in wstring msgComposeWindowURL, in MSG_ComposeFormat format, in nsIMsgCompFields compFields);
|
||||
|
||||
/* ... */
|
||||
nsIMsgCompose InitCompose(in nsIDOMWindow aWindow, in wstring originalMsgURI, in long type, in long format, in long compFieldsAddr);
|
||||
nsIMsgCompose InitCompose(in nsIDOMWindow aWindow,
|
||||
in wstring originalMsgURI,
|
||||
in long type, in long format,
|
||||
in long compFieldsAddr,
|
||||
in nsIMsgIdentity identity);
|
||||
|
||||
/* ... */
|
||||
void DisposeCompose(in nsIMsgCompose compose, in boolean closeWindow);
|
||||
|
@ -135,36 +135,23 @@ function ComposeStartup()
|
||||
identitySelect.remove(0);
|
||||
}
|
||||
|
||||
// autoselect the first identity. soon, we'll be smarter about this
|
||||
// and select the one that is appropriate. bug #10235
|
||||
try {
|
||||
// find args.preselectid and choose it.
|
||||
// dump("args.preselectid = " + args.preselectid + "\n");
|
||||
options = identitySelect.options
|
||||
var preselectindex = 0;
|
||||
for (i=0;i<options.length;i++) {
|
||||
// dump(options[i].value + "\n");
|
||||
if (options[i].value == args.preselectid) {
|
||||
preselectindex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
identitySelect.selectedIndex = preselectindex;
|
||||
}
|
||||
catch (ex) {
|
||||
// dump("failed to preselect an identity\n");
|
||||
if (identitySelect && identitySelect.options && (identitySelect.options.length >0)) {
|
||||
// just pick the first one
|
||||
identitySelect.selectedIndex = 0;
|
||||
}
|
||||
}
|
||||
if (args.preselectid)
|
||||
identitySelect.value = args.preselectid;
|
||||
else
|
||||
identitySelect.selectedIndex = 0;
|
||||
|
||||
// fill in Recipient type combobox
|
||||
FillRecipientTypeCombobox();
|
||||
|
||||
if (msgComposeService)
|
||||
{
|
||||
msgCompose = msgComposeService.InitCompose(window, args.originalMsg, args.type, args.format, args.fieldsAddr);
|
||||
// this is frustrating, we need to convert the preselect identity key
|
||||
// back to an identity, to pass to initcompose
|
||||
// it would be nice if there was some way to actually send the
|
||||
// identity through "args"
|
||||
var identity = getIdentityForKey(args.preselectid);
|
||||
|
||||
msgCompose = msgComposeService.InitCompose(window, args.originalMsg, args.type, args.format, args.fieldsAddr, identity);
|
||||
if (msgCompose)
|
||||
{
|
||||
//Creating a Editor Shell
|
||||
@ -511,6 +498,14 @@ function getCurrentIdentity()
|
||||
return identity;
|
||||
}
|
||||
|
||||
function getIdentityForKey(key)
|
||||
{
|
||||
var msgService = Components.classes['component://netscape/messenger/services/session'].getService(Components.interfaces.nsIMsgMailSession);
|
||||
var accountManager = msgService.accountManager;
|
||||
|
||||
return accountManager.getIdentity(key);
|
||||
}
|
||||
|
||||
function SetComposeWindowTitle(event)
|
||||
{
|
||||
/* dump("event = " + event + "\n"); */
|
||||
|
@ -83,18 +83,6 @@ nsMsgCompose::nsMsgCompose()
|
||||
}
|
||||
|
||||
m_composeHTML = PR_FALSE;
|
||||
// temporary - m_composeHTML from the "current" identity
|
||||
// eventually we should know this when we open the compose window
|
||||
// -alecf
|
||||
nsresult rv;
|
||||
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIMsgIdentity> identity;
|
||||
rv = mailSession->GetCurrentIdentity(getter_AddRefs(identity));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
rv = identity->GetComposeHtml(&m_composeHTML);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -141,11 +129,18 @@ nsMsgCompose::LoadAsQuote(nsString aTextToLoad)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsMsgCompose::Initialize(nsIDOMWindow *aWindow, const PRUnichar *originalMsgURI,
|
||||
MSG_ComposeType type, MSG_ComposeFormat format, nsIMsgCompFields *compFields, nsISupports *object)
|
||||
nsresult nsMsgCompose::Initialize(nsIDOMWindow *aWindow,
|
||||
const PRUnichar *originalMsgURI,
|
||||
MSG_ComposeType type,
|
||||
MSG_ComposeFormat format,
|
||||
nsIMsgCompFields *compFields,
|
||||
nsISupports *object,
|
||||
nsIMsgIdentity *identity)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
m_identity = identity;
|
||||
|
||||
if (aWindow)
|
||||
{
|
||||
m_window = aWindow;
|
||||
@ -172,10 +167,13 @@ nsresult nsMsgCompose::Initialize(nsIDOMWindow *aWindow, const PRUnichar *origin
|
||||
{
|
||||
case MSGCOMP_FORMAT_HTML : m_composeHTML = PR_TRUE; break;
|
||||
case MSGCOMP_FORMAT_PlainText : m_composeHTML = PR_FALSE; break;
|
||||
default : /* m_composeHTML initialized in ctor */ break;
|
||||
default :
|
||||
/* ask the identity which compose to use */
|
||||
if (m_identity) m_identity->GetComposeHtml(&m_composeHTML);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
CreateMessage(originalMsgURI, type, format, compFields, object); //object is temporary
|
||||
|
||||
return rv;
|
||||
@ -517,7 +515,7 @@ nsresult nsMsgCompose::SetEditor(nsIEditorShell * aEditor)
|
||||
else if (bodyInCompFields)
|
||||
return BuildBodyMessage();
|
||||
else
|
||||
return ProcessSignature(nsnull);
|
||||
return ProcessSignature(nsnull, m_identity);
|
||||
}
|
||||
|
||||
nsresult nsMsgCompose::GetDomWindow(nsIDOMWindow * *aDomWindow)
|
||||
@ -548,11 +546,14 @@ nsresult nsMsgCompose::GetWrapLength(PRInt32 *aWrapLength)
|
||||
NS_WITH_SERVICE(nsIPref, prefs, kPrefCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
return prefs->GetIntPref("mail.wraplength", aWrapLength);
|
||||
return prefs->GetIntPref("mailnews.wraplength", aWrapLength);
|
||||
}
|
||||
|
||||
nsresult nsMsgCompose::CreateMessage(const PRUnichar * originalMsgURI, MSG_ComposeType type, MSG_ComposeFormat format,
|
||||
nsIMsgCompFields * compFields, nsISupports * object)
|
||||
nsresult nsMsgCompose::CreateMessage(const PRUnichar * originalMsgURI,
|
||||
MSG_ComposeType type,
|
||||
MSG_ComposeFormat format,
|
||||
nsIMsgCompFields * compFields,
|
||||
nsISupports * object)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
@ -681,10 +682,13 @@ QuotingOutputStreamListener::~QuotingOutputStreamListener()
|
||||
NS_RELEASE(mComposeObj);
|
||||
}
|
||||
|
||||
QuotingOutputStreamListener::QuotingOutputStreamListener(const PRUnichar * originalMsgURI, PRBool quoteHeaders)
|
||||
QuotingOutputStreamListener::QuotingOutputStreamListener(const PRUnichar * originalMsgURI,
|
||||
PRBool quoteHeaders,
|
||||
nsIMsgIdentity *identity)
|
||||
{
|
||||
mComposeObj = nsnull;
|
||||
mQuoteHeaders = quoteHeaders;
|
||||
mIdentity = identity;
|
||||
|
||||
nsCOMPtr<nsIMessage> originalMsg = getter_AddRefs(GetIMessageFromURI(originalMsgURI));
|
||||
if (originalMsg && !quoteHeaders)
|
||||
@ -881,7 +885,7 @@ NS_IMETHODIMP QuotingOutputStreamListener::OnStopRequest(nsIChannel * /* aChanne
|
||||
goto done;
|
||||
}
|
||||
tempFile.write(nsAutoCString(mMsgBody), mMsgBody.Length());
|
||||
mComposeObj->ProcessSignature(&tempFile);
|
||||
mComposeObj->ProcessSignature(&tempFile, mIdentity);
|
||||
tempFile.close();
|
||||
|
||||
// Now load the URL...
|
||||
@ -967,11 +971,14 @@ nsMsgCompose::QuoteOriginalMessage(const PRUnichar *originalMsgURI, PRInt32 what
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Create the consumer output stream.. this will receive all the HTML from libmime
|
||||
mQuoteStreamListener = new QuotingOutputStreamListener(originalMsgURI, what != 1);
|
||||
mQuoteStreamListener =
|
||||
new QuotingOutputStreamListener(originalMsgURI, what != 1, m_identity);
|
||||
|
||||
if (!mQuoteStreamListener)
|
||||
{
|
||||
#ifdef NS_DEBUG
|
||||
printf("Failed to create mQuoteStreamListener\n");
|
||||
#endif
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
NS_ADDREF(mQuoteStreamListener);
|
||||
@ -1292,7 +1299,7 @@ nsMsgDocumentStateListener::NotifyDocumentStateChanged(PRBool nowDirty)
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsMsgCompose::ConvertHTMLToText(char *aSigFile, nsString &aSigData)
|
||||
nsMsgCompose::ConvertHTMLToText(nsFileSpec& aSigFile, nsString &aSigData)
|
||||
{
|
||||
nsresult rv;
|
||||
nsString origBuf;
|
||||
@ -1307,7 +1314,7 @@ nsMsgCompose::ConvertHTMLToText(char *aSigFile, nsString &aSigData)
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsMsgCompose::ConvertTextToHTML(char *aSigFile, nsString &aSigData)
|
||||
nsMsgCompose::ConvertTextToHTML(nsFileSpec& aSigFile, nsString &aSigData)
|
||||
{
|
||||
nsresult rv;
|
||||
nsString origBuf;
|
||||
@ -1323,9 +1330,8 @@ nsMsgCompose::ConvertTextToHTML(char *aSigFile, nsString &aSigData)
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsMsgCompose::LoadDataFromFile(char *sigFilePath, nsString &sigData)
|
||||
nsMsgCompose::LoadDataFromFile(nsFileSpec& fSpec, nsString &sigData)
|
||||
{
|
||||
nsFileSpec fSpec(sigFilePath);
|
||||
PRInt32 readSize;
|
||||
char *readBuf;
|
||||
|
||||
@ -1339,7 +1345,7 @@ nsMsgCompose::LoadDataFromFile(char *sigFilePath, nsString &sigData)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
nsCRT::memset(readBuf, 0, readSize + 1);
|
||||
|
||||
tempFile.read(readBuf, readSize);
|
||||
readSize = tempFile.read(readBuf, readSize);
|
||||
tempFile.close();
|
||||
|
||||
sigData = readBuf;
|
||||
@ -1370,7 +1376,8 @@ nsMsgCompose::BuildQuotedMessageAndSignature(void)
|
||||
// as a temp file and do a LoadURL operation.
|
||||
//
|
||||
nsresult
|
||||
nsMsgCompose::ProcessSignature(nsOutputFileStream *aAppendFileStream)
|
||||
nsMsgCompose::ProcessSignature(nsOutputFileStream *aAppendFileStream,
|
||||
nsIMsgIdentity *identity)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
@ -1392,32 +1399,30 @@ nsMsgCompose::ProcessSignature(nsOutputFileStream *aAppendFileStream)
|
||||
// .html, we assume its HTML, otherwise, we assume it is plain text
|
||||
//
|
||||
nsString urlStr;
|
||||
char *sigFilePath = nsnull;
|
||||
nsCOMPtr<nsIFileSpec> sigFileSpec;
|
||||
PRBool useSigFile = PR_FALSE;
|
||||
PRBool htmlSig = PR_FALSE;
|
||||
nsString sigData = "";
|
||||
|
||||
NS_WITH_SERVICE(nsIPref, prefs, kPrefCID, &rv);
|
||||
if (NS_SUCCEEDED(rv) && prefs)
|
||||
if (identity)
|
||||
{
|
||||
rv = prefs->GetBoolPref("mail.use_signature_file", &useSigFile);
|
||||
rv = identity->GetAttachSignature(&useSigFile);
|
||||
if (NS_SUCCEEDED(rv) && useSigFile)
|
||||
{
|
||||
rv = prefs->CopyCharPref("mail.signature_file", &sigFilePath);
|
||||
identity->GetSignature(getter_AddRefs(sigFileSpec));
|
||||
}
|
||||
}
|
||||
|
||||
// Setup the urlStr to load to be the signature if the user wants it
|
||||
// that way...
|
||||
//
|
||||
if ((useSigFile) && (sigFilePath))
|
||||
if ((useSigFile) && (sigFileSpec))
|
||||
{
|
||||
nsFileSpec testSpec(sigFilePath);
|
||||
nsFileSpec testSpec;
|
||||
sigFileSpec->GetFileSpec(&testSpec);
|
||||
|
||||
if (!testSpec.Exists())
|
||||
{
|
||||
PR_FREEIF(sigFilePath);
|
||||
sigFilePath = nsnull;
|
||||
if (m_composeHTML)
|
||||
urlStr = "chrome://messengercompose/content/defaultHtmlBody.html";
|
||||
else
|
||||
@ -1428,7 +1433,8 @@ nsMsgCompose::ProcessSignature(nsOutputFileStream *aAppendFileStream)
|
||||
// Once we get here, we need to figure out if we have the correct file
|
||||
// type for the editor.
|
||||
//
|
||||
char *fileExt = nsMsgGetExtensionFromFileURL(nsString(sigFilePath));
|
||||
nsFileURL sigFilePath(testSpec);
|
||||
char *fileExt = nsMsgGetExtensionFromFileURL(nsString(sigFilePath));
|
||||
|
||||
if ( (fileExt) && (*fileExt) )
|
||||
{
|
||||
@ -1438,16 +1444,17 @@ nsMsgCompose::ProcessSignature(nsOutputFileStream *aAppendFileStream)
|
||||
|
||||
// is this a text sig with an HTML editor?
|
||||
if ( (m_composeHTML) && (!htmlSig) )
|
||||
ConvertTextToHTML(sigFilePath, sigData);
|
||||
ConvertTextToHTML(testSpec, sigData);
|
||||
// is this a HTML sig with a text window?
|
||||
else if ( (!m_composeHTML) && (htmlSig) )
|
||||
ConvertHTMLToText(sigFilePath, sigData);
|
||||
ConvertHTMLToText(testSpec, sigData);
|
||||
else // We have a match...
|
||||
{
|
||||
if (!aAppendFileStream) // Just load this URL
|
||||
if (!aAppendFileStream) // Just load this URL {
|
||||
urlStr = nsMsgPlatformFileToURL(testSpec);
|
||||
else
|
||||
LoadDataFromFile(sigFilePath, sigData); // Get the data!
|
||||
LoadDataFromFile(testSpec, sigData); // Get the data!
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1459,8 +1466,6 @@ nsMsgCompose::ProcessSignature(nsOutputFileStream *aAppendFileStream)
|
||||
urlStr = "chrome://messengercompose/content/defaultTextBody.txt";
|
||||
}
|
||||
|
||||
PR_FREEIF(sigFilePath);
|
||||
|
||||
// This is the "load signature alone" operation!
|
||||
char *htmlBreak = "<BR>";
|
||||
char *dashes = "--";
|
||||
@ -1494,7 +1499,8 @@ nsMsgCompose::ProcessSignature(nsOutputFileStream *aAppendFileStream)
|
||||
|
||||
tempFile.write(nsAutoCString(sigData), sigData.Length());
|
||||
tempFile.close();
|
||||
urlStr = mSigFileSpec->GetNativePathCString();
|
||||
nsFileURL fileUrl(*mSigFileSpec);
|
||||
urlStr = fileUrl;
|
||||
m_editor->LoadUrl(urlStr.GetUnicode());
|
||||
}
|
||||
}
|
||||
|
@ -57,8 +57,8 @@ class nsMsgCompose : public nsIMsgCompose
|
||||
PRBool QuotingToFollow(void);
|
||||
nsresult SetQuotingToFollow(PRBool aVal);
|
||||
nsresult LoadAsQuote(nsString aTextToLoad);
|
||||
nsresult ConvertHTMLToText(char *aSigFile, nsString &aSigData);
|
||||
nsresult ConvertTextToHTML(char *aSigFile, nsString &aSigData);
|
||||
nsresult ConvertHTMLToText(nsFileSpec& aSigFile, nsString &aSigData);
|
||||
nsresult ConvertTextToHTML(nsFileSpec& aSigFile, nsString &aSigData);
|
||||
nsresult BuildBodyMessage();
|
||||
|
||||
nsString mQuoteURI;
|
||||
@ -67,10 +67,11 @@ class nsMsgCompose : public nsIMsgCompose
|
||||
|
||||
PRInt32 mWhatHolder;
|
||||
|
||||
nsresult ProcessSignature(nsOutputFileStream *aAppendFileStream); // for setting up the users compose window environment
|
||||
nsresult ProcessSignature(nsOutputFileStream *aAppendFileStream,
|
||||
nsIMsgIdentity *identity); // for setting up the users compose window environment
|
||||
nsresult BuildQuotedMessageAndSignature(void); // for setting up the users compose window environment
|
||||
nsresult ShowWindow(PRBool show);
|
||||
nsresult LoadDataFromFile(char *sigFilePath, nsString &sigData);
|
||||
nsresult LoadDataFromFile(nsFileSpec& fSpec, nsString &sigData);
|
||||
|
||||
|
||||
private:
|
||||
@ -84,6 +85,7 @@ class nsMsgCompose : public nsIMsgCompose
|
||||
nsIWebShell *m_webShell;
|
||||
nsIWebShellWindow *m_webShellWin;
|
||||
nsMsgCompFields *m_compFields;
|
||||
nsCOMPtr<nsIMsgIdentity> m_identity;
|
||||
PRBool m_composeHTML;
|
||||
QuotingOutputStreamListener *mQuoteStreamListener;
|
||||
nsCOMPtr<nsIOutputStream> mBaseStream;
|
||||
@ -104,7 +106,9 @@ class nsMsgCompose : public nsIMsgCompose
|
||||
class QuotingOutputStreamListener : public nsIStreamListener
|
||||
{
|
||||
public:
|
||||
QuotingOutputStreamListener(const PRUnichar *originalMsgURI, PRBool quoteHeaders);
|
||||
QuotingOutputStreamListener(const PRUnichar *originalMsgURI,
|
||||
PRBool quoteHeaders,
|
||||
nsIMsgIdentity *identity);
|
||||
virtual ~QuotingOutputStreamListener(void);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
@ -120,6 +124,7 @@ private:
|
||||
nsString mMsgBody;
|
||||
PRBool mQuoteHeaders;
|
||||
nsCOMPtr<nsIMimeHeaders> mHeaders;
|
||||
nsCOMPtr<nsIMsgIdentity> mIdentity;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -183,7 +183,13 @@ nsresult nsMsgComposeService::OpenComposeWindowWithCompFields(const PRUnichar *m
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsMsgComposeService::InitCompose(nsIDOMWindow *aWindow, const PRUnichar *originalMsgURI, PRInt32 type, PRInt32 format, PRInt32 compFieldsAddr, nsIMsgCompose **_retval)
|
||||
nsresult nsMsgComposeService::InitCompose(nsIDOMWindow *aWindow,
|
||||
const PRUnichar *originalMsgURI,
|
||||
PRInt32 type,
|
||||
PRInt32 format,
|
||||
PRInt32 compFieldsAddr,
|
||||
nsIMsgIdentity *identity,
|
||||
nsIMsgCompose **_retval)
|
||||
{
|
||||
nsresult rv;
|
||||
nsIMsgCompose * msgCompose = nsnull;
|
||||
@ -210,7 +216,8 @@ nsresult nsMsgComposeService::InitCompose(nsIDOMWindow *aWindow, const PRUnichar
|
||||
// ducarroz: I am not quiet sure than dynamic_cast is supported on all platforms/compilers!
|
||||
// nsIMsgCompFields* compFields = dynamic_cast<nsIMsgCompFields *>((nsIMsgCompFields *)compFieldsAddr);
|
||||
nsIMsgCompFields* compFields = (nsIMsgCompFields *)compFieldsAddr;
|
||||
msgCompose->Initialize(aWindow, originalMsgURI, type, format, compFields, object);
|
||||
msgCompose->Initialize(aWindow, originalMsgURI, type, format,
|
||||
compFields, object, identity);
|
||||
NS_IF_RELEASE(compFields);
|
||||
m_msgQueue->AppendElement(msgCompose);
|
||||
*_retval = msgCompose;
|
||||
|
@ -28,24 +28,8 @@ public:
|
||||
|
||||
/* this macro defines QueryInterface, AddRef and Release for this class */
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
/* void OpenComposeWindow (in wstring msgComposeWindowURL, in wstring originalMsgURI, in long type, in long format); */
|
||||
NS_IMETHOD OpenComposeWindow(const PRUnichar *msgComposeWindowURL, const PRUnichar *originalMsgURI, PRInt32 type, PRInt32 format, nsISupports *object,
|
||||
nsIMsgIdentity *identity);
|
||||
|
||||
/* void OpenComposeWindowWithValues (in wstring msgComposeWindowURL, in MSG_ComposeFormat format, in wstring to, in wstring cc, in wstring bcc, in wstring newsgroups, in wstring subject, in wstring body); */
|
||||
NS_IMETHOD OpenComposeWindowWithValues(const PRUnichar *msgComposeWindowURL, MSG_ComposeFormat format, const PRUnichar *to, const PRUnichar *cc, const PRUnichar *bcc, const PRUnichar *newsgroups,
|
||||
const PRUnichar *subject, const PRUnichar *body);
|
||||
|
||||
/* void OpenComposeWindowWithCompFields (in wstring msgComposeWindowURL, in MSG_ComposeFormat format, in nsIMsgCompFields compFields); */
|
||||
NS_IMETHOD OpenComposeWindowWithCompFields(const PRUnichar *msgComposeWindowURL, MSG_ComposeFormat format, nsIMsgCompFields *compFields);
|
||||
|
||||
/* nsIMsgCompose InitCompose (in nsIDOMWindow aWindow, in wstring originalMsgURI, in long type, in long format, in long compFieldsAddr); */
|
||||
NS_IMETHOD InitCompose(nsIDOMWindow *aWindow, const PRUnichar *originalMsgURI, PRInt32 type, PRInt32 format, PRInt32 compFieldsAddr, nsIMsgCompose **_retval);
|
||||
|
||||
/* void DisposeCompose (in nsIMsgCompose compose, in boolean closeWindow); */
|
||||
NS_IMETHOD DisposeCompose(nsIMsgCompose *compose, PRBool closeWindow);
|
||||
|
||||
NS_DECL_NSIMSGCOMPOSESERVICE
|
||||
|
||||
private:
|
||||
nsCOMPtr<nsISupportsArray> m_msgQueue;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user