Bug 1008502 - Activate first operable descendant when landing on containers. r=MarcoZ

.. and don't land on containers with a mix of operable and not operable children.
This commit is contained in:
Eitan Isaacson 2014-05-14 16:47:53 -05:00
Родитель 0e677f5560
Коммит b679a28c6d
6 изменённых файлов: 36 добавлений и 11 удалений

Просмотреть файл

@ -221,9 +221,26 @@ this.ContentControl.prototype = {
return;
}
// recursively find a descendant that is activatable.
let getActivatableDescendant = (aAccessible) => {
if (aAccessible.actionCount > 0) {
return aAccessible;
}
for (let acc = aAccessible.firstChild; acc; acc = acc.nextSibling) {
let activatable = getActivatableDescendant(acc);
if (activatable) {
return activatable;
}
}
return null;
};
let vc = this.vc;
if (!this.sendToChild(vc, aMessage)) {
activateAccessible(vc.position);
let position = vc.position;
activateAccessible(getActivatableDescendant(position) || position);
}
},

Просмотреть файл

@ -113,7 +113,7 @@ var gSimpleMatchFunc = function gSimpleMatchFunc(aAccessible) {
function isFlatSubtree(acc) {
for (let child = acc.firstChild; child; child = child.nextSibling) {
if (child.childCount > 0) {
if (child.childCount > 0 || child.actionCount > 0) {
return false;
}
}

Просмотреть файл

@ -8,7 +8,9 @@
'<head><title>such app</title></head>' +
'<body>' +
'<h1>wow</h1>' +
'<label><input type="checkbox">many option</label><br>' +
'<ul>' +
'<li><label><input type="checkbox">many option</label></li>' +
'</ul>' +
'<label for="r">much range</label>' +
'<input min="0" max="10" value="5" type="range" id="r">' +
'</body>' +

Просмотреть файл

@ -37,7 +37,7 @@
<label for="checkbox-1-3">But not me: </label>
<input id="checkbox-1-3" type="checkbox" aria-hidden="true">
<label for="checkbox-1-4">Or me! </label>
<input id="checkbox-1-3" type="checkbox" style="visibility:hidden">
<input id="checkbox-1-4" type="checkbox" style="visibility:hidden">
<select id="select-1-3" size="3">
<option>Value 1</option>
<option>Value 2</option>
@ -67,6 +67,9 @@
<li id="listitem-3-1">Scheme</li>
<li id="listitem-3-2">Racket</li>
<li id="listitem-3-3">Clojure</li>
<li id="listitem-3-4"><strong>Standard</strong> Lisp</li>
<li id="listitem-3-5"><a id="link-0" href="#">Common</a> Lisp</li>
<li id="listitem-3-6"><input id="checkbox-1-5" type="checkbox"> LeLisp</li>
</ol>
</li>
<li id="listitem-2-3">JavaScript</li>

Просмотреть файл

@ -36,7 +36,7 @@
speak: 'wow heading level 1 such app'
}],
[ContentMessages.simpleMoveNext, {
speak: 'many option not checked check button'
speak: 'many option not checked check button First item list 1 item'
}],
// check checkbox
[ContentMessages.activateCurrent(), {
@ -64,7 +64,7 @@
speak: 'much range label'
}],
[ContentMessages.simpleMovePrevious, {
speak: 'many option checked check button'
speak: 'many option checked check button First item list 1 item'
}],
// uncheck checkbox
[ContentMessages.activateCurrent(), {
@ -99,7 +99,7 @@
speak: 'wow heading level 1 such app'
}],
[ContentMessages.simpleMoveNext, {
speak: 'many option not checked check button'
speak: 'many option not checked check button First item list 1 item'
}],
[ContentMessages.simpleMoveFirst, {
speak: 'Phone status bar',

Просмотреть файл

@ -56,7 +56,7 @@
'select-1-1', 'select-1-2', 'checkbox-1-2',
'select-1-3', 'input-1-5', 'button-1-3',
'button-2-1', 'button-2-2', 'button-2-3',
'button-2-4']);
'button-2-4', 'checkbox-1-5']);
queueTraversalSequence(gQueue, docAcc, TraversalRules.Button, null,
['button-1-1', 'button-1-2', 'button-1-3',
@ -67,7 +67,7 @@
['radio-1-1', 'radio-1-2']);
queueTraversalSequence(gQueue, docAcc, TraversalRules.Checkbox, null,
['checkbox-1-1', 'checkbox-1-2']);
['checkbox-1-1', 'checkbox-1-2', 'checkbox-1-5']);
queueTraversalSequence(gQueue, docAcc, TraversalRules.Combobox, null,
['select-1-1', 'select-1-2', 'select-1-3']);
@ -78,13 +78,14 @@
queueTraversalSequence(gQueue, docAcc, TraversalRules.ListItem, null,
['listitem-1-1', 'listitem-2-1', 'listitem-2-2',
'listitem-3-1', 'listitem-3-2', 'listitem-3-3',
'listitem-3-4', 'listitem-3-5', 'listitem-3-6',
'listitem-2-3']);
queueTraversalSequence(gQueue, docAcc, TraversalRules.Graphic, null,
['image-2', 'image-3']);
queueTraversalSequence(gQueue, docAcc, TraversalRules.Link, null,
['link-1', 'link-2', 'link-3']);
['link-0', 'link-1', 'link-2', 'link-3']);
queueTraversalSequence(gQueue, docAcc, TraversalRules.Anchor, null,
['anchor-1', 'anchor-2']);
@ -112,7 +113,9 @@
'formidable warriors, for its unrelenting strict' +
' power is unfathomable.',
'• Lists of Programming Languages', 'Lisp ',
'1. Scheme', '2. Racket', '3. Clojure', '• JavaScript', 'heading-5',
'1. Scheme', '2. Racket', '3. Clojure',
'4. Standard Lisp', 'link-0', ' Lisp', 'checkbox-1-5',
' LeLisp', '• JavaScript', 'heading-5',
'image-2', 'image-3', 'Not actually an image',
'link-1', 'anchor-1', 'link-2', 'anchor-2', 'link-3',
'3', '1', '4', '1', 'Just an innocuous separator',