Commit 98f60a7f authored by Joanmarie Diggs's avatar Joanmarie Diggs Committed by Commit Bot

Emit AtkTable signals when aria-sort value changes

* Fire "row-reordered" when the rows are reordered due to aria-sort
  changing on a column header.
* Fire "column-reordered" when the columns are reordered due to
  aria-sort changing on a row header.

Note that there is no AtkObject signal for object attributes changing.
But the sort order can be obtained from the focused header in response
to the reordered signals.

Bug: 1074417, 1074380

Ax-Relnotes: Orca now announces when the sort order changes in a table.
Change-Id: Ie5b168af9189d903569bb2db3eb9b4e9548765f9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2339749Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: default avatarAaron Leventhal <aleventhal@chromium.org>
Commit-Queue: Joanmarie Diggs <jdiggs@igalia.com>
Cr-Commit-Position: refs/heads/master@{#797310}
parent 65a0bddc
......@@ -168,6 +168,8 @@ void AccessibilityEventRecorderAuraLinux::AddATKEventListeners() {
AddATKEventListener("ATK:AtkText:text-caret-moved");
AddATKEventListener("ATK:AtkText:text-attributes-changed");
AddATKEventListener("ATK:AtkSelection:selection-changed");
AddATKEventListener("ATK:AtkTable:column-reordered");
AddATKEventListener("ATK:AtkTable:row-reordered");
}
void AccessibilityEventRecorderAuraLinux::RemoveATKEventListeners() {
......
#<skip -- TODO(crbug.com/1074380)>
\ No newline at end of file
COLUMN-REORDERED role=ROLE_TABLE name='(null)' ENABLED,SENSITIVE,SHOWING,VISIBLE
ROW-REORDERED role=ROLE_TABLE name='(null)' ENABLED,SENSITIVE,SHOWING,VISIBLE
ROW-REORDERED role=ROLE_TABLE name='(null)' ENABLED,SENSITIVE,SHOWING,VISIBLE
ROW-REORDERED role=ROLE_TABLE name='(null)' ENABLED,SENSITIVE,SHOWING,VISIBLE
ROW-REORDERED role=ROLE_TABLE name='(null)' ENABLED,SENSITIVE,SHOWING,VISIBLE
......@@ -2,3 +2,4 @@ AriaProperties changed on role=columnheader, name=columnheader2
AriaProperties changed on role=columnheader, name=columnheader3
AriaProperties changed on role=columnheader, name=columnheader4
AriaProperties changed on role=columnheader, name=columnheader5
AriaProperties changed on role=rowheader, name=rowheader1
IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED on <div#ch0> role=ROLE_SYSTEM_ROWHEADER name="rowheader1"
IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED on <div#ch2> role=ROLE_SYSTEM_COLUMNHEADER name="columnheader2"
IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED on <div#ch3> role=ROLE_SYSTEM_COLUMNHEADER name="columnheader3"
IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED on <div#ch4> role=ROLE_SYSTEM_COLUMNHEADER name="columnheader4"
IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED on <div#ch5> role=ROLE_SYSTEM_COLUMNHEADER name="columnheader5"
\ No newline at end of file
IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED on <div#ch5> role=ROLE_SYSTEM_COLUMNHEADER name="columnheader5"
......@@ -3,6 +3,7 @@
<body>
<div role="grid">
<div role="row">
<div id="ch0" aria-label="rowheader1" role="rowheader" aria-sort="descending"></div>
<div id="ch1" aria-label="columnheader1" role="columnheader"></div>
<div id="ch2" aria-label="columnheader2" role="columnheader"></div>
<div id="ch3" aria-label="columnheader3" role="columnheader"></div>
......@@ -12,6 +13,9 @@
</div>
<script>
function go() {
// Set aria-sort from 'descending'->'ascending'; should fire an event.
document.getElementById('ch0').setAttribute('aria-sort', 'ascending');
// Set aria-sort from default 'none'->'none'; should not fire an event.
document.getElementById('ch1').setAttribute('aria-sort', 'none');
......
......@@ -3861,13 +3861,17 @@ void AXPlatformNodeAuraLinux::OnDescriptionChanged() {
}
void AXPlatformNodeAuraLinux::OnSortDirectionChanged() {
// TODO(crbug.com/1074380) fire correct event for aria-sort change.
// AtkObject* atk_object = GetOrCreateAtkObject();
// if (!atk_object)
// return;
AXPlatformNodeBase* table = GetTable();
if (!table)
return;
AtkObject* atk_table = table->GetNativeViewAccessible();
DCHECK(ATK_IS_TABLE(atk_table));
// std::string sort;
// GetStringAttribute(ax::mojom::StringAttribute::kSortDirection, &sort);
if (GetData().role == ax::mojom::Role::kColumnHeader)
g_signal_emit_by_name(atk_table, "row-reordered");
else if (GetData().role == ax::mojom::Role::kRowHeader)
g_signal_emit_by_name(atk_table, "column-reordered");
}
void AXPlatformNodeAuraLinux::OnValueChanged() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment