[orca] Chromium: Suppress rolename for child of collapsed select element



commit 7c81e89007c57bb4f64e617146a8dc8e866bf38e
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue Jul 30 16:17:19 2019 -0400

    Chromium: Suppress rolename for child of collapsed select element

 .../scripts/toolkits/Chromium/script_utilities.py  | 29 ++++++++++++++++------
 src/orca/scripts/web/script_utilities.py           |  3 +++
 src/orca/scripts/web/speech_generator.py           |  2 ++
 3 files changed, 26 insertions(+), 8 deletions(-)
---
diff --git a/src/orca/scripts/toolkits/Chromium/script_utilities.py 
b/src/orca/scripts/toolkits/Chromium/script_utilities.py
index 72964e516..d8fd8b8f3 100644
--- a/src/orca/scripts/toolkits/Chromium/script_utilities.py
+++ b/src/orca/scripts/toolkits/Chromium/script_utilities.py
@@ -174,6 +174,26 @@ class Utilities(web.Utilities):
 
         return not self.selectedChildCount(obj)
 
+    def isMenuInCollapsedSelectElement(self, obj):
+        try:
+            role = obj.getRole()
+        except:
+            msg = "CHROMIUM: Exception getting role for %s" % obj
+            debug.println(debug.LEVEL_INFO, msg, True)
+            return False
+
+        if role != pyatspi.ROLE_MENU or self._getTag(obj.parent) != 'select':
+            return False
+
+        try:
+            parentState = obj.parent.getState()
+        except:
+            msg = "CHROMIUM: Exception getting state for %s" % obj.parent
+            debug.println(debug.LEVEL_INFO, msg, True)
+            return False
+
+        return not parentState.contains(pyatspi.STATE_EXPANDED)
+
     def treatAsMenu(self, obj):
         if not obj:
             return False
@@ -375,14 +395,7 @@ class Utilities(web.Utilities):
         if not super().isHidden(obj):
             return False
 
-        try:
-            role = obj.getRole()
-        except:
-            msg = "CHROMIUM: Exception getting role for %s" % obj
-            debug.println(debug.LEVEL_INFO, msg, True)
-            return True
-
-        if role == pyatspi.ROLE_MENU and self._getTag(obj.parent) == 'select':
+        if self.isMenuInCollapsedSelectElement(obj):
             return False
 
         return True
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index 99dfa813a..a8551b0c0 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -2563,6 +2563,9 @@ class Utilities(script_utilities.Utilities):
         self._isLabelDescendant[hash(obj)] = rv
         return rv
 
+    def isMenuInCollapsedSelectElement(self, obj):
+        return False
+
     def isMenuDescendant(self, obj):
         if not obj:
             return False
diff --git a/src/orca/scripts/web/speech_generator.py b/src/orca/scripts/web/speech_generator.py
index 83548b213..5bb9c3f60 100644
--- a/src/orca/scripts/web/speech_generator.py
+++ b/src/orca/scripts/web/speech_generator.py
@@ -357,6 +357,8 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
                 doNotSpeak.append(obj.getRole())
             if total > 1:
                 doNotSpeak.append(pyatspi.ROLE_ROW_HEADER)
+            if self._script.utilities.isMenuInCollapsedSelectElement(obj):
+                doNotSpeak.append(pyatspi.ROLE_MENU)
 
         if obj.getState().contains(pyatspi.STATE_EDITABLE):
             lastKey, mods = self._script.utilities.lastKeyAndModifiers()


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