Bug 633575 - Preference/tools panels are broken if opened during initial page load [r=mfinkle]

--HG--
extra : rebase_source : 73b6cc16c4a0f7cfde9b86e830ba685127a2837a
This commit is contained in:
Matt Brubeck 2011-02-17 13:25:59 -08:00
parent b8e551ba10
commit 565ea12254
6 changed files with 31 additions and 55 deletions

View File

@ -500,10 +500,9 @@ var BrowserUI = {
Elements.tabs.addEventListener("TabOpen", BrowserUI, true);
Elements.tabs.addEventListener("TabRemove", BrowserUI, true);
// Init the views
// Init the tool panel views
ExtensionsView.init();
DownloadsView.init();
PreferencesView.init();
ConsoleView.init();
#ifdef MOZ_IPC
@ -535,6 +534,23 @@ var BrowserUI = {
#endif
}, false);
let panels = document.getElementById("panel-items");
let panelViews = { // Use strings to avoid lazy-loading objects too soon.
"prefs-container": "PreferencesView",
"downloads-container": "DownloadsView",
"addons-container": "ExtensionsView",
"console-container": "ConsoleView"
};
// Some initialization can be delayed until a panel is selected.
panels.addEventListener("select", function(aEvent) {
if (aEvent.target != panels)
return;
let viewName = panelViews[panels.selectedPanel.id];
if (viewName)
window[viewName].delayedInit();
}, true);
#ifndef MOZ_OFFICIAL_BRANDING
setTimeout(function() {
let startup = Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup_MOZILLA_2_0).getStartupInfo();

View File

@ -56,16 +56,6 @@ let ConsoleView = {
this._count = 0;
this.limit = 250;
let self = this;
let panels = document.getElementById("panel-items");
panels.addEventListener("select",
function(aEvent) {
if (panels.selectedPanel.id == "console-container")
self._delayedInit();
},
false);
try {
// update users using the legacy pref
if (Services.prefs.getBoolPref("browser.console.showInPanel")) {
@ -79,11 +69,13 @@ let ConsoleView = {
Services.prefs.addObserver(this._enabledPref, this, false);
},
_delayedInit: function cv__delayedInit() {
delayedInit: function cv__delayedInit() {
if (this._inited)
return;
this._inited = true;
this.init(); // In case the panel is selected before init has been called.
Services.console.registerListener(this);
this.appendInitialItems();
@ -94,8 +86,7 @@ let ConsoleView = {
this._evalFrame.collapsed = true;
document.getElementById("console-container").appendChild(this._evalFrame);
let self = this;
this._evalFrame.addEventListener("load", function() { self.loadOrDisplayResult(); }, true);
this._evalFrame.addEventListener("load", this.loadOrDisplayResult.bind(this), true);
},
uninit: function cv_uninit() {

View File

@ -146,21 +146,14 @@ var DownloadsView = {
// Monitor downloads being removed by the download manager (non-UI)
os.addObserver(this, "download-manager-remove-download", true);
let self = this;
let panels = document.getElementById("panel-items");
panels.addEventListener("select",
function(aEvent) {
if (panels.selectedPanel.id == "downloads-container")
self._delayedInit();
},
false);
},
_delayedInit: function dv__delayedInit() {
delayedInit: function dv__delayedInit() {
if (this._list)
return;
this.init(); // In case the panel is selected before init has been called.
this._list = document.getElementById("downloads-list");
if (this._dlmgr == null)

View File

@ -225,15 +225,6 @@ var ExtensionsView = {
if (!Services.prefs.getBoolPref("extensions.hideUpdateButton"))
document.getElementById("addons-update-all").hidden = false;
let self = this;
let panels = document.getElementById("panel-items");
panels.addEventListener("select",
function(aEvent) {
if (panels.selectedPanel.id == "addons-container")
self._delayedInit();
},
false);
#ifdef ANDROID
// Hide the notification
let alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
@ -243,10 +234,12 @@ var ExtensionsView = {
#endif
},
_delayedInit: function ev__delayedInit() {
delayedInit: function ev__delayedInit() {
if (this._list)
return;
this.init(); // In case the panel is selected before init has been called.
this._list = document.getElementById("addons-list");
this._localItem = document.getElementById("addons-local");
this._repoItem = document.getElementById("addons-repo");

View File

@ -97,28 +97,11 @@ var PreferencesView = {
}
},
init: function ev_init() {
if (this._msg)
return;
this._msg = document.getElementById("prefs-messages");
let self = this;
let panels = document.getElementById("panel-items");
panels.addEventListener("select",
function(aEvent) {
if (aEvent.target != panels)
return;
if (panels.selectedPanel.id == "prefs-container")
self._delayedInit();
},
false);
},
_delayedInit: function pv__delayedInit() {
delayedInit: function pv__delayedInit() {
if (this._languages)
return;
this._msg = document.getElementById("prefs-messages");
this._languages = document.getElementById("prefs-languages");
this._loadLocales();

View File

@ -269,7 +269,7 @@ function open_manager(aView, aCallback) {
BrowserUI.showPanel("addons-container");
ExtensionsView.init();
ExtensionsView._delayedInit();
ExtensionsView.delayedInit();
window.addEventListener("ViewChanged", function() {
window.removeEventListener("ViewChanged", arguments.callee, true);