[orca] Don't present labels whose target is a context element
- From: Joanmarie Diggs <joanied src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca] Don't present labels whose target is a context element
- Date: Mon, 23 Jan 2017 18:56:42 +0000 (UTC)
commit 479cb1faff8b86565a7253fec9d46fd30d3f8494
Author: Joanmarie Diggs <jdiggs igalia com>
Date: Mon Jan 23 19:53:09 2017 +0100
Don't present labels whose target is a context element
src/orca/scripts/web/script_utilities.py | 50 +++++++++++++++++++----------
src/orca/scripts/web/speech_generator.py | 9 +++--
2 files changed, 39 insertions(+), 20 deletions(-)
---
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index a4903bb..f29473d 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -81,6 +81,7 @@ class Utilities(script_utilities.Utilities):
self._isParentOfNullChild = {}
self._inferredLabels = {}
self._actualLabels = {}
+ self._labelTargets = {}
self._displayedLabelText = {}
self._roleDescription = {}
self._shouldFilter = {}
@@ -140,6 +141,7 @@ class Utilities(script_utilities.Utilities):
self._isParentOfNullChild = {}
self._inferredLabels = {}
self._actualLabels = {}
+ self._labelTargets = {}
self._displayedLabelText = {}
self._roleDescription = {}
self._shouldFilter = {}
@@ -1992,7 +1994,7 @@ class Utilities(script_utilities.Utilities):
or self.isHidden(obj) \
or self.isOffScreenLabel(obj) \
or self.isUselessImage(obj) \
- or self.isLabellingContents(x, contents):
+ or self.isLabellingContents(obj, contents):
rv = False
widget = self.isInferredLabelForContents(x, contents)
@@ -2183,6 +2185,28 @@ class Utilities(script_utilities.Utilities):
return False
+ def labelTargets(self, obj):
+ if not (obj and self.inDocumentContent(obj)):
+ return False
+
+ rv = self._labelTargets.get(hash(obj))
+ if rv is not None:
+ return rv
+
+ rv = False
+
+ isLabel = lambda r: r.getRelationType() == pyatspi.RELATION_LABEL_FOR
+ relations = list(filter(isLabel, obj.getRelationSet()))
+ if not relations:
+ return []
+
+ r = relations[0]
+ rv = [r.getTarget(i) for i in range(r.getNTargets())]
+ rv = [hash(x) for x in rv if x is not None]
+
+ self._labelTargets[hash(obj)] = rv
+ return rv
+
def isInferredLabelForContents(self, content, contents):
obj, start, end, string = content
objs = list(filter(self.shouldInferLabelFor, [x[0] for x in contents]))
@@ -2196,24 +2220,16 @@ class Utilities(script_utilities.Utilities):
return None
- def isLabellingContents(self, content, contents):
- obj, start, end, string = content
- if obj.getRole() != pyatspi.ROLE_LABEL:
- return None
-
- relationSet = obj.getRelationSet()
- if not relationSet:
- return None
+ def isLabellingContents(self, obj, contents=[]):
+ targets = self.labelTargets(obj)
+ if not contents:
+ return bool(targets)
- for relation in relationSet:
- if relation.getRelationType() == pyatspi.RELATION_LABEL_FOR:
- for i in range(0, relation.getNTargets()):
- target = relation.getTarget(i)
- for content in contents:
- if content[0] == target:
- return target
+ for acc, start, end, string in contents:
+ if hash(acc) in targets:
+ return True
- return None
+ return False
def isAnchor(self, obj):
if not (obj and self.inDocumentContent(obj)):
diff --git a/src/orca/scripts/web/speech_generator.py b/src/orca/scripts/web/speech_generator.py
index 58bb78d..c7b7cc0 100644
--- a/src/orca/scripts/web/speech_generator.py
+++ b/src/orca/scripts/web/speech_generator.py
@@ -476,10 +476,13 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
if not 'priorObj' in args:
args['priorObj'] = self._script.utilities.getPriorContext()[0]
- result.extend(super().generateSpeech(obj, **args))
- result = list(filter(lambda x: x, result))
- self._restoreRole(oldRole, args)
+ if self._script.utilities.isLabellingContents(obj):
+ result = list(filter(lambda x: x, self.generateContext(obj, **args)))
+
+ if not result:
+ result = list(filter(lambda x: x, super().generateSpeech(obj, **args)))
+ self._restoreRole(oldRole, args)
msg = "WEB: Speech generation for document object %s complete:" % obj
debug.println(debug.LEVEL_INFO, msg)
for element in result:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]