[orca] Web: Also announce the header and sort order when aria-sort changes
- From: Joanmarie Diggs <joanied src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca] Web: Also announce the header and sort order when aria-sort changes
- Date: Fri, 7 Aug 2020 10:32:45 +0000 (UTC)
commit 7c4e39e3d8daaca3667beb02c25e9e64c09ef88b
Author: Joanmarie Diggs <jdiggs igalia com>
Date: Fri Aug 7 12:31:08 2020 +0200
Web: Also announce the header and sort order when aria-sort changes
Note: This support requires browsers to emit the expected signals.
Chromium will soon; Firefox doesn't yet.
src/orca/generator.py | 11 +++--------
src/orca/script_utilities.py | 33 +++++++++++++++++++++++++++++++++
src/orca/scripts/web/script.py | 8 ++++++++
3 files changed, 44 insertions(+), 8 deletions(-)
---
diff --git a/src/orca/generator.py b/src/orca/generator.py
index 5d3aedc03..c825eb853 100644
--- a/src/orca/generator.py
+++ b/src/orca/generator.py
@@ -809,16 +809,11 @@ class Generator:
return result
def _generateSortOrder(self, obj, **args):
- if not self._script.utilities.isSorted(obj):
+ description = self._script.utilities.getSortOrderDescription(obj)
+ if not description:
return []
- if self._script.utilities.isAscending(obj):
- return [object_properties.SORT_ORDER_ASCENDING]
-
- if self._script.utilities.isDescending(obj):
- return [object_properties.SORT_ORDER_DESCENDING]
-
- return [object_properties.SORT_ORDER_OTHER]
+ return [description]
def _generateTableCell2ChildLabel(self, obj, **args):
"""Returns an array of strings for use by speech and braille for the
diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
index 06609551e..76b6e8c52 100644
--- a/src/orca/script_utilities.py
+++ b/src/orca/script_utilities.py
@@ -1399,12 +1399,31 @@ class Utilities:
return _settingsManager.getSetting('readFullRowInDocumentTable')
+ def isSorted(self, obj):
+ return False
+
def isAscending(self, obj):
return False
def isDescending(self, obj):
return False
+ def getSortOrderDescription(self, obj, includeName=False):
+ if not (obj and self.isSorted(obj)):
+ return ""
+
+ if self.isAscending(obj):
+ result = object_properties.SORT_ORDER_ASCENDING
+ elif self.isDescending(obj):
+ result = object_properties.SORT_ORDER_DESCENDING
+ else:
+ result = object_properties.SORT_ORDER_OTHER
+
+ if includeName and obj.name:
+ result = "%s. %s" % (obj.name, result)
+
+ return result
+
def isFocusableLabel(self, obj):
try:
role = obj.getRole()
@@ -4190,6 +4209,20 @@ class Utilities:
return False
+ def containingTableHeader(self, obj):
+ if not obj:
+ return None
+
+ roles = [pyatspi.ROLE_COLUMN_HEADER,
+ pyatspi.ROLE_ROW_HEADER,
+ pyatspi.ROLE_TABLE_COLUMN_HEADER,
+ pyatspi.ROLE_TABLE_ROW_HEADER]
+ isHeader = lambda x: x and x.getRole() in roles
+ if isHeader(obj):
+ return obj
+
+ return pyatspi.findAncestor(obj, isHeader)
+
def columnHeadersForCell(self, obj):
if not (obj and obj.getRole() == pyatspi.ROLE_TABLE_CELL):
return []
diff --git a/src/orca/scripts/web/script.py b/src/orca/scripts/web/script.py
index eadaf2eba..9d51745a0 100644
--- a/src/orca/scripts/web/script.py
+++ b/src/orca/scripts/web/script.py
@@ -1807,6 +1807,10 @@ class Script(default.Script):
self.pointOfReference['last-table-sort-time'] = time.time()
self.presentMessage(messages.TABLE_REORDERED_COLUMNS)
+ header = self.utilities.containingTableHeader(orca_state.locusOfFocus)
+ if header:
+ self.presentMessage(self.utilities.getSortOrderDescription(header, True))
+
return True
def onDocumentLoadComplete(self, event):
@@ -2038,6 +2042,10 @@ class Script(default.Script):
self.pointOfReference['last-table-sort-time'] = time.time()
self.presentMessage(messages.TABLE_REORDERED_ROWS)
+ header = self.utilities.containingTableHeader(orca_state.locusOfFocus)
+ if header:
+ self.presentMessage(self.utilities.getSortOrderDescription(header, True))
+
return True
def onSelectedChanged(self, event):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]