mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-25 19:25:43 +00:00
Bug 1545700 - Eagerly render <menu> inserted into already-opened menupopup r=surkov
Differential Revision: https://phabricator.services.mozilla.com/D28198 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
2eece48676
commit
77c278c728
@ -10,7 +10,7 @@
|
||||
<script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
|
||||
|
||||
<menu id="menu">
|
||||
<menupopup onpopupshown="this.firstChild.open = true" onpopuphidden="if (event.target == this) done()">
|
||||
<menupopup onpopuphidden="if (event.target == this) done()">
|
||||
<menu id="submenu" label="One">
|
||||
<menupopup onpopupshown="submenuOpened();">
|
||||
<menuitem label="Two"/>
|
||||
@ -26,12 +26,25 @@ SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function runTests()
|
||||
{
|
||||
$("menu").open = true;
|
||||
var menu = $("menu");
|
||||
menu.menupopup.addEventListener("popupshown", () => {
|
||||
var submenu = $("submenu");
|
||||
is(submenu.querySelector(".menu-text").value, "One", "submenu has rendered.");
|
||||
|
||||
var submenuDynamic = document.createXULElement("menu");
|
||||
submenuDynamic.setAttribute("label", "Dynamic");
|
||||
ok(!submenuDynamic.querySelector(".menu-text"), "dynamic subment hasn't rendered yet.");
|
||||
menu.menupopup.append(submenuDynamic);
|
||||
is(submenuDynamic.querySelector(".menu-text").value, "Dynamic", "dynamic submenu has rendered.");
|
||||
|
||||
menu.menupopup.firstElementChild.open = true;
|
||||
}, { once: true });
|
||||
menu.open = true;
|
||||
}
|
||||
|
||||
function submenuOpened()
|
||||
{
|
||||
var submenu = $("submenu")
|
||||
var submenu = $("submenu");
|
||||
is(submenu.getAttribute('_moz-menuactive'), "true", "menu highlighted");
|
||||
submenu.hidden = true;
|
||||
$("menu").open = false;
|
||||
|
@ -144,6 +144,7 @@ window.addEventListener("popupshowing", (e) => {
|
||||
if (e.originalTarget.ownerDocument != document) {
|
||||
return;
|
||||
}
|
||||
e.originalTarget.setAttribute("hasbeenopened", "true");
|
||||
for (let menu of e.originalTarget.querySelectorAll("menu")) {
|
||||
menu.render();
|
||||
}
|
||||
@ -167,7 +168,7 @@ class MozMenu extends MozMenuBaseMixin(MozElements.MozElementMixin(XULMenuElemen
|
||||
}
|
||||
|
||||
get needsEagerRender() {
|
||||
return this.isMenubarChild || this.isSizingPopup || !this.isInMenupopup;
|
||||
return this.isMenubarChild || this.isSizingPopup || !this.isInHiddenMenupopup;
|
||||
}
|
||||
|
||||
get isMenubarChild() {
|
||||
@ -178,8 +179,8 @@ class MozMenu extends MozMenuBaseMixin(MozElements.MozElementMixin(XULMenuElemen
|
||||
return this.matches("[sizetopopup] menu") || this.matches("menulist menu");
|
||||
}
|
||||
|
||||
get isInMenupopup() {
|
||||
return this.matches("menupopup menu");
|
||||
get isInHiddenMenupopup() {
|
||||
return this.matches("menupopup:not([hasbeenopened]) menu");
|
||||
}
|
||||
|
||||
get isIconic() {
|
||||
|
Loading…
Reference in New Issue
Block a user