[orca] Fall back on gridcell name when generating name for nameless checkboxes



commit 57c96a7c3eb04d7fc0a8fb1ee6150e892e8513b6
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Mon Nov 30 14:59:57 2020 +0100

    Fall back on gridcell name when generating name for nameless checkboxes
    
    According to the ARIA spec, checkboxes are supposed to have a name.
    But if the author fails to provide a name, and we're in a gridcell,
    that gridcell might have presentable content. This is needed, for
    example, in the Chromium history list where focus goes to descendants
    of the gridcells and the checkbox for multi-selection lacks a name.

 src/orca/scripts/web/braille_generator.py | 3 +++
 src/orca/scripts/web/speech_generator.py  | 4 ++++
 2 files changed, 7 insertions(+)
---
diff --git a/src/orca/scripts/web/braille_generator.py b/src/orca/scripts/web/braille_generator.py
index 11cef3156..de5bdf243 100644
--- a/src/orca/scripts/web/braille_generator.py
+++ b/src/orca/scripts/web/braille_generator.py
@@ -172,6 +172,9 @@ class BrailleGenerator(braille_generator.BrailleGenerator):
         result = super()._generateName(obj, **args)
         if result and result[0] and not self._script.utilities.hasExplicitName(obj):
             result[0] = result[0].strip()
+        elif not result and obj.getRole() == pyatspi.ROLE_CHECK_BOX:
+            gridCell = pyatspi.findAncestor(obj, self._script.utilities.isGridCell)
+            return super()._generateName(gridCell, **args)
 
         return result
 
diff --git a/src/orca/scripts/web/speech_generator.py b/src/orca/scripts/web/speech_generator.py
index b8543b9da..b7f3f0434 100644
--- a/src/orca/scripts/web/speech_generator.py
+++ b/src/orca/scripts/web/speech_generator.py
@@ -341,6 +341,10 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
             result.extend(self.voice(speech_generator.DEFAULT))
             return result
 
+        if obj.getRole() == pyatspi.ROLE_CHECK_BOX:
+            gridCell = pyatspi.findAncestor(obj, self._script.utilities.isGridCell)
+            return super()._generateLabelOrName(gridCell, **args)
+
         return super()._generateLabelOrName(obj, **args)
 
     def _generateName(self, obj, **args):


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]