gecko-dev/browser/base/content/newtab/customize.js
Tim Taubert b584f990fc Bug 1077652 - Hide xul:panels by default when not opened r=gijs
We need to hide <xul:panel>s by default for performance reasons. The RefreshDriver calls gtk/nsWindow::GetClientOffset() in a hot loop and causes a lot of communication between us and the XServer. We and up poll()ing and waiting for XServer responses in RefreshDriver::Tick() which regresses performance on Linux by 50-100%.
2014-11-03 23:50:57 +01:00

76 lines
2 KiB
JavaScript

#ifdef 0
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#endif
let gCustomize = {
_nodeIDSuffixes: [
"blank",
"button",
"classic",
"enhanced",
"panel",
],
_nodes: {},
init: function() {
for (let idSuffix of this._nodeIDSuffixes) {
this._nodes[idSuffix] = document.getElementById("newtab-customize-" + idSuffix);
}
this._nodes.button.addEventListener("click", e => this.showPanel());
this._nodes.blank.addEventListener("click", e => {
gAllPages.enabled = false;
});
this._nodes.classic.addEventListener("click", e => {
gAllPages.enabled = true;
gAllPages.enhanced = false;
});
this._nodes.enhanced.addEventListener("click", e => {
gAllPages.enabled = true;
gAllPages.enhanced = true;
});
this.updateSelected();
},
showPanel: function() {
let nodes = this._nodes;
let {button, panel} = nodes;
if (button.hasAttribute("active")) {
return Promise.resolve(nodes);
}
panel.hidden = false;
panel.openPopup(button);
button.setAttribute("active", true);
panel.addEventListener("popuphidden", function onHidden() {
panel.removeEventListener("popuphidden", onHidden);
panel.hidden = true;
button.removeAttribute("active");
});
return new Promise(resolve => {
panel.addEventListener("popupshown", function onShown() {
panel.removeEventListener("popupshown", onShown);
resolve(nodes);
});
});
},
updateSelected: function() {
let {enabled, enhanced} = gAllPages;
let selected = enabled ? enhanced ? "enhanced" : "classic" : "blank";
["enhanced", "classic", "blank"].forEach(id => {
let node = this._nodes[id];
if (id == selected) {
node.setAttribute("selected", true);
}
else {
node.removeAttribute("selected");
}
});
},
};