Bug 750808, move children element in label control binding, so that it doesn't get deleted when setting accesskey, r=neil

This commit is contained in:
Neil Deakin 2012-05-16 19:55:09 -04:00
parent af83f58ade
commit f69df5a707
4 changed files with 70 additions and 2 deletions

View File

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="data:text/css,u { display: inline; text-decoration: underline; }" type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<hbox align="start">
<label control="b1"><u>L</u>abel1</label><textbox id="b1" size="2"/>
<label control="b2">Labe<u>l</u>2</label><textbox id="b2" size="2"/>
<label control="b3">La<u>b</u>el3</label><textbox id="b3" size="2"/>
<label control="b4">Label4 (<u>X</u>)</label><textbox id="b4" size="2"/>
<label control="b5" maxwidth="50">Quite a <u>l</u>ong label. Hopefully it will wrap</label><textbox id="b5" label="Button5" size="2"/>
</hbox>
<hbox id="d" align="start">
<label control="d1"><u>L</u>abel1</label><textbox id="d1" size="2"/>
<label control="d2">Labe<u>l</u>2</label><textbox id="d2" size="2"/>
<label control="d3">La<u>b</u>el3</label><textbox id="d3" size="2"/>
<label control="d4">Label4 (<u>X</u>)</label><textbox id="d4" size="2"/>
<label control="d5" maxwidth="50">Quite a <u>l</u>ong label. Hopefully it will wrap</label><textbox id="d5" size="2"/>
</hbox>
</window>

View File

@ -0,0 +1,43 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<!-- This test checks that access keys are rendered properly, both when set with the
accesskey attribute in the markup and updated via script later.
-->
<window class="reftest-wait" onload="changeKeys()"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script>
<![CDATA[
var keys = ['L', 'l', 'b', 'x', 'l'];
function changeKeys()
{
var box = document.getElementById('d');
for (var b = 0; b < 5; b++)
box.childNodes[b * 2].accessKey = keys[b];
document.documentElement.className='';
}
]]>
</script>
<hbox align="start">
<label control="b1">Label1</label><textbox id="b1" accesskey="L" size="2"/>
<label control="b2">Label2</label><textbox id="b2" accesskey="l" size="2"/>
<label control="b3">Label3</label><textbox id="b3" accesskey="b" size="2"/>
<label control="b4">Label4</label><textbox id="b4" accesskey="x" size="2"/>
<label control="b5" maxwidth="50">Quite a long label. Hopefully it will wrap</label><textbox id="b5" accesskey="l" size="2"/>
</hbox>
<hbox id="d" align="start">
<label control="d1">Label1</label><textbox id="d1" accesskey="z" size="2"/>
<label control="d2">Label2</label><textbox id="d2" size="2"/>
<label control="d3">Label3</label><textbox id="d3" accesskey="t" size="2"/>
<label control="d4">Label4</label><textbox id="d4" accesskey="b" size="2"/>
<label control="d5" maxwidth="50">Quite a long label. Hopefully it will wrap</label><textbox id="d5" accesskey="l" size="2"/>
</hbox>
</window>

View File

@ -3,3 +3,5 @@
random-if(Android) == menulist-shrinkwrap-1.xul menulist-shrinkwrap-1-ref.xul
random-if(Android) fails-if(winWidget) == menulist-shrinkwrap-2.xul menulist-shrinkwrap-2-ref.xul
== textbox-overflow-1.xul textbox-overflow-1-ref.xul # for bug 749658
# accesskeys are not normally displayed on Mac, so skip this test
skip-if(cocoaWidget) == accesskey.xul accesskey-ref.xul

View File

@ -57,7 +57,7 @@
<binding id="label-control" extends="chrome://global/content/bindings/text.xml#text-label">
<content>
<html:span anonid="accessKeyParens"><children/></html:span>
<children/><html:span anonid="accessKeyParens"></html:span>
</content>
<implementation implements="nsIDOMXULLabelElement">
<constructor>
@ -106,7 +106,7 @@
}
var afterLabel = document.getAnonymousElementByAttribute(this, "anonid", "accessKeyParens");
afterLabel.textContent = ""; // This does not clear real nodes!
afterLabel.textContent = "";
var oldAccessKey = this.getElementsByAttribute('class', 'accesskey').item(0);
if (oldAccessKey) { // Clear old accesskey