[orca] Improve behavior navigating in tables in web-based rich-text editors



commit d792ba010b6994e0c92a4cffcb9ed17272453e9b
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue Apr 21 16:13:36 2020 -0400

    Improve behavior navigating in tables in web-based rich-text editors
    
    * Ensure we treat editable table cells as caret-navigable
    * Don't read the full row or present row headers for cells when
      navigating by line

 src/orca/scripts/web/script_utilities.py | 14 ++++++++++----
 src/orca/scripts/web/speech_generator.py |  4 +---
 2 files changed, 11 insertions(+), 7 deletions(-)
---
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index 7e8ac57fe..e48f51960 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -913,7 +913,10 @@ class Utilities(script_utilities.Utilities):
         elif role == pyatspi.ROLE_LIST_ITEM:
             rv = obj.parent.getRole() != pyatspi.ROLE_LIST
         elif role == pyatspi.ROLE_TABLE_CELL:
-            rv = not self.isTextBlockElement(obj)
+            if obj.getState().contains(pyatspi.STATE_EDITABLE):
+                rv = False
+            else:
+                rv = not self.isTextBlockElement(obj)
 
         self._isNonEntryTextWidget[hash(obj)] = rv
         return rv
@@ -1018,6 +1021,10 @@ class Utilities(script_utilities.Utilities):
         if role in roles:
             return True
 
+        state = obj.getState()
+        if state.contains(pyatspi.STATE_EDITABLE):
+            return False
+
         if role == pyatspi.ROLE_TABLE_CELL:
             if self.isFocusModeWidget(obj):
                 return True
@@ -1029,7 +1036,7 @@ class Utilities(script_utilities.Utilities):
             return True
 
         if role == pyatspi.ROLE_COMBO_BOX:
-            return not self.isEditableComboBox(obj)
+            return True
 
         if role == pyatspi.ROLE_EMBEDDED:
             return not self._script.browseModeIsSticky()
@@ -2727,8 +2734,7 @@ class Utilities(script_utilities.Utilities):
         if self.isGridDescendant(obj):
             return not self._script.inFocusMode()
 
-        # TODO - JD: This is private.
-        if self._script._lastCommandWasCaretNav:
+        if self.lastInputEventWasLineNav():
             return False
 
         return True
diff --git a/src/orca/scripts/web/speech_generator.py b/src/orca/scripts/web/speech_generator.py
index 4dd39fe82..6e92669c8 100644
--- a/src/orca/scripts/web/speech_generator.py
+++ b/src/orca/scripts/web/speech_generator.py
@@ -724,9 +724,7 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
         return super()._generateTableCellRow(obj, **args)
 
     def _generateRowHeader(self, obj, **args):
-        # TODO - JD: _lastCommandWasCaretNav is private.
-        if self._script.utilities.lastInputEventWasLineNav() \
-           and self._script._lastCommandWasCaretNav:
+        if self._script.utilities.lastInputEventWasLineNav():
             return []
 
         return super()._generateRowHeader(obj)


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