[orca] Improve heuristic to determine when switching back to browse mode for link



commit 9d6a74d4ebe0df52d1b41ed02e33455630fe7ebe
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Mon Apr 13 12:23:35 2020 -0400

    Improve heuristic to determine when switching back to browse mode for link
    
    Orca was changed to not automatically switch back to browse mode when
    the user was in focus mode and then focus moved to a link. This was done
    to prevent Orca from returning to browse mode for web apps where the
    author was using links for interactive lists (e.g. in Gmail). But this
    change had the side effect of Orca not returning to browse mode when
    the user is Tabbing amongst widgets and links. Therefore, for now limit
    remaining in focus mode when an unmodified arrow was used from within
    focus mode.

 src/orca/script_utilities.py   | 8 +++++++-
 src/orca/scripts/web/script.py | 5 +++--
 2 files changed, 10 insertions(+), 3 deletions(-)
---
diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
index 041f262a1..3243abe96 100644
--- a/src/orca/script_utilities.py
+++ b/src/orca/script_utilities.py
@@ -4932,7 +4932,13 @@ class Utilities:
         if not keyString in ["Left", "Right", "Up", "Down"]:
             return False
 
-        return not mods
+        if mods & keybindings.CTRL_MODIFIER_MASK \
+           or mods & keybindings.SHIFT_MODIFIER_MASK \
+           or mods & keybindings.ALT_MODIFIER_MASK \
+           or mods & keybindings.ORCA_MODIFIER_MASK:
+            return False
+
+        return True
 
     def lastInputEventWasCharNav(self):
         keyString, mods = self.lastKeyAndModifiers()
diff --git a/src/orca/scripts/web/script.py b/src/orca/scripts/web/script.py
index 39d58b478..4702b09e7 100644
--- a/src/orca/scripts/web/script.py
+++ b/src/orca/scripts/web/script.py
@@ -809,8 +809,9 @@ class Script(default.Script):
             return True
 
         doNotToggle = [pyatspi.ROLE_LINK, pyatspi.ROLE_RADIO_BUTTON]
-        if self._inFocusMode and obj and obj.getRole() in doNotToggle:
-            msg = "WEB: Staying in focus mode due to role of %s" % obj
+        if self._inFocusMode and obj and obj.getRole() in doNotToggle \
+           and self.utilities.lastInputEventWasUnmodifiedArrow():
+            msg = "WEB: Staying in focus mode due to arrowing in role of %s" % obj
             debug.println(debug.LEVEL_INFO, msg, True)
             return True
 


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