зеркало из https://github.com/mozilla/gecko-dev.git
Bug 792324 - access keys are fired for non-open popups. r=enndeakin
This commit is contained in:
Родитель
2c2237472a
Коммит
cccfa62453
|
@ -89,6 +89,7 @@ MOCHITEST_CHROME_FILES = findbar_window.xul \
|
|||
test_bug557987.xul\
|
||||
test_bug562554.xul \
|
||||
test_bug585946.xul \
|
||||
test_bug792324.xul \
|
||||
test_button.xul \
|
||||
test_closemenu_attribute.xul \
|
||||
test_colorpicker_popup.xul \
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=792324
|
||||
-->
|
||||
<window title="Mozilla Bug 792324"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<title>Test for Bug 792324</title>
|
||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=792324">Mozilla Bug 792324</a>
|
||||
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<panel id="panel-1">
|
||||
<button label="just a normal button"/>
|
||||
<button id="button-1"
|
||||
accesskey="X"
|
||||
oncommand="clicked(event)"
|
||||
label="Button in panel 1"
|
||||
/>
|
||||
</panel>
|
||||
|
||||
<panel id="panel-2">
|
||||
<button label="just a normal button"/>
|
||||
<button id="button-2"
|
||||
accesskey="X"
|
||||
oncommand="clicked(event)"
|
||||
label="Button in panel 2"
|
||||
/>
|
||||
</panel>
|
||||
|
||||
<script class="testbody" type="application/javascript;version=1.7"><![CDATA[
|
||||
|
||||
/** Test for Bug 792324 **/
|
||||
let after_click;
|
||||
|
||||
function clicked(event) {
|
||||
after_click(event);
|
||||
}
|
||||
|
||||
function checkAccessKeyOnPanel(panelid, buttonid, cb) {
|
||||
let panel = document.getElementById(panelid);
|
||||
panel.addEventListener("popupshown", function onpopupshown() {
|
||||
panel.removeEventListener("popupshown", onpopupshown);
|
||||
panel.firstChild.focus();
|
||||
after_click = function(event) {
|
||||
is(event.target.id, buttonid, "Accesskey was directed to the button '" + buttonid + "'");
|
||||
panel.hidePopup();
|
||||
cb();
|
||||
}
|
||||
synthesizeKey("X", {});
|
||||
});
|
||||
panel.openPopup(null, "", 100, 100, false, false);
|
||||
}
|
||||
|
||||
function test() {
|
||||
checkAccessKeyOnPanel("panel-1", "button-1", function() {
|
||||
checkAccessKeyOnPanel("panel-2", "button-2", function() {
|
||||
SimpleTest.finish();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SimpleTest.waitForFocus(test, window);
|
||||
|
||||
]]></script>
|
||||
|
||||
</window>
|
|
@ -89,8 +89,17 @@
|
|||
<parameter name="node"/>
|
||||
<body>
|
||||
<![CDATA[
|
||||
if (node.localName == "button" && node.accessKey &&
|
||||
!node.disabled && !node.collapsed && !node.hidden)
|
||||
// if the node isn't visible, don't descend into it.
|
||||
var cs = node.ownerDocument.defaultView.getComputedStyle(node, null);
|
||||
if (cs.visibility != "visible" || cs.display == "none") {
|
||||
return NodeFilter.FILTER_REJECT;
|
||||
}
|
||||
// but it may be a popup element, in which case we look at "state"...
|
||||
if (cs.display == "-moz-popup" && node.state != "open") {
|
||||
return NodeFilter.FILTER_REJECT;
|
||||
}
|
||||
// OK - the node seems visible, so it is a candidate.
|
||||
if (node.localName == "button" && node.accessKey && !node.disabled)
|
||||
return NodeFilter.FILTER_ACCEPT;
|
||||
return NodeFilter.FILTER_SKIP;
|
||||
]]>
|
||||
|
|
Загрузка…
Ссылка в новой задаче