Fix bug 149126: Mail Client doesn't work correctly with Open Office with rpm builds

patch by joey.shen@sun.com
r=blizzard@mozilla.org sr=dmose@mozilla.org a=asa@mozilla.org


git-svn-id: svn://10.0.0.236/trunk@142687 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
leon.zhang%sun.com
2003-05-21 03:04:36 +00:00
parent 73bcd9dd60
commit 78f0e55737
2 changed files with 76 additions and 4 deletions

View File

@@ -498,6 +498,38 @@ XRemoteService::BuildResponse(const char *aError, const char *aMessage)
return retval;
}
void
XRemoteService::FindRestInList(nsCString &aString, nsCString &retString,
PRUint32 *aIndexRet)
{
// init our return
*aIndexRet = 0;
nsCString tempString;
PRInt32 strIndex;
// find out if there's a comma from the start of the string
strIndex = aString.FindChar(',');
// give up now if you can
if (strIndex == kNotFound)
return;
// cut the string down to the first ,
tempString = Substring(aString, strIndex+1, aString.Length());
// strip off leading + trailing whitespace
tempString.Trim(" ", PR_TRUE, PR_TRUE);
// see if we've reduced it to nothing
if (tempString.IsEmpty())
return;
*aIndexRet = strIndex;
// otherwise, return it as a new C string
retString = tempString;
}
void
XRemoteService::FindLastInList(nsCString &aString, nsCString &retString,
PRUint32 *aIndexRet)
@@ -589,6 +621,15 @@ XRemoteService::GetMailLocation(char **_retval)
}
nsresult
XRemoteService::GetComposeLocation(const char **_retval)
{
// get the Compose chrome URL
*_retval = "chrome://messenger/content/messengercompose/messengercompose.xul";
return NS_OK;
}
nsresult
XRemoteService::OpenURL(nsCString &aArgument,
nsIDOMWindowInternal *aParent,
@@ -810,6 +851,22 @@ XRemoteService::XfeDoCommand(nsCString &aArgument,
nsIDOMWindowInternal *aParent)
{
nsresult rv = NS_OK;
// see if there are any arguments on the end
nsCString restArgument;
PRUint32 index;
FindRestInList(aArgument, restArgument, &index);
if (!restArgument.IsEmpty())
aArgument.Truncate(index);
nsCOMPtr<nsISupportsString> arg;
arg = do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv);
if (NS_FAILED(rv))
return rv;
// pass the second argument as parameter
arg->SetData(NS_ConvertUTF8toUCS2(restArgument));
// someone requested opening mail/news
if (aArgument.EqualsIgnoreCase("openinbox")) {
@@ -838,7 +895,7 @@ XRemoteService::XfeDoCommand(nsCString &aArgument,
nsCOMPtr<nsIDOMWindow> newWindow;
rv = OpenChromeWindow(0, mailLocation, "chrome,all,dialog=no",
nsnull, getter_AddRefs(newWindow));
arg, getter_AddRefs(newWindow));
}
}
@@ -851,13 +908,23 @@ XRemoteService::XfeDoCommand(nsCString &aArgument,
nsCOMPtr<nsIDOMWindow> newWindow;
rv = OpenChromeWindow(0, browserLocation, "chrome,all,dialog=no",
nsnull, getter_AddRefs(newWindow));
arg, getter_AddRefs(newWindow));
}
// open a new compose window
else if (aArgument.EqualsIgnoreCase("composemessage")) {
nsCString tempString("mailto:");
rv = OpenURL(tempString, nsnull, PR_FALSE);
/*
* Here we change to OpenChromeWindow instead of OpenURL so as to
* pass argument values to the compose window, especially attachments
*/
const char * composeLocation;
rv = GetComposeLocation(&composeLocation);
if (rv != NS_OK)
return NS_ERROR_FAILURE;
nsCOMPtr<nsIDOMWindow> newWindow;
rv = OpenChromeWindow(0, composeLocation, "chrome,all,dialog=no",
arg, getter_AddRefs(newWindow));
}
return rv;

View File

@@ -52,6 +52,10 @@ class XRemoteService : public nsIXRemoteService {
// find the last argument in an argument string
void FindLastInList(nsCString &aString, nsCString &retString,
PRUint32 *aIndexRet);
// find the second argument through the last argument in the string
void FindRestInList(nsCString &aString, nsCString &retString,
PRUint32 *aIndexRet);
// short cut for opening chrome windows
@@ -64,6 +68,7 @@ class XRemoteService : public nsIXRemoteService {
// get the primary browser chrome location
nsresult GetBrowserLocation(char **_retval);
nsresult GetMailLocation(char **_retval);
nsresult GetComposeLocation(const char **_retval);
// remote command handlers
nsresult OpenURL(nsCString &aArgument,