bug 64146, Delay nsCharsetMenu initialization to avoid consuming ~2% of startup time, r=dp, sr=brendan, alecf

git-svn-id: svn://10.0.0.236/trunk@107052 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
loadrunner%betak.net
2001-11-02 03:29:30 +00:00
parent 8fbd37b3c5
commit e8e956c67e
6 changed files with 466 additions and 248 deletions

View File

@@ -37,6 +37,9 @@ function Startup()
if (!InitEditorShell())
return;
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.notifyObservers(null, "charsetmenu-selected", "other");
doSetOKCancel(onOK, onCancel);
gDialog.TitleInput = document.getElementById("TitleInput");

View File

@@ -37,6 +37,12 @@
<script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"></script>
<script type="application/x-javascript" src="chrome://messenger/content/folderProps.js"></script>
<script type="application/x-javascript">
<![CDATA[
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.notifyObservers(null, "charsetmenu-selected", "other");
]]>
</script>
<keyset id="dialogKeys"/>

View File

@@ -18,6 +18,8 @@
<script type="application/x-javascript">
<![CDATA[
var _elementIDs = ["forwardMessageMode", "autoQuote", "replyOnTop", "spellCheckBeforeSend", "strictlyMime", "wrapLength", "sendDefaultCharsetList"];
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.notifyObservers(null, "charsetmenu-selected", "mailedit");
function Startup()
{

View File

@@ -60,6 +60,9 @@
#include "nsQuickSort.h"
#include "nsIObserver.h"
#include "nsVoidArray.h"
#include "nsIObserverService.h"
#include "nsIRequestObserver.h"
#include "nsITimelineService.h"
//----------------------------------------------------------------------------
// Global functions and data [declaration]
@@ -107,6 +110,7 @@ DEFINE_RDF_VOCAB(RDF_NAMESPACE_URI, NC, type);
#define kMaileditPrefKey "intl.charsetmenu.mailedit"
NS_NAMED_LITERAL_STRING(gCharsetMenuSelectedTopic, "charsetmenu-selected");
//----------------------------------------------------------------------------
// Class nsMenuEntry [declaration]
@@ -165,6 +169,15 @@ private:
static nsIRDFDataSource * mInner;
PRPackedBool mInitialized;
PRPackedBool mBrowserMenuInitialized;
PRPackedBool mMailviewMenuInitialized;
PRPackedBool mComposerMenuInitialized;
PRPackedBool mMaileditMenuInitialized;
PRPackedBool mSecondaryTiersInitialized;
PRPackedBool mAutoDetectInitialized;
PRPackedBool mOthersInitialized;
nsVoidArray mBrowserMenu;
PRInt32 mBrowserCacheStart;
PRInt32 mBrowserCacheSize;
@@ -185,27 +198,16 @@ private:
nsCOMPtr<nsIPrefBranch> mPrefs;
nsCOMPtr<nsIObserver> mCharsetMenuObserver;
nsCOMPtr<nsISupportsArray> mDecoderList;
nsCOMPtr<nsISupportsArray> mEncoderList;
nsresult Init();
nsresult Done();
nsresult SetCharsetCheckmark(nsString * aCharset, PRBool aValue);
nsresult InitResources();
nsresult FreeResources();
nsresult InitBrowserMenu();
nsresult InitMaileditMenu();
nsresult InitMailviewMenu();
nsresult InitComposerMenu();
nsresult InitOthers();
nsresult InitSecondaryTiers();
nsresult InitStaticMenu(nsISupportsArray * aDecs,
nsIRDFResource * aResource, const char * aKey, nsVoidArray * aArray);
nsresult InitCacheMenu(nsISupportsArray * aDecs, nsIRDFResource * aResource,
const char * aKey, nsVoidArray * aArray);
nsresult InitAutodetMenu(nsIRDFResource * aResource);
nsresult InitMoreMenu(nsISupportsArray * aDecs, nsIRDFResource * aResource,
char * aFlag);
nsresult InitMoreSubmenus(nsISupportsArray * aDecs);
@@ -239,6 +241,9 @@ private:
nsresult WriteCacheToPrefs(nsVoidArray * aArray, PRInt32 aCacheStart,
const char * aKey);
nsresult UpdateCachePrefs(const char * aCacheKey, const char * aCacheSizeKey,
const char * aStaticKey, const PRUnichar * aCharset);
nsresult ClearMenu(nsIRDFContainer * aContainer, nsVoidArray * aArray);
nsresult RemoveLastMenuItem(nsIRDFContainer * aContainer,
nsVoidArray * aArray);
@@ -256,6 +261,14 @@ public:
nsCharsetMenu();
virtual ~nsCharsetMenu();
nsresult Init();
nsresult InitBrowserMenu();
nsresult InitMaileditMenu();
nsresult InitMailviewMenu();
nsresult InitComposerMenu();
nsresult InitOthers();
nsresult InitSecondaryTiers();
nsresult InitAutodetMenu();
nsresult RefreshBroserMenu();
nsresult RefreshMailviewMenu();
nsresult RefreshMaileditMenu();
@@ -344,8 +357,37 @@ NS_IMPL_ISUPPORTS1(nsCharsetMenuObserver, nsIObserver);
NS_IMETHODIMP nsCharsetMenuObserver::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *someData)
{
NS_TIMELINE_START_TIMER("nsCharsetMenu:Observe");
nsresult rv;
//XUL event handler
if (!nsCRT::strcmp(aTopic, "charsetmenu-selected")) {
nsDependentString nodeName(someData);
rv = mCharsetMenu->Init();
if (nodeName.Equals(NS_LITERAL_STRING("browser"))) {
rv = mCharsetMenu->InitBrowserMenu();
}
if (nodeName.Equals(NS_LITERAL_STRING("composer"))) {
rv = mCharsetMenu->InitComposerMenu();
}
if (nodeName.Equals(NS_LITERAL_STRING("mailview"))) {
rv = mCharsetMenu->InitMailviewMenu();
}
if (nodeName.Equals(NS_LITERAL_STRING("mailedit"))) {
rv = mCharsetMenu->InitMaileditMenu();
rv = mCharsetMenu->InitOthers();
}
if (nodeName.Equals(NS_LITERAL_STRING("more-menu"))) {
rv = mCharsetMenu->InitSecondaryTiers();
rv = mCharsetMenu->InitAutodetMenu();
}
if (nodeName.Equals(NS_LITERAL_STRING("other"))) {
rv = mCharsetMenu->InitOthers();
rv = mCharsetMenu->InitMaileditMenu();
}
}
//pref event handler
if (!nsCRT::strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) {
nsDependentString prefName(someData);
@@ -362,6 +404,8 @@ NS_IMETHODIMP nsCharsetMenuObserver::Observe(nsISupports *aSubject, const char *
}
}
NS_TIMELINE_STOP_TIMER("nsCharsetMenu:Observe");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu:Observe");
return rv;
}
@@ -390,21 +434,55 @@ nsIRDFResource * nsCharsetMenu::kNC_BookmarkSeparator = NULL;
nsIRDFResource * nsCharsetMenu::kRDF_type = NULL;
nsCharsetMenu::nsCharsetMenu()
: mInitialized(PR_FALSE),
mOthersInitialized(PR_FALSE),
mBrowserMenuInitialized(PR_FALSE),
mMailviewMenuInitialized(PR_FALSE),
mComposerMenuInitialized(PR_FALSE),
mMaileditMenuInitialized(PR_FALSE),
mSecondaryTiersInitialized(PR_FALSE),
mAutoDetectInitialized(PR_FALSE)
{
NS_INIT_REFCNT();
NS_TIMELINE_START_TIMER("nsCharsetMenu::nsCharsetMenu");
nsresult res = NS_OK;
res = InitResources();
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing resources");
//get charset manager
mCCManager = do_GetService(kCharsetConverterManagerCID, &res);
Init();
InitBrowserMenu();
InitMaileditMenu();
InitMailviewMenu();
InitComposerMenu();
InitSecondaryTiers();
InitOthers();
//initialize skeleton RDF source
mRDFService = do_GetService(kRDFServiceCID, &res);
if (NS_SUCCEEDED(res)) {
res = mRDFService->RegisterDataSource(this, PR_FALSE);
res = nsComponentManager::CreateInstance(kRDFInMemoryDataSourceCID, nsnull,
NS_GET_IID(nsIRDFDataSource), (void**) &mInner);
mRDFService->GetResource(kURINC_BrowserCharsetMenuRoot, &kNC_BrowserCharsetMenuRoot);
}
//get pref service
nsCOMPtr<nsIPrefService> PrefService = do_GetService(NS_PREFSERVICE_CONTRACTID, &res);
if (NS_SUCCEEDED(res))
res = PrefService->GetBranch(nsnull, getter_AddRefs(mPrefs));
//register event listener
mCharsetMenuObserver = new nsCharsetMenuObserver(this);
if (mCharsetMenuObserver) {
nsCOMPtr<nsIObserverService> observerService =
do_GetService("@mozilla.org/observer-service;1", &res);
if (NS_SUCCEEDED(res))
res = observerService->AddObserver(mCharsetMenuObserver,
"charsetmenu-selected",
PR_FALSE);
}
NS_ASSERTION(NS_SUCCEEDED(res), "Failed to initialize nsCharsetMenu");
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::nsCharsetMenu");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::nsCharsetMenu");
}
nsCharsetMenu::~nsCharsetMenu()
@@ -549,65 +627,66 @@ nsresult nsCharsetMenu::RefreshComposerMenu()
nsresult nsCharsetMenu::Init()
{
nsresult res = NS_OK;
nsIRDFContainerUtils * rdfUtil = NULL;
mRDFService->GetResource(kURINC_BrowserAutodetMenuRoot, &kNC_BrowserAutodetMenuRoot);
mRDFService->GetResource(kURINC_BrowserCharsetMenuRoot, &kNC_BrowserCharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMoreCharsetMenuRoot, &kNC_BrowserMoreCharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore1CharsetMenuRoot, &kNC_BrowserMore1CharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore2CharsetMenuRoot, &kNC_BrowserMore2CharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore3CharsetMenuRoot, &kNC_BrowserMore3CharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore4CharsetMenuRoot, &kNC_BrowserMore4CharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore5CharsetMenuRoot, &kNC_BrowserMore5CharsetMenuRoot);
mRDFService->GetResource(kURINC_MaileditCharsetMenuRoot, &kNC_MaileditCharsetMenuRoot);
mRDFService->GetResource(kURINC_MailviewCharsetMenuRoot, &kNC_MailviewCharsetMenuRoot);
mRDFService->GetResource(kURINC_ComposerCharsetMenuRoot, &kNC_ComposerCharsetMenuRoot);
mRDFService->GetResource(kURINC_DecodersRoot, &kNC_DecodersRoot);
mRDFService->GetResource(kURINC_Name, &kNC_Name);
mRDFService->GetResource(kURINC_Checked, &kNC_Checked);
mRDFService->GetResource(kURINC_CharsetDetector, &kNC_CharsetDetector);
mRDFService->GetResource(kURINC_BookmarkSeparator, &kNC_BookmarkSeparator);
mRDFService->GetResource(kURINC_type, &kRDF_type);
if (!mInitialized) {
res = nsComponentManager::CreateInstance(kRDFInMemoryDataSourceCID, nsnull,
NS_GET_IID(nsIRDFDataSource), (void**) &mInner);
if (NS_FAILED(res)) goto done;
//enumerate decoders
res = mCCManager->GetDecoderList(getter_AddRefs(mDecoderList));
if (NS_FAILED(res)) return res;
res = nsServiceManager::GetService(kRDFContainerUtilsCID,
NS_GET_IID(nsIRDFContainerUtils), (nsISupports **)&rdfUtil);
if (NS_FAILED(res)) goto done;
//initialize all remaining RDF template nodes
mRDFService->GetResource(kURINC_BrowserAutodetMenuRoot, &kNC_BrowserAutodetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMoreCharsetMenuRoot, &kNC_BrowserMoreCharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore1CharsetMenuRoot, &kNC_BrowserMore1CharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore2CharsetMenuRoot, &kNC_BrowserMore2CharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore3CharsetMenuRoot, &kNC_BrowserMore3CharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore4CharsetMenuRoot, &kNC_BrowserMore4CharsetMenuRoot);
mRDFService->GetResource(kURINC_BrowserMore5CharsetMenuRoot, &kNC_BrowserMore5CharsetMenuRoot);
mRDFService->GetResource(kURINC_MaileditCharsetMenuRoot, &kNC_MaileditCharsetMenuRoot);
mRDFService->GetResource(kURINC_MailviewCharsetMenuRoot, &kNC_MailviewCharsetMenuRoot);
mRDFService->GetResource(kURINC_ComposerCharsetMenuRoot, &kNC_ComposerCharsetMenuRoot);
mRDFService->GetResource(kURINC_DecodersRoot, &kNC_DecodersRoot);
mRDFService->GetResource(kURINC_Name, &kNC_Name);
mRDFService->GetResource(kURINC_Checked, &kNC_Checked);
mRDFService->GetResource(kURINC_CharsetDetector, &kNC_CharsetDetector);
mRDFService->GetResource(kURINC_BookmarkSeparator, &kNC_BookmarkSeparator);
mRDFService->GetResource(kURINC_type, &kRDF_type);
res = rdfUtil->MakeSeq(mInner, kNC_BrowserAutodetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMoreCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore1CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore2CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore3CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore4CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore5CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_MaileditCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_MailviewCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_ComposerCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_DecodersRoot, NULL);
if (NS_FAILED(res)) goto done;
nsIRDFContainerUtils * rdfUtil = NULL;
res = nsServiceManager::GetService(kRDFContainerUtilsCID,
NS_GET_IID(nsIRDFContainerUtils), (nsISupports **)&rdfUtil);
if (NS_FAILED(res)) goto done;
res = mRDFService->RegisterDataSource(this, PR_FALSE);
done:
if (rdfUtil != NULL) nsServiceManager::ReleaseService(kRDFContainerUtilsCID,
rdfUtil);
res = rdfUtil->MakeSeq(mInner, kNC_BrowserAutodetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMoreCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore1CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore2CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore3CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore4CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_BrowserMore5CharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_MaileditCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_MailviewCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_ComposerCharsetMenuRoot, NULL);
if (NS_FAILED(res)) goto done;
res = rdfUtil->MakeSeq(mInner, kNC_DecodersRoot, NULL);
if (NS_FAILED(res)) goto done;
done:
if (rdfUtil != NULL) nsServiceManager::ReleaseService(kRDFContainerUtilsCID,rdfUtil);
if (NS_FAILED(res)) return res;
}
mInitialized = NS_SUCCEEDED(res);
return res;
}
@@ -665,38 +744,6 @@ nsresult nsCharsetMenu::SetCharsetCheckmark(nsString * aCharset,
return res;
}
/**
* Init the resources needed by the component.
*/
nsresult nsCharsetMenu::InitResources()
{
nsresult res = NS_OK;
mRDFService = do_GetService(kRDFServiceCID, &res);
if (NS_FAILED(res)) return res;
mCCManager = do_GetService(kCharsetConverterManagerCID, &res);
if (NS_FAILED(res)) return res;
res = mCCManager->GetDecoderList(getter_AddRefs(mDecoderList));
if (NS_FAILED(res)) return res;
res = mCCManager->GetEncoderList(getter_AddRefs(mEncoderList));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsIPrefService> mPrefService;
mPrefService = do_GetService(NS_PREFSERVICE_CONTRACTID, &res);
if (NS_FAILED(res)) return res;
res = mPrefService->GetBranch(nsnull, getter_AddRefs(mPrefs));
if (NS_FAILED(res)) return res;
mCharsetMenuObserver = new nsCharsetMenuObserver(this);
NS_ENSURE_TRUE(mCharsetMenuObserver, NS_ERROR_OUT_OF_MEMORY);
return res;
}
/**
* Free the resources no longer needed by the component.
*/
@@ -710,6 +757,12 @@ nsresult nsCharsetMenu::FreeResources()
pbi->RemoveObserver(kBrowserStaticPrefKey, mCharsetMenuObserver);
pbi->RemoveObserver(kMaileditPrefKey, mCharsetMenuObserver);
}
nsCOMPtr<nsIObserverService> observerService =
do_GetService("@mozilla.org/observer-service;1", &res);
if (NS_SUCCEEDED(res))
res = observerService->RemoveObserver(mCharsetMenuObserver,
"charsetmenu-selected");
}
mRDFService = NULL;
@@ -719,151 +772,196 @@ nsresult nsCharsetMenu::FreeResources()
return res;
}
// XXX collapse these initAAAMenu()'s in one
nsresult nsCharsetMenu::InitBrowserMenu()
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitBrowserMenu");
nsresult res = NS_OK;
nsCOMPtr<nsIRDFContainer> container;
res = NewRDFContainer(mInner, kNC_BrowserCharsetMenuRoot, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
if (!mBrowserMenuInitialized) {
nsCOMPtr<nsIRDFContainer> container;
res = NewRDFContainer(mInner, kNC_BrowserCharsetMenuRoot, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsISupportsArray> browserDecoderList;
res = mDecoderList->Clone(getter_AddRefs(browserDecoderList));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsISupportsArray> browserDecoderList;
res = mDecoderList->Clone(getter_AddRefs(browserDecoderList));
if (NS_FAILED(res)) return res;
// even if we fail, the show must go on
res = InitStaticMenu(browserDecoderList, kNC_BrowserCharsetMenuRoot,
kBrowserStaticPrefKey, &mBrowserMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing browser static charset menu");
// even if we fail, the show must go on
res = InitStaticMenu(browserDecoderList, kNC_BrowserCharsetMenuRoot,
kBrowserStaticPrefKey, &mBrowserMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing browser static charset menu");
// mark the end of the static area, the rest is cache
mBrowserCacheStart = mBrowserMenu.Count();
mPrefs->GetIntPref(kBrowserCacheSizePrefKey, &mBrowserCacheSize);
// mark the end of the static area, the rest is cache
mBrowserCacheStart = mBrowserMenu.Count();
mPrefs->GetIntPref(kBrowserCacheSizePrefKey, &mBrowserCacheSize);
// compute the position of the menu in the RDF container
res = container->GetCount(&mBrowserMenuRDFPosition);
if (NS_FAILED(res)) return res;
// this "1" here is a correction necessary because the RDF container
// elements are numbered from 1 (why god, WHY?!?!?!)
mBrowserMenuRDFPosition -= mBrowserCacheStart - 1;
// compute the position of the menu in the RDF container
res = container->GetCount(&mBrowserMenuRDFPosition);
if (NS_FAILED(res)) return res;
// this "1" here is a correction necessary because the RDF container
// elements are numbered from 1 (why god, WHY?!?!?!)
mBrowserMenuRDFPosition -= mBrowserCacheStart - 1;
res = InitCacheMenu(browserDecoderList, kNC_BrowserCharsetMenuRoot, kBrowserCachePrefKey,
&mBrowserMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing browser cache charset menu");
res = InitCacheMenu(browserDecoderList, kNC_BrowserCharsetMenuRoot, kBrowserCachePrefKey,
&mBrowserMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing browser cache charset menu");
// register prefs callback
nsCOMPtr<nsIPrefBranchInternal> pbi = do_QueryInterface(mPrefs);
if (pbi)
res = pbi->AddObserver(kBrowserStaticPrefKey, mCharsetMenuObserver, PR_FALSE);
// register prefs callback
nsCOMPtr<nsIPrefBranchInternal> pbi = do_QueryInterface(mPrefs);
if (pbi)
res = pbi->AddObserver(kBrowserStaticPrefKey, mCharsetMenuObserver, PR_FALSE);
}
mBrowserMenuInitialized = NS_SUCCEEDED(res);
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitBrowserMenu");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitBrowserMenu");
return res;
}
nsresult nsCharsetMenu::InitMaileditMenu()
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitMaileditMenu");
nsresult res = NS_OK;
nsCOMPtr<nsIRDFContainer> container;
res = NewRDFContainer(mInner, kNC_MaileditCharsetMenuRoot, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
if (!mMaileditMenuInitialized) {
nsCOMPtr<nsIRDFContainer> container;
res = NewRDFContainer(mInner, kNC_MaileditCharsetMenuRoot, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsISupportsArray> maileditEncoderList;
res = mEncoderList->Clone(getter_AddRefs(maileditEncoderList));
if (NS_FAILED(res)) return res;
//enumerate encoders
nsCOMPtr<nsISupportsArray> maileditEncoderList;
res = mCCManager->GetEncoderList(getter_AddRefs(maileditEncoderList));
if (NS_FAILED(res)) return res;
res = AddFromPrefsToMenu(NULL, container, kMaileditPrefKey, maileditEncoderList, NULL);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing mailedit charset menu from prefs");
res = AddFromPrefsToMenu(NULL, container, kMaileditPrefKey, maileditEncoderList, NULL);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing mailedit charset menu from prefs");
// register prefs callback
nsCOMPtr<nsIPrefBranchInternal> pbi = do_QueryInterface(mPrefs);
if (pbi)
res = pbi->AddObserver(kMaileditPrefKey, mCharsetMenuObserver, PR_FALSE);
// register prefs callback
nsCOMPtr<nsIPrefBranchInternal> pbi = do_QueryInterface(mPrefs);
if (pbi)
res = pbi->AddObserver(kMaileditPrefKey, mCharsetMenuObserver, PR_FALSE);
}
mMaileditMenuInitialized = NS_SUCCEEDED(res);
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitMaileditMenu");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitMaileditMenu");
return res;
}
nsresult nsCharsetMenu::InitMailviewMenu()
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitMailviewMenu");
nsresult res = NS_OK;
nsCOMPtr<nsIRDFContainer> container;
res = NewRDFContainer(mInner, kNC_MailviewCharsetMenuRoot, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
if (!mMailviewMenuInitialized) {
nsCOMPtr<nsIRDFContainer> container;
res = NewRDFContainer(mInner, kNC_MailviewCharsetMenuRoot, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsISupportsArray> mailviewDecoderList;
res = mDecoderList->Clone(getter_AddRefs(mailviewDecoderList));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsISupportsArray> mailviewDecoderList;
res = mDecoderList->Clone(getter_AddRefs(mailviewDecoderList));
if (NS_FAILED(res)) return res;
// even if we fail, the show must go on
res = InitStaticMenu(mailviewDecoderList, kNC_MailviewCharsetMenuRoot,
kMailviewStaticPrefKey, &mMailviewMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing mailview static charset menu");
// even if we fail, the show must go on
res = InitStaticMenu(mailviewDecoderList, kNC_MailviewCharsetMenuRoot,
kMailviewStaticPrefKey, &mMailviewMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing mailview static charset menu");
// mark the end of the static area, the rest is cache
mMailviewCacheStart = mMailviewMenu.Count();
mPrefs->GetIntPref(kMailviewCacheSizePrefKey, &mMailviewCacheSize);
// mark the end of the static area, the rest is cache
mMailviewCacheStart = mMailviewMenu.Count();
mPrefs->GetIntPref(kMailviewCacheSizePrefKey, &mMailviewCacheSize);
// compute the position of the menu in the RDF container
res = container->GetCount(&mMailviewMenuRDFPosition);
if (NS_FAILED(res)) return res;
// this "1" here is a correction necessary because the RDF container
// elements are numbered from 1 (why god, WHY?!?!?!)
mMailviewMenuRDFPosition -= mMailviewCacheStart - 1;
// compute the position of the menu in the RDF container
res = container->GetCount(&mMailviewMenuRDFPosition);
if (NS_FAILED(res)) return res;
// this "1" here is a correction necessary because the RDF container
// elements are numbered from 1 (why god, WHY?!?!?!)
mMailviewMenuRDFPosition -= mMailviewCacheStart - 1;
res = InitCacheMenu(mailviewDecoderList, kNC_MailviewCharsetMenuRoot,
kMailviewCachePrefKey, &mMailviewMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing mailview cache charset menu");
res = InitCacheMenu(mailviewDecoderList, kNC_MailviewCharsetMenuRoot,
kMailviewCachePrefKey, &mMailviewMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing mailview cache charset menu");
}
mMailviewMenuInitialized = NS_SUCCEEDED(res);
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitMailviewMenu");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitMailviewMenu");
return res;
}
nsresult nsCharsetMenu::InitComposerMenu()
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitComposerMenu");
nsresult res = NS_OK;
nsCOMPtr<nsIRDFContainer> container;
res = NewRDFContainer(mInner, kNC_ComposerCharsetMenuRoot, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
if (!mComposerMenuInitialized) {
nsCOMPtr<nsIRDFContainer> container;
res = NewRDFContainer(mInner, kNC_ComposerCharsetMenuRoot, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsISupportsArray> composerDecoderList;
res = mDecoderList->Clone(getter_AddRefs(composerDecoderList));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsISupportsArray> composerDecoderList;
res = mDecoderList->Clone(getter_AddRefs(composerDecoderList));
if (NS_FAILED(res)) return res;
// even if we fail, the show must go on
res = InitStaticMenu(composerDecoderList, kNC_ComposerCharsetMenuRoot,
kComposerStaticPrefKey, &mComposerMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing composer static charset menu");
// even if we fail, the show must go on
res = InitStaticMenu(composerDecoderList, kNC_ComposerCharsetMenuRoot,
kComposerStaticPrefKey, &mComposerMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing composer static charset menu");
// mark the end of the static area, the rest is cache
mComposerCacheStart = mComposerMenu.Count();
mPrefs->GetIntPref(kComposerCacheSizePrefKey, &mComposerCacheSize);
// mark the end of the static area, the rest is cache
mComposerCacheStart = mComposerMenu.Count();
mPrefs->GetIntPref(kComposerCacheSizePrefKey, &mComposerCacheSize);
// compute the position of the menu in the RDF container
res = container->GetCount(&mComposerMenuRDFPosition);
if (NS_FAILED(res)) return res;
// this "1" here is a correction necessary because the RDF container
// elements are numbered from 1 (why god, WHY?!?!?!)
mComposerMenuRDFPosition -= mComposerCacheStart - 1;
// compute the position of the menu in the RDF container
res = container->GetCount(&mComposerMenuRDFPosition);
if (NS_FAILED(res)) return res;
// this "1" here is a correction necessary because the RDF container
// elements are numbered from 1 (why god, WHY?!?!?!)
mComposerMenuRDFPosition -= mComposerCacheStart - 1;
res = InitCacheMenu(composerDecoderList, kNC_ComposerCharsetMenuRoot,
kComposerCachePrefKey, &mComposerMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing composer cache charset menu");
res = InitCacheMenu(composerDecoderList, kNC_ComposerCharsetMenuRoot,
kComposerCachePrefKey, &mComposerMenu);
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing composer cache charset menu");
}
mComposerMenuInitialized = NS_SUCCEEDED(res);
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitComposerMenu");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitComposerMenu");
return res;
}
nsresult nsCharsetMenu::InitOthers()
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitOthers");
nsresult res = NS_OK;
nsCOMPtr<nsISupportsArray> othersDecoderList;
res = mDecoderList->Clone(getter_AddRefs(othersDecoderList));
if (NS_FAILED(res)) return res;
if (!mOthersInitialized) {
nsCOMPtr<nsISupportsArray> othersDecoderList;
res = mDecoderList->Clone(getter_AddRefs(othersDecoderList));
if (NS_FAILED(res)) return res;
res = InitMoreMenu(othersDecoderList, kNC_DecodersRoot, ".notForBrowser");
if (NS_FAILED(res)) return res;
res = InitMoreMenu(othersDecoderList, kNC_DecodersRoot, ".notForBrowser");
if (NS_FAILED(res)) return res;
}
mOthersInitialized = NS_SUCCEEDED(res);
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitOthers");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitOthers");
return res;
}
@@ -875,20 +973,26 @@ nsresult nsCharsetMenu::InitOthers()
*/
nsresult nsCharsetMenu::InitSecondaryTiers()
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitSecondaryTiers");
nsresult res = NS_OK;
nsCOMPtr<nsISupportsArray> secondaryTiersDecoderList;
res = mDecoderList->Clone(getter_AddRefs(secondaryTiersDecoderList));
if (NS_FAILED(res)) return res;
if (!mSecondaryTiersInitialized) {
nsCOMPtr<nsISupportsArray> secondaryTiersDecoderList;
res = mDecoderList->Clone(getter_AddRefs(secondaryTiersDecoderList));
if (NS_FAILED(res)) return res;
res = InitMoreSubmenus(secondaryTiersDecoderList);
NS_ASSERTION(NS_SUCCEEDED(res), "err init browser charset more submenus");
res = InitMoreSubmenus(secondaryTiersDecoderList);
NS_ASSERTION(NS_SUCCEEDED(res), "err init browser charset more submenus");
res = InitMoreMenu(secondaryTiersDecoderList, kNC_BrowserMoreCharsetMenuRoot, ".notForBrowser");
NS_ASSERTION(NS_SUCCEEDED(res), "err init browser charset more menu");
res = InitMoreMenu(secondaryTiersDecoderList, kNC_BrowserMoreCharsetMenuRoot, ".notForBrowser");
NS_ASSERTION(NS_SUCCEEDED(res), "err init browser charset more menu");
}
res = InitAutodetMenu(kNC_BrowserAutodetMenuRoot);
NS_ASSERTION(NS_SUCCEEDED(res), "err init chardet menu");
mSecondaryTiersInitialized = NS_SUCCEEDED(res);
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitSecondaryTiers");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitSecondaryTiers");
return res;
}
@@ -899,6 +1003,8 @@ nsresult nsCharsetMenu::InitStaticMenu(
const char * aKey,
nsVoidArray * aArray)
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitStaticMenu");
nsresult res = NS_OK;
nsCOMPtr<nsIRDFContainer> container;
@@ -912,6 +1018,9 @@ nsresult nsCharsetMenu::InitStaticMenu(
res = AddFromPrefsToMenu(aArray, container, aKey, aDecs, "charset.");
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing static charset menu from prefs");
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitStaticMenu");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitStaticMenu");
return res;
}
@@ -921,6 +1030,8 @@ nsresult nsCharsetMenu::InitCacheMenu(
const char * aKey,
nsVoidArray * aArray)
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitCacheMenu");
nsresult res = NS_OK;
nsCOMPtr<nsIRDFContainer> container;
@@ -930,36 +1041,49 @@ nsresult nsCharsetMenu::InitCacheMenu(
res = AddFromNolocPrefsToMenu(aArray, container, aKey, aDecs, "charset.");
NS_ASSERTION(NS_SUCCEEDED(res), "error initializing cache charset menu from prefs");
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitCacheMenu");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitCacheMenu");
return res;
}
nsresult nsCharsetMenu::InitAutodetMenu(nsIRDFResource * aResource)
nsresult nsCharsetMenu::InitAutodetMenu()
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitAutodetMenu");
nsresult res = NS_OK;
nsVoidArray chardetArray;
nsCOMPtr<nsIRDFContainer> container;
res = NewRDFContainer(mInner, aResource, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
if (!mAutoDetectInitialized) {
nsVoidArray chardetArray;
nsCOMPtr<nsIRDFContainer> container;
nsCOMPtr<nsISupportsArray> array;
res = mCCManager->GetCharsetDetectorList(getter_AddRefs(array));
if (NS_FAILED(res)) goto done;
res = NewRDFContainer(mInner, kNC_BrowserAutodetMenuRoot, getter_AddRefs(container));
if (NS_FAILED(res)) return res;
res = AddCharsetArrayToItemArray(&chardetArray, array);
if (NS_FAILED(res)) goto done;
nsCOMPtr<nsISupportsArray> array;
res = mCCManager->GetCharsetDetectorList(getter_AddRefs(array));
if (NS_FAILED(res)) goto done;
// reorder the array
res = ReorderMenuItemArray(&chardetArray);
if (NS_FAILED(res)) goto done;
res = AddCharsetArrayToItemArray(&chardetArray, array);
if (NS_FAILED(res)) goto done;
res = AddMenuItemArrayToContainer(container, &chardetArray,
kNC_CharsetDetector);
if (NS_FAILED(res)) goto done;
// reorder the array
res = ReorderMenuItemArray(&chardetArray);
if (NS_FAILED(res)) goto done;
done:
// free the elements in the VoidArray
FreeMenuItemArray(&chardetArray);
res = AddMenuItemArrayToContainer(container, &chardetArray,
kNC_CharsetDetector);
if (NS_FAILED(res)) goto done;
done:
// free the elements in the VoidArray
FreeMenuItemArray(&chardetArray);
}
mAutoDetectInitialized = NS_SUCCEEDED(res);
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitAutodetMenu");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitAutodetMenu");
return res;
}
@@ -969,6 +1093,8 @@ nsresult nsCharsetMenu::InitMoreMenu(
nsIRDFResource * aResource,
char * aFlag)
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitMoreMenu");
nsresult res = NS_OK;
nsCOMPtr<nsIRDFContainer> container;
nsVoidArray moreMenu;
@@ -995,12 +1121,17 @@ done:
// free the elements in the VoidArray
FreeMenuItemArray(&moreMenu);
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitMoreMenu");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitMoreMenu");
return res;
}
// XXX please make this method more general; the cut&pasted code is laughable
nsresult nsCharsetMenu::InitMoreSubmenus(nsISupportsArray * aDecs)
{
NS_TIMELINE_START_TIMER("nsCharsetMenu::InitMoreSubmenus");
nsresult res = NS_OK;
nsCOMPtr<nsIRDFContainer> container1;
@@ -1039,6 +1170,9 @@ nsresult nsCharsetMenu::InitMoreSubmenus(nsISupportsArray * aDecs)
if (NS_FAILED(res)) return res;
AddFromPrefsToMenu(NULL, container5, key5, aDecs, NULL);
NS_TIMELINE_STOP_TIMER("nsCharsetMenu::InitMoreSubmenus");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu::InitMoreSubmenus");
return res;
}
@@ -1386,6 +1520,42 @@ nsresult nsCharsetMenu::WriteCacheToPrefs(nsVoidArray * aArray,
return res;
}
nsresult nsCharsetMenu::UpdateCachePrefs(const char * aCacheKey,
const char * aCacheSizeKey,
const char * aStaticKey,
const PRUnichar * aCharset)
{
nsresult res = NS_OK;
char * cachePrefValue = NULL;
char * staticPrefValue = NULL;
const char * currentCharset = NS_ConvertUCS2toUTF8(aCharset).get();
PRInt32 cacheSize = 0;
res = mPrefs->GetCharPref(aCacheKey, &cachePrefValue);
res = mPrefs->GetCharPref(aStaticKey, &staticPrefValue);
res = mPrefs->GetIntPref(aCacheSizeKey, &cacheSize);
nsCAutoString strCachePrefValue(cachePrefValue);
nsCAutoString strStaticPrefValue(staticPrefValue);
if ((strCachePrefValue.Find(currentCharset) == -1) &&
(strStaticPrefValue.Find(currentCharset) == -1)) {
if (!strCachePrefValue.IsEmpty())
strCachePrefValue.Insert(", ", 0);
strCachePrefValue.Insert(currentCharset, 0);
if ((cacheSize - 1) < (PRInt32) strCachePrefValue.CountChar(','))
strCachePrefValue.Truncate(strCachePrefValue.RFindChar(','));
res = mPrefs->SetCharPref(aCacheKey, PromiseFlatCString(strCachePrefValue).get());
}
nsMemory::Free(cachePrefValue);
nsMemory::Free(staticPrefValue);
return res;
}
nsresult nsCharsetMenu::ClearMenu(nsIRDFContainer * aContainer,
nsVoidArray * aArray)
{
@@ -1581,52 +1751,81 @@ nsresult nsCharsetMenu::GetCollation(nsICollation ** aCollation)
NS_IMETHODIMP nsCharsetMenu::SetCurrentCharset(const PRUnichar * aCharset)
{
NS_TIMELINE_START_TIMER("nsCharsetMenu:SetCurrentCharset");
nsresult res;
nsCOMPtr<nsIAtom> atom;
res = mCCManager->GetCharsetAtom(aCharset, getter_AddRefs(atom));
if (NS_FAILED(res)) return res;
if (mBrowserMenuInitialized) {
nsCOMPtr<nsIAtom> atom;
res = mCCManager->GetCharsetAtom(aCharset, getter_AddRefs(atom));
if (NS_FAILED(res)) {
NS_TIMELINE_LEAVE("nsCharsetMenu:SetCurrentCharset");
return res;
}
res = AddCharsetToCache(atom, &mBrowserMenu, kNC_BrowserCharsetMenuRoot,
mBrowserCacheStart, mBrowserCacheSize, mBrowserMenuRDFPosition);
if (NS_FAILED(res)) {
NS_TIMELINE_LEAVE("nsCharsetMenu:SetCurrentCharset");
return res;
}
res = AddCharsetToCache(atom, &mBrowserMenu, kNC_BrowserCharsetMenuRoot,
mBrowserCacheStart, mBrowserCacheSize, mBrowserMenuRDFPosition);
if (NS_FAILED(res)) return res;
res = WriteCacheToPrefs(&mBrowserMenu, mBrowserCacheStart,
kBrowserCachePrefKey);
res = WriteCacheToPrefs(&mBrowserMenu, mBrowserCacheStart,
kBrowserCachePrefKey);
} else {
UpdateCachePrefs(kBrowserCachePrefKey, kBrowserCacheSizePrefKey,
kBrowserStaticPrefKey, aCharset);
}
NS_TIMELINE_STOP_TIMER("nsCharsetMenu:SetCurrentCharset");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu:SetCurrentCharset");
return res;
}
NS_IMETHODIMP nsCharsetMenu::SetCurrentMailCharset(const PRUnichar * aCharset)
{
NS_TIMELINE_START_TIMER("nsCharsetMenu:SetCurrentMailCharset");
nsresult res;
nsCOMPtr<nsIAtom> atom;
res = mCCManager->GetCharsetAtom(aCharset, getter_AddRefs(atom));
if (NS_FAILED(res)) return res;
if (mMailviewMenuInitialized) {
nsCOMPtr<nsIAtom> atom;
res = mCCManager->GetCharsetAtom(aCharset, getter_AddRefs(atom));
if (NS_FAILED(res)) return res;
res = AddCharsetToCache(atom, &mMailviewMenu, kNC_MailviewCharsetMenuRoot,
mMailviewCacheStart, mMailviewCacheSize, mMailviewMenuRDFPosition);
if (NS_FAILED(res)) return res;
res = AddCharsetToCache(atom, &mMailviewMenu, kNC_MailviewCharsetMenuRoot,
mMailviewCacheStart, mMailviewCacheSize, mMailviewMenuRDFPosition);
if (NS_FAILED(res)) return res;
res = WriteCacheToPrefs(&mMailviewMenu, mMailviewCacheStart,
kMailviewCachePrefKey);
res = WriteCacheToPrefs(&mMailviewMenu, mMailviewCacheStart,
kMailviewCachePrefKey);
} else {
UpdateCachePrefs(kMailviewCachePrefKey, kMailviewCacheSizePrefKey,
kMailviewStaticPrefKey, aCharset);
}
NS_TIMELINE_STOP_TIMER("nsCharsetMenu:SetCurrentMailCharset");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu:SetCurrentMailCharset");
return res;
}
NS_IMETHODIMP nsCharsetMenu::SetCurrentComposerCharset(const PRUnichar * aCharset)
{
NS_TIMELINE_START_TIMER("nsCharsetMenu:SetCurrentComposerCharset");
nsresult res;
nsCOMPtr<nsIAtom> atom;
res = mCCManager->GetCharsetAtom(aCharset, getter_AddRefs(atom));
if (NS_FAILED(res)) return res;
if (mComposerMenuInitialized) {
nsCOMPtr<nsIAtom> atom;
res = mCCManager->GetCharsetAtom(aCharset, getter_AddRefs(atom));
if (NS_FAILED(res)) return res;
res = AddCharsetToCache(atom, &mComposerMenu, kNC_ComposerCharsetMenuRoot,
mComposerCacheStart, mComposerCacheSize, mComposerMenuRDFPosition);
if (NS_FAILED(res)) return res;
res = AddCharsetToCache(atom, &mComposerMenu, kNC_ComposerCharsetMenuRoot,
mComposerCacheStart, mComposerCacheSize, mComposerMenuRDFPosition);
if (NS_FAILED(res)) return res;
res = WriteCacheToPrefs(&mComposerMenu, mComposerCacheStart,
kComposerCachePrefKey);
res = WriteCacheToPrefs(&mComposerMenu, mComposerCacheStart,
kComposerCachePrefKey);
} else {
UpdateCachePrefs(kComposerCachePrefKey, kComposerCacheSizePrefKey,
kComposerStaticPrefKey, aCharset);
}
NS_TIMELINE_STOP_TIMER("nsCharsetMenu:SetCurrentComposerCharset");
NS_TIMELINE_MARK_TIMER("nsCharsetMenu:SetCurrentComposerCharset");
return res;
}

View File

@@ -36,6 +36,12 @@
width="500" height="394">
<script type="application/x-javascript" src="chrome://communicator/content/pref/pref-charset.js"/>
<script type="application/x-javascript">
<![CDATA[
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.notifyObservers(null, "charsetmenu-selected", "other");
]]>
</script>
<!--
<hbox class="box-smallheader" title="&charset.customize.left.header;" id="confirm_text" value="&charset.customize.save.popup;"/>

View File

@@ -35,6 +35,8 @@
<script type="application/x-javascript">
<![CDATA[
var _elementIDs = ["active_languages", "DefaultCharsetList"];
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.notifyObservers(null, "charsetmenu-selected", "other");
]]>
</script>