зеркало из https://github.com/mozilla/gecko-dev.git
Fix the window close problem for saveAs in .js, enable the charset alert in .cpp and some clean up,
bug 89655, r=ducarroz, sr=bienvenu.
This commit is contained in:
Родитель
037bd4facf
Коммит
8465fb9bac
|
@ -522,8 +522,11 @@ PRBool nsMsgI18N7bit_data_part(const char *charset, const char *inString, const
|
|||
return result;
|
||||
}
|
||||
|
||||
PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const nsString& inString)
|
||||
PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const PRUnichar* inString)
|
||||
{
|
||||
if (!charset || !*charset || !inString || !*inString)
|
||||
return PR_TRUE;
|
||||
|
||||
nsAutoString aCharset; aCharset.AssignWithConversion(charset);
|
||||
nsresult res;
|
||||
PRBool result = PR_TRUE;
|
||||
|
@ -536,15 +539,15 @@ PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const nsString&
|
|||
// get an unicode converter
|
||||
res = ccm->GetUnicodeEncoder(&aCharset, getter_AddRefs(encoder));
|
||||
if(NS_SUCCEEDED(res)) {
|
||||
const PRUnichar *originalPtr = inString.get();
|
||||
PRInt32 originalLen = inString.Length();
|
||||
const PRUnichar *originalPtr = inString;
|
||||
PRInt32 originalLen = nsCRT::strlen(inString);
|
||||
PRUnichar *currentSrcPtr = NS_CONST_CAST(PRUnichar *, originalPtr);
|
||||
char localBuff[512];
|
||||
PRInt32 consumedLen = 0;
|
||||
PRInt32 srcLen;
|
||||
PRInt32 dstLength;
|
||||
|
||||
// convert to unicode
|
||||
// convert from unicode
|
||||
while (consumedLen < originalLen) {
|
||||
srcLen = originalLen - consumedLen;
|
||||
dstLength = 512;
|
||||
|
|
|
@ -91,7 +91,7 @@ NS_MSG_BASE PRBool nsMsgI18N7bit_data_part(const char *charset, const char *s
|
|||
* @return True if the string can be converted within the charset range.
|
||||
* False if one or more characters cannot be converted to the target charset.
|
||||
*/
|
||||
NS_MSG_BASE PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const nsString& inString);
|
||||
NS_MSG_BASE PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const PRUnichar* inString);
|
||||
|
||||
/**
|
||||
* Return accept language.
|
||||
|
|
|
@ -61,6 +61,7 @@ var contentChanged = false;
|
|||
var gCurrentIdentity = null;
|
||||
var defaultSaveOperation = "draft";
|
||||
var sendOrSaveOperationInProgress = false;
|
||||
var gCloseWindowAfterSave = false;
|
||||
var isOffline = false;
|
||||
var sessionAdded = false;
|
||||
var currentAutocompleteDirectory = null;
|
||||
|
@ -112,7 +113,12 @@ var stateListener = {
|
|||
{
|
||||
contentChanged = false;
|
||||
msgCompose.bodyModified = false;
|
||||
|
||||
if (gCloseWindowAfterSave)
|
||||
msgCompose.CloseWindow();
|
||||
}
|
||||
|
||||
gCloseWindowAfterSave = false;
|
||||
},
|
||||
|
||||
SaveInFolderDone: function(folderURI) {
|
||||
|
@ -1843,8 +1849,9 @@ function ComposeCanClose()
|
|||
case 0: //Save
|
||||
if (LastToClose())
|
||||
NotifyQuitApplication();
|
||||
gCloseWindowAfterSave = true;
|
||||
SaveAsDraft();
|
||||
break;
|
||||
return false;
|
||||
case 1: //Cancel
|
||||
return false;
|
||||
case 2: //Don't Save
|
||||
|
|
|
@ -255,24 +255,54 @@ mime_generate_headers (nsMsgCompFields *fields,
|
|||
const char* pReference;
|
||||
const char* pOtherHdr;
|
||||
|
||||
nsCAutoString headerBuf; // accumulate header strings for charset conversion check
|
||||
headerBuf.Truncate(0);
|
||||
|
||||
NS_ASSERTION (fields, "null fields");
|
||||
if (!fields)
|
||||
return nsnull;
|
||||
|
||||
/* Multiply by 3 here to make enough room for MimePartII conversion */
|
||||
pFrom = fields->GetFrom(); if (pFrom) size += 3 * PL_strlen (pFrom);
|
||||
pReplyTo =fields->GetReplyTo(); if (pReplyTo) size += 3 * PL_strlen (pReplyTo);
|
||||
pTo = fields->GetTo(); if (pTo) size += 3 * PL_strlen (pTo);
|
||||
pCc = fields->GetCc(); if (pCc) size += 3 * PL_strlen (pCc);
|
||||
pFrom = fields->GetFrom();
|
||||
if (pFrom)
|
||||
headerBuf.Append(pFrom);
|
||||
pReplyTo =fields->GetReplyTo();
|
||||
if (pReplyTo)
|
||||
headerBuf.Append(pReplyTo);
|
||||
pTo = fields->GetTo();
|
||||
if (pTo)
|
||||
headerBuf.Append(pTo);
|
||||
pCc = fields->GetCc();
|
||||
if (pCc)
|
||||
headerBuf.Append(pCc);
|
||||
pNewsGrp = fields->GetNewsgroups(); if (pNewsGrp) size += 3 * PL_strlen (pNewsGrp);
|
||||
pFollow= fields->GetFollowupTo(); if (pFollow) size += 3 * PL_strlen (pFollow);
|
||||
pSubject = fields->GetSubject(); if (pSubject) size += 3 * PL_strlen (pSubject);
|
||||
pReference = fields->GetReferences(); if (pReference) size += 3 * PL_strlen (pReference);
|
||||
pOrg= fields->GetOrganization(); if (pOrg) size += 3 * PL_strlen (pOrg);
|
||||
pSubject = fields->GetSubject();
|
||||
if (pSubject)
|
||||
headerBuf.Append(pSubject);
|
||||
pReference = fields->GetReferences(); if (pReference) size += 3 * PL_strlen (pReference);
|
||||
pOrg= fields->GetOrganization();
|
||||
if (pOrg)
|
||||
headerBuf.Append(pOrg);
|
||||
pOtherHdr= fields->GetOtherRandomHeaders(); if (pOtherHdr) size += 3 * PL_strlen (pOtherHdr);
|
||||
pPriority = fields->GetPriority(); if (pPriority) size += 3 * PL_strlen (pPriority);
|
||||
pMessageID = fields->GetMessageId(); if (pMessageID) size += PL_strlen (pMessageID);
|
||||
|
||||
/* Multiply by 3 here to make enough room for MimePartII conversion */
|
||||
size += 3 * headerBuf.Length();
|
||||
|
||||
const char *pBcc = fields->GetBcc();
|
||||
if (pBcc)
|
||||
headerBuf.Append(pBcc);
|
||||
// alert the user if headers contain characters out of charset range (e.g. multilingual data)
|
||||
if (!nsMsgI18Ncheck_data_in_charset_range(charset, NS_ConvertUTF8toUCS2(headerBuf.get()).get())) {
|
||||
PRBool proceedTheSend;
|
||||
rv = nsMsgAskBooleanQuestionByID(aPrompt, NS_MSG_MULTILINGUAL_SEND, &proceedTheSend);
|
||||
if (!proceedTheSend) {
|
||||
*status = NS_ERROR_ABORT;
|
||||
return nsnull;
|
||||
}
|
||||
}
|
||||
|
||||
/* Add a bunch of slop for the static parts of the headers. */
|
||||
/* size += 2048; */
|
||||
size += 2560;
|
||||
|
@ -643,18 +673,6 @@ mime_generate_headers (nsMsgCompFields *fields,
|
|||
}
|
||||
|
||||
if (pSubject && *pSubject) {
|
||||
// alert the user if the subject contains characters out of charset range (e.g. multilingual data)
|
||||
nsAutoString u; // need to convert from UTF-8 to UCS2
|
||||
if (NS_OK == nsMsgI18NConvertToUnicode(nsCAutoString(msgCompHeaderInternalCharset()), nsCAutoString(pSubject), u) &&
|
||||
!nsMsgI18Ncheck_data_in_charset_range(charset, u) &&
|
||||
nsIMsgSend::nsMsgDeliverNow == deliver_mode) {
|
||||
PRBool proceedTheSend;
|
||||
rv = nsMsgAskBooleanQuestionByID(aPrompt, NS_MSG_MULTILINGUAL_SEND, &proceedTheSend);
|
||||
if (!proceedTheSend) {
|
||||
*status = NS_ERROR_BUT_DONT_SHOW_ALERT;
|
||||
return nsnull;
|
||||
}
|
||||
}
|
||||
|
||||
char *convbuf;
|
||||
PUSH_STRING ("Subject: ");
|
||||
|
|
|
@ -888,12 +888,12 @@ nsresult nsMsgCompose::SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *ide
|
|||
if (NS_SUCCEEDED(rv) && nsnull != outCString)
|
||||
{
|
||||
// body contains multilingual data, confirm send to the user
|
||||
if (NS_ERROR_UENC_NOMAPPING == rv && nsIMsgSend::nsMsgDeliverNow == deliverMode) {
|
||||
if (NS_ERROR_UENC_NOMAPPING == rv) {
|
||||
PRBool proceedTheSend;
|
||||
rv = nsMsgAskBooleanQuestionByID(prompt, NS_MSG_MULTILINGUAL_SEND, &proceedTheSend);
|
||||
if (!proceedTheSend) {
|
||||
PR_FREEIF(outCString);
|
||||
return NS_ERROR_BUT_DONT_SHOW_ALERT;
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
}
|
||||
m_compFields->SetBody(outCString);
|
||||
|
|
|
@ -1392,7 +1392,7 @@ nsMsgComposeAndSend::GetBodyFromEditor()
|
|||
PR_FREEIF(outCString);
|
||||
rv = nsMsgI18NSaveAsCharset(TEXT_PLAIN, aCharset, bodyText, &outCString);
|
||||
|
||||
if (NS_ERROR_UENC_NOMAPPING == rv && nsIMsgSend::nsMsgDeliverNow == m_deliver_mode) {
|
||||
if (NS_ERROR_UENC_NOMAPPING == rv) {
|
||||
PRBool proceedTheSend;
|
||||
nsCOMPtr<nsIPrompt> prompt;
|
||||
GetDefaultPrompt(getter_AddRefs(prompt));
|
||||
|
@ -1401,7 +1401,7 @@ nsMsgComposeAndSend::GetBodyFromEditor()
|
|||
PR_FREEIF(attachment1_body);
|
||||
PR_FREEIF(outCString);
|
||||
Recycle(bodyText);
|
||||
return NS_ERROR_BUT_DONT_SHOW_ALERT;
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче