mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-12 14:37:50 +00:00
630 lines
20 KiB
C++
630 lines
20 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "template.h"
|
|
#include "msgcom.h"
|
|
#include "wfemsg.h"
|
|
#include "compstd.h"
|
|
#include "compbar.h"
|
|
#include "compmisc.h"
|
|
#include "compfrm.h"
|
|
#include "edt.h"
|
|
#include "edview.h"
|
|
#include "intl_csi.h"
|
|
#include "prefapi.h"
|
|
#include "apiaddr.h"
|
|
#include "postal.h"
|
|
#include "mailmisc.h"
|
|
#include "dlghtmrp.h"
|
|
#include "dlghtmmq.h"
|
|
|
|
extern "C" {
|
|
#include "xpgetstr.h"
|
|
extern int MK_MSG_MSG_COMPOSITION;
|
|
};
|
|
|
|
|
|
extern "C" int FE_LoadExchangeInfo(MWContext * context);
|
|
extern "C" MSG_Pane * DoAltMailComposition(MWContext *pOldContext, MSG_CompositionFields* fields);
|
|
|
|
int WFE_InsertMessage(void *closure, const char * data);
|
|
|
|
extern "C" void FE_DestroyMailCompositionContext(MWContext *pContext)
|
|
{
|
|
CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
|
|
if ( pFrame ) {
|
|
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
|
|
if (pCompose->UseHtml())
|
|
EDT_SetDirtyFlag(pContext,FALSE);
|
|
else
|
|
pCompose->GetEditorParent()->m_bModified = FALSE;
|
|
pCompose->SetMsgPane(NULL);
|
|
if(pCompose) {
|
|
pCompose->PostMessage ( WM_CLOSE );
|
|
}
|
|
}
|
|
}
|
|
|
|
extern "C" int FE_GetMessageBody(MSG_Pane *pPane, char **ppBody, uint32 *ulBodySize, MSG_FontCode **ppFontChanges)
|
|
{
|
|
ASSERT(pPane);
|
|
CComposeFrame * pCompose = (CComposeFrame *) MSG_GetFEData(pPane);
|
|
ASSERT(pCompose);
|
|
MWContext *pContext = pCompose->GetMainContext()->GetContext();
|
|
ASSERT(pContext);
|
|
|
|
if (pCompose->UseHtml())
|
|
{
|
|
MSG_SetHTMLMarkup(pPane,TRUE);
|
|
*ppBody = NULL;
|
|
*ulBodySize = 0;
|
|
|
|
if ( pCompose )
|
|
{
|
|
// Danger!!! This is not legal!!! We must change this to be a real XP_HUGE for win16.
|
|
// see bug #39756
|
|
EDT_SaveToBuffer(pContext,(XP_HUGE_CHAR_PTR*) ppBody);
|
|
|
|
if ( !*ppBody)
|
|
return 1;
|
|
else {
|
|
size_t lsize;
|
|
lsize = strlen(*ppBody);
|
|
*ulBodySize = lsize;
|
|
return lsize;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// new compose window code
|
|
size_t lsize = 0;
|
|
#ifdef XP_WIN16
|
|
unsigned int textLength; // Cannot use uint32/int32; the compiler won't
|
|
// generate the correct code. Use unsigned int, at least
|
|
// we could get over with the 32767 boundary.
|
|
|
|
// Although 16-bit CEdit::GetWindowTextLength returns int casting it to
|
|
// unsigned int we can still get the correct text length if the text length is
|
|
// greater than 32767
|
|
textLength = (unsigned int) pCompose->GetEditor()->GetWindowTextLength();
|
|
#else
|
|
int32 textLength;
|
|
textLength = pCompose->GetEditor()->GetWindowTextLength();
|
|
#endif
|
|
if ( textLength >= 0 )
|
|
{
|
|
char * tmp = (char *)XP_CALLOC(1,textLength+1);
|
|
ASSERT ( tmp );
|
|
pCompose->GetEditor()->GetWindowText(tmp, textLength+1);
|
|
if (pCompose->GetWrapLongLines())
|
|
{
|
|
int32 lineWidth = 72;
|
|
|
|
PREF_GetIntPref("mailnews.wraplength", &lineWidth);
|
|
if (lineWidth < 10) lineWidth = 10;
|
|
if (lineWidth > 30000) lineWidth = 30000;
|
|
|
|
*ppBody = (char *) XP_WordWrap(INTL_DefaultWinCharSetID(pContext),
|
|
(unsigned char *)tmp, lineWidth, 1 /* look for '>' */);
|
|
free(tmp);
|
|
}
|
|
else
|
|
{
|
|
/* Else, don't wrap it at all. */
|
|
*ppBody = tmp;
|
|
}
|
|
if (ppBody && *ppBody)
|
|
for (const char *ptr = *ppBody; ptr && *ptr; ptr++)
|
|
lsize++;
|
|
}
|
|
*ulBodySize = lsize;
|
|
return 0;
|
|
}
|
|
|
|
//
|
|
// Create a composition window
|
|
//
|
|
extern "C" void FE_InitializeMailCompositionContext(MSG_Pane *pComposePane,
|
|
const char *pFrom,
|
|
const char *pReplyTo,
|
|
const char *pTo,
|
|
const char *pCc,
|
|
const char *pBcc,
|
|
const char *pFcc,
|
|
const char *pNewsgroups,
|
|
const char *pFollowupTo,
|
|
const char *pSubject,
|
|
const char *pAttachment)
|
|
{
|
|
|
|
MSG_SetCompHeader(pComposePane, MSG_TO_HEADER_MASK, pTo);
|
|
MSG_SetCompHeader(pComposePane, MSG_FROM_HEADER_MASK, pFrom);
|
|
MSG_SetCompHeader(pComposePane, MSG_SUBJECT_HEADER_MASK, pSubject);
|
|
MSG_SetCompHeader(pComposePane, MSG_CC_HEADER_MASK, pCc);
|
|
MSG_SetCompHeader(pComposePane, MSG_BCC_HEADER_MASK, pBcc);
|
|
MSG_SetCompHeader(pComposePane, MSG_FCC_HEADER_MASK, pFcc);
|
|
MSG_SetCompHeader(pComposePane, MSG_REPLY_TO_HEADER_MASK, pReplyTo);
|
|
MSG_SetCompHeader(pComposePane, MSG_FOLLOWUP_TO_HEADER_MASK, pFollowupTo);
|
|
MSG_SetCompHeader(pComposePane, MSG_NEWSGROUPS_HEADER_MASK, pNewsgroups);
|
|
}
|
|
|
|
MWContext * g_NastyContextSavingHack = NULL;
|
|
|
|
// create a new xpContext with type == MWContextMessageComposition
|
|
extern "C" MSG_Pane *FE_CreateCompositionPane(MWContext *pOldContext,
|
|
MSG_CompositionFields* fields,
|
|
const char *pInitialText,
|
|
MSG_EditorType editorType)
|
|
{
|
|
if(!theApp.m_hPostalLib) {
|
|
CGenericDoc * pDocument;
|
|
|
|
// Don't allow a compose window to be created if the user hasn't
|
|
// specified an email address
|
|
const char *real_addr = FE_UsersMailAddress();
|
|
if (MISC_ValidateReturnAddress(pOldContext, real_addr) < 0)
|
|
return NULL;
|
|
|
|
XP_Bool htmlCompose;
|
|
PREF_GetBoolPref("mail.html_compose",&htmlCompose);
|
|
|
|
if (editorType == MSG_HTML_EDITOR)
|
|
htmlCompose = TRUE;
|
|
else if (editorType == MSG_PLAINTEXT_EDITOR)
|
|
htmlCompose = FALSE;
|
|
|
|
INTL_CharSetInfo csi = LO_GetDocumentCharacterSetInfo(pOldContext);
|
|
int16 win_csid = INTL_GetCSIWinCSID(csi);
|
|
if (!MSG_GetForcePlainText(fields) && htmlCompose)
|
|
pDocument = (CGenericDoc*)theApp.m_ComposeTemplate->OpenDocumentFile(NULL, win_csid);
|
|
else
|
|
pDocument = (CGenericDoc*)theApp.m_TextComposeTemplate->OpenDocumentFile(NULL, win_csid);
|
|
|
|
g_NastyContextSavingHack = pOldContext;
|
|
|
|
if ( pDocument )
|
|
{
|
|
CWinCX * pContext = (CWinCX*) pDocument->GetContext();
|
|
if ( pContext ) {
|
|
|
|
MSG_CompositionPaneCallbacks Callbacks;
|
|
Callbacks.CreateRecipientsDialog= CreateRecipientsDialog;
|
|
Callbacks.CreateAskHTMLDialog= CreateAskHTMLDialog;
|
|
|
|
MWContext *context = pContext->GetContext();
|
|
CComposeFrame *pCompose = (CComposeFrame *) pContext->GetFrame()->GetFrameWnd();
|
|
pCompose->SetComposeStuff(pOldContext,fields); // squirl away stuff for post-create
|
|
// This needs to be set TRUE if using the old non-HTML text frame
|
|
// to prevent dropping dragged URLs
|
|
pContext->m_bDragging = !pCompose->UseHtml();
|
|
if (!pCompose->UseHtml())
|
|
{
|
|
pCompose->SetMsgPane(MSG_CreateCompositionPane(
|
|
pContext->GetContext(),
|
|
pOldContext, g_MsgPrefs.m_pMsgPrefs, fields,
|
|
WFE_MSGGetMaster()));
|
|
}
|
|
else
|
|
{
|
|
pCompose->SetMsgPane(MSG_CreateCompositionPaneNoInit(
|
|
pContext->GetContext(),
|
|
g_MsgPrefs.m_pMsgPrefs,
|
|
WFE_MSGGetMaster()));
|
|
//set the callbacks for askHTML and Recipients dialogs
|
|
MSG_SetCompositionPaneCallbacks( pCompose->GetMsgPane(),
|
|
&Callbacks,
|
|
0);
|
|
|
|
if (pCompose->GetMsgPane())
|
|
MSG_SetHTMLMarkup(pCompose->GetMsgPane(), TRUE);
|
|
}
|
|
ASSERT(pCompose->GetMsgPane());
|
|
MSG_SetFEData(pCompose->GetMsgPane(),(void *)pCompose);
|
|
pCompose->UpdateAttachmentInfo();
|
|
|
|
// Pass doccsid and win_csid info to new context for MailToWin conversion
|
|
INTL_CharSetInfo old_csi = LO_GetDocumentCharacterSetInfo(pOldContext);
|
|
INTL_CharSetInfo new_csi = LO_GetDocumentCharacterSetInfo(context);
|
|
int16 doccsid = INTL_GetCSIDocCSID(old_csi);
|
|
|
|
INTL_SetCSIDocCSID(new_csi,
|
|
(doccsid ? doccsid : INTL_DefaultDocCharSetID(pOldContext)));
|
|
|
|
INTL_SetCSIWinCSID(new_csi,
|
|
(win_csid ? win_csid : INTL_DocToWinCharSetID(INTL_GetCSIDocCSID(new_csi))));
|
|
|
|
pCompose->DisplayHeaders(NULL);
|
|
|
|
CComposeBar * pBar = pCompose->GetComposeBar();
|
|
ASSERT(pBar);
|
|
LPADDRESSCONTROL pIAddressList = pBar->GetAddressWidgetInterface();
|
|
|
|
if (!pIAddressList->IsCreated())
|
|
{
|
|
pBar->CreateAddressingBlock();
|
|
}
|
|
|
|
if (!pCompose->UseHtml())
|
|
{
|
|
pCompose->CompleteComposeInitialization();
|
|
const char * pBody = pInitialText ? pInitialText : MSG_GetCompBody(pCompose->GetMsgPane());
|
|
if (pBody)
|
|
{
|
|
FE_InsertMessageCompositionText(context,pBody,TRUE);
|
|
// We don't want to quote the original if open as draft
|
|
// Check for the editorType before we do the quoting
|
|
// Since only draft code will specify what editor to
|
|
// use, checking for editorType == MSG_DEFAULT will do
|
|
// the work.
|
|
if (MSG_ShouldAutoQuote(pCompose->GetMsgPane()) &&
|
|
editorType == MSG_DEFAULT)
|
|
{
|
|
pCompose->SetQuoteSelection();
|
|
MSG_QuoteMessage(
|
|
pCompose->GetMsgPane(),
|
|
WFE_InsertMessage,
|
|
(void*)pCompose->GetMainContext()->GetContext());
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pCompose->SetInitialText (pInitialText);
|
|
URL_Struct * pUrl = NET_CreateURLStruct(EDT_NEW_DOC_URL,NET_DONT_RELOAD);
|
|
if (pUrl != NULL)
|
|
{
|
|
// pUrl->pre_exit_fn = wfe_GoldDoneLoading;
|
|
pContext->GetUrl(pUrl, FO_CACHE_AND_PRESENT);
|
|
pContext->GetContext()->bIsComposeWindow = TRUE;
|
|
}
|
|
}
|
|
|
|
if (MSG_GetAttachmentList(pCompose->GetMsgPane()))
|
|
pCompose->SetModified(TRUE);
|
|
else
|
|
pCompose->SetModified(FALSE);
|
|
|
|
// Post message to compose window to set the initial focus.
|
|
pCompose->PostMessage(WM_COMP_SET_INITIAL_FOCUS);
|
|
return pCompose->GetMsgPane();
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
else
|
|
return DoAltMailComposition(pOldContext, fields);
|
|
}
|
|
|
|
extern "C" void FE_RaiseMailCompositionWindow(MSG_Pane *pPane)
|
|
{
|
|
CComposeFrame * pCompose = (CComposeFrame *) MSG_GetFEData(pPane);
|
|
|
|
#ifdef XP_WIN32
|
|
if(!theApp.m_hPostalLib) {
|
|
#endif
|
|
pCompose->SendMessageToDescendants(WM_INITIALUPDATE, 0, 0, TRUE, TRUE);
|
|
pCompose->ShowWindow(SW_SHOW);
|
|
// Make Sure OnInitialUpdate gets called for the view.
|
|
pCompose->DisplayHeaders(pCompose->GetSavedHeaders());
|
|
#ifdef XP_WIN32
|
|
}
|
|
else {
|
|
FE_LoadExchangeInfo(pCompose->GetMainContext()->GetContext());
|
|
}
|
|
#endif
|
|
}
|
|
|
|
extern "C" void FE_InsertMessageCompositionText(MWContext * context,
|
|
const char* text,
|
|
XP_Bool leaveCursorAtBeginning)
|
|
{
|
|
if (context) {
|
|
if (ABSTRACTCX(context)->IsDestroyed())
|
|
return;
|
|
CGenericFrame * pFrame = wfe_FrameFromXPContext(context);
|
|
if (pFrame)
|
|
{
|
|
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
|
|
if ( pCompose )
|
|
{
|
|
int nStartChar, nEndChar;
|
|
if (!pCompose->UseHtml())
|
|
{
|
|
if ( leaveCursorAtBeginning )
|
|
pCompose->GetEditor()->GetSel(nStartChar, nEndChar);
|
|
pCompose->GetEditor()->ReplaceSel ( text );
|
|
if ( leaveCursorAtBeginning )
|
|
pCompose->GetEditor()->SetSel (nStartChar, nEndChar, TRUE );
|
|
}
|
|
else
|
|
{
|
|
ED_BufferOffset ins = -1;
|
|
if ( leaveCursorAtBeginning ){
|
|
ins = EDT_GetInsertPointOffset( context );
|
|
}
|
|
|
|
EDT_PasteQuote( context, (char*) text );
|
|
|
|
if ( leaveCursorAtBeginning && ins != -1 ) {
|
|
EDT_SetInsertPointToOffset( context, ins, 0 );
|
|
}
|
|
|
|
}
|
|
pCompose->GetChrome()->StopAnimation();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
extern "C" void FE_DoneWithMessageBody(MSG_Pane *pPane, char* body,
|
|
uint32 body_size)
|
|
{
|
|
XP_FREE(body);
|
|
}
|
|
|
|
extern "C" char * FE_PromptMessageSubject (MWContext * pContext)
|
|
{
|
|
HWND hWnd = GetFocus();
|
|
CString csText;
|
|
CString csDefault;
|
|
csText.LoadString(IDS_COMPOSE_NOSUBJECT);
|
|
csDefault.LoadString(IDS_COMPOSE_DEFAULTNOSUBJECT);
|
|
char * ptr = CFE_Prompt(pContext, csText, csDefault );
|
|
SetFocus(hWnd);
|
|
if (!ptr)
|
|
{
|
|
CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
|
|
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
|
|
pCompose->GetChrome()->StopAnimation();
|
|
}
|
|
return ptr;
|
|
}
|
|
|
|
#ifdef XP_WIN32
|
|
|
|
extern void FE_UpdateComposeWindowRecipients(MWContext *pContext,
|
|
char *pTo, char *pCc, char *pBcc)
|
|
{
|
|
CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
|
|
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
|
|
if ( pCompose )
|
|
{
|
|
CComposeBar * pBar = pCompose->GetComposeBar();
|
|
ASSERT(pBar);
|
|
pBar->UpdateRecipientInfo (pTo, pCc, pBcc);
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
extern "C" MSG_Pane * DoAltMailComposition(MWContext *pOldContext, MSG_CompositionFields* fields)
|
|
{
|
|
CGenericDoc * pDocument;
|
|
INTL_CharSetInfo csi = LO_GetDocumentCharacterSetInfo(pOldContext);
|
|
pDocument = (CGenericDoc*)theApp.m_TextComposeTemplate->OpenDocumentFile(NULL, INTL_GetCSIWinCSID(csi));
|
|
|
|
g_NastyContextSavingHack = pOldContext;
|
|
|
|
if ( pDocument )
|
|
{
|
|
CWinCX * pContext = (CWinCX*) pDocument->GetContext();
|
|
if ( pContext )
|
|
{
|
|
MWContext *context = pContext->GetContext();
|
|
CComposeFrame *pCompose = (CComposeFrame *) pContext->GetFrame()->GetFrameWnd();
|
|
pCompose->SetComposeStuff(pOldContext,fields); // squirl away stuff for post-create
|
|
|
|
pCompose->SetMsgPane(MSG_CreateCompositionPane(
|
|
pContext->GetContext(),
|
|
pOldContext, g_MsgPrefs.m_pMsgPrefs, fields,
|
|
WFE_MSGGetMaster()));
|
|
ASSERT(pCompose->GetMsgPane());
|
|
MSG_SetFEData(pCompose->GetMsgPane(),(void *)pCompose);
|
|
|
|
pCompose->DisplayHeaders(NULL);
|
|
|
|
FE_LoadExchangeInfo(context);
|
|
|
|
return pCompose->GetMsgPane();
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
#define MAX_MAIL_SIZE 300000
|
|
extern "C" void FE_DoneMailTo(PrintSetup * print)
|
|
{
|
|
ASSERT(print);
|
|
|
|
MWContext * context = (MWContext *) print->carg;
|
|
|
|
CGenericFrame * pFrame = wfe_FrameFromXPContext(context);
|
|
ASSERT(pFrame);
|
|
|
|
CComposeFrame * pCompose;
|
|
pCompose = (CComposeFrame *) pFrame;
|
|
ASSERT(pFrame);
|
|
|
|
MSG_Pane * pMsgPane = pCompose->GetMsgPane();
|
|
ASSERT(pMsgPane);
|
|
|
|
fclose(print->out);
|
|
|
|
//
|
|
// No no no, get the size the right way
|
|
//
|
|
char * buffer;
|
|
buffer = (char *) malloc(MAX_MAIL_SIZE + 5);
|
|
FILE * fp = fopen(print->filename, "r");
|
|
int len = fread(buffer, 1, MAX_MAIL_SIZE + 5, fp);
|
|
buffer[len] = '\0';
|
|
fclose(fp);
|
|
|
|
|
|
if(theApp.m_hPostalLib) {
|
|
|
|
if(theApp.m_bInitMapi) {
|
|
if(theApp.m_fnOpenMailSession) {
|
|
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
|
|
if(status == POST_OK) {
|
|
theApp.m_bInitMapi = FALSE;
|
|
}
|
|
else {
|
|
FE_DestroyMailCompositionContext(context);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
// create mail window with no quoting
|
|
if(theApp.m_fnComposeMailMessage)
|
|
(*theApp.m_fnComposeMailMessage) ((const char *) (const char *) MSG_GetCompHeader(pMsgPane, MSG_TO_HEADER_MASK),
|
|
(const char *) "", /* no refs field. BAD! BUG! */
|
|
(const char *) MSG_GetCompHeader(pMsgPane, MSG_ORGANIZATION_HEADER_MASK),
|
|
(const char *) "", /* no URL */
|
|
(const char *) MSG_GetCompHeader(pMsgPane, MSG_SUBJECT_HEADER_MASK),
|
|
buffer,
|
|
(const char *) MSG_GetCompHeader(pMsgPane, MSG_CC_HEADER_MASK),
|
|
(const char *) MSG_GetCompHeader(pMsgPane, MSG_BCC_HEADER_MASK));
|
|
|
|
// get rid of the file and free the memory
|
|
remove(print->filename);
|
|
// XP_FREE(print->filename);
|
|
// print->filename = NULL;
|
|
XP_FREE(buffer);
|
|
|
|
FE_DestroyMailCompositionContext(context);
|
|
return;
|
|
|
|
}
|
|
}
|
|
|
|
extern "C" int FE_LoadExchangeInfo(MWContext * context)
|
|
{
|
|
if(!context)
|
|
return(FALSE);
|
|
|
|
if(!theApp.m_hPostalLib)
|
|
return(FALSE);
|
|
|
|
CGenericFrame * pFrame = wfe_FrameFromXPContext(context);
|
|
ASSERT(pFrame);
|
|
|
|
CComposeFrame * pCompose;
|
|
pCompose = (CComposeFrame *) pFrame;
|
|
ASSERT(pFrame);
|
|
|
|
MSG_Pane * pMsgPane = pCompose->GetMsgPane();
|
|
ASSERT(pMsgPane);
|
|
|
|
History_entry * hist_ent = NULL;
|
|
if(g_NastyContextSavingHack)
|
|
hist_ent = SHIST_GetCurrent(&(g_NastyContextSavingHack->hist));
|
|
|
|
CString csURL;
|
|
if(hist_ent)
|
|
csURL = hist_ent->address;
|
|
else
|
|
csURL = "";
|
|
|
|
//Set hist_ent to NULL if context->title is "Message Composition"
|
|
//This is a nasty way of determining if we're in here in response
|
|
//to "Mail Doc" or "New Mail Message".
|
|
//Also, if there's To: field info present(pBar->m_pszTo) then
|
|
//we know that it's a Mailto: and set hist_ent to NULL
|
|
//Without this differentiation the code always sends the contents
|
|
//of the previously mailed document even when someone chooses
|
|
//"New Mail Message" or "Mailto:"
|
|
const char * pszTo = MSG_GetCompHeader(pMsgPane, MSG_TO_HEADER_MASK);
|
|
if(!strcmp(XP_GetString(MK_MSG_MSG_COMPOSITION), context->title) || strlen(pszTo) )
|
|
hist_ent = NULL;
|
|
|
|
// make sure there was a document loaded
|
|
if(!hist_ent) {
|
|
|
|
if(theApp.m_bInitMapi) {
|
|
if(theApp.m_fnOpenMailSession) {
|
|
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
|
|
if(status == POST_OK) {
|
|
theApp.m_bInitMapi = FALSE;
|
|
}
|
|
else {
|
|
FE_DestroyMailCompositionContext(context);
|
|
return(FALSE);
|
|
}
|
|
}
|
|
}
|
|
|
|
// create mail window with no quoting
|
|
if(theApp.m_fnComposeMailMessage)
|
|
(*theApp.m_fnComposeMailMessage) ((const char *) MSG_GetCompHeader(pMsgPane, MSG_TO_HEADER_MASK),
|
|
(const char *) "", /* no refs field. BAD! BUG! */
|
|
(const char *) MSG_GetCompHeader(pMsgPane, MSG_ORGANIZATION_HEADER_MASK),
|
|
(const char *) "", /* no URL */
|
|
(const char *) MSG_GetCompHeader(pMsgPane, MSG_SUBJECT_HEADER_MASK),
|
|
"",
|
|
(const char *) MSG_GetCompHeader(pMsgPane, MSG_CC_HEADER_MASK),
|
|
(const char *) MSG_GetCompHeader(pMsgPane, MSG_BCC_HEADER_MASK));
|
|
|
|
FE_DestroyMailCompositionContext(context);
|
|
return(TRUE);
|
|
}
|
|
|
|
URL_Struct * URL_s = SHIST_CreateURLStructFromHistoryEntry(g_NastyContextSavingHack, hist_ent);
|
|
|
|
// Zero out the saved data
|
|
memset(&URL_s->savedData, 0, sizeof(URL_s->savedData));
|
|
|
|
PrintSetup print;
|
|
|
|
XL_InitializeTextSetup(&print);
|
|
print.width = 68;
|
|
print.prefix = "";
|
|
print.eol = "\r\n";
|
|
|
|
char * name = WH_TempName(xpTemporary, NULL);
|
|
if(!name) {
|
|
FE_DestroyMailCompositionContext(context);
|
|
return(FALSE);
|
|
}
|
|
|
|
print.out = fopen(name, "w");
|
|
print.completion = (XL_CompletionRoutine) FE_DoneMailTo;
|
|
print.carg = context;
|
|
print.filename = name;
|
|
print.url = URL_s;
|
|
|
|
// leave pCompose window alive until completion routine
|
|
XL_TranslateText(g_NastyContextSavingHack, URL_s, &print);
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
extern "C" void FE_SecurityOptionsChanged(MWContext * pContext)
|
|
{
|
|
CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
|
|
if ( pFrame ) {
|
|
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
|
|
pCompose->UpdateSecurityOptions();
|
|
}
|
|
}
|