[orca] Improve presentation of non-empty anchors



commit d8754a5a1f39d6e1f5a7da9263b3daafcb337f0f
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Thu Nov 26 01:24:11 2015 -0500

    Improve presentation of non-empty anchors

 src/orca/scripts/web/braille_generator.py |    5 +++--
 src/orca/scripts/web/script.py            |    9 ++++++++-
 src/orca/scripts/web/script_utilities.py  |   10 +++++++---
 src/orca/scripts/web/speech_generator.py  |    6 +++++-
 4 files changed, 23 insertions(+), 7 deletions(-)
---
diff --git a/src/orca/scripts/web/braille_generator.py b/src/orca/scripts/web/braille_generator.py
index 371b480..8d65925 100644
--- a/src/orca/scripts/web/braille_generator.py
+++ b/src/orca/scripts/web/braille_generator.py
@@ -83,7 +83,7 @@ class BrailleGenerator(braille_generator.BrailleGenerator):
             level = self._script.utilities.headingLevel(obj)
             result.append(object_properties.ROLE_HEADING_LEVEL_BRAILLE % level)
 
-        elif role == pyatspi.ROLE_LINK and obj == orca_state.locusOfFocus:
+        elif self._script.utilities.isLink(obj) and obj == orca_state.locusOfFocus:
             if obj.parent.getRole() == pyatspi.ROLE_IMAGE:
                 result.append(messages.IMAGE_MAP_LINK)
 
@@ -137,7 +137,8 @@ class BrailleGenerator(braille_generator.BrailleGenerator):
         if self._script.utilities.isClickableElement(obj) \
            or self._script.utilities.isLink(obj):
             oldRole = self._overrideRole(pyatspi.ROLE_LINK, args)
-        elif self._script.utilities.isStatic(obj):
+        elif self._script.utilities.isStatic(obj) \
+             or self._script.utilities.isAnchor(obj):
             oldRole = self._overrideRole('ROLE_STATIC', args)
         elif self._script.utilities.treatAsDiv(obj):
             oldRole = self._overrideRole(pyatspi.ROLE_SECTION, args)
diff --git a/src/orca/scripts/web/script.py b/src/orca/scripts/web/script.py
index 2e4c371..958ea02 100644
--- a/src/orca/scripts/web/script.py
+++ b/src/orca/scripts/web/script.py
@@ -995,7 +995,14 @@ class Script(default.Script):
 
         self.utilities.setCaretContext(newFocus, caretOffset)
         self.updateBraille(newFocus)
-        speech.speak(self.speechGenerator.generateSpeech(newFocus, priorObj=oldFocus))
+
+        if self.utilities.isAnchor(newFocus):
+            contents = self.utilities.getLineContentsAtOffset(newFocus, 0)
+            utterances = self.speechGenerator.generateContents(contents)
+        else:
+            utterances = self.speechGenerator.generateSpeech(newFocus, priorObj=oldFocus)
+
+        speech.speak(utterances)
         self._saveFocusedObjectInfo(newFocus)
 
         if self.utilities.inTopLevelWebApp(newFocus):
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index 4e9664d..0a986a5 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -2081,6 +2081,8 @@ class Utilities(script_utilities.Utilities):
            and obj.parent.getRole() == pyatspi.ROLE_LINK \
            and obj.name and obj.name == obj.parent.name:
             rv = True
+        else:
+            rv = False
 
         self._isLink[hash(obj)] = rv
         return rv
@@ -2096,6 +2098,8 @@ class Utilities(script_utilities.Utilities):
         role = obj.getRole()
         if role == pyatspi.ROLE_TOOL_TIP:
             rv = True
+        else:
+            rv = False
 
         self._isNonNavigablePopup[hash(obj)] = rv
         return rv
@@ -2614,7 +2618,7 @@ class Utilities(script_utilities.Utilities):
 
         text = self.queryNonEmptyText(obj)
         if not text:
-            if self.isTextBlockElement(obj) or self.isAnchor(obj):
+            if self.isTextBlockElement(obj) or self.isEmptyAnchor(obj):
                 nextObj, nextOffset = self.nextContext(obj, offset)
                 if nextObj:
                     msg = "WEB: First caret context for %s, %i is %s, %i" % (obj, offset, nextObj, 
nextOffset)
@@ -2658,7 +2662,7 @@ class Utilities(script_utilities.Utilities):
                 allText = text.getText(0, -1)
                 for i in range(offset + 1, len(allText)):
                     child = self.getChildAtOffset(obj, i)
-                    if child and not self.isZombie(child) and not self.isAnchor(child) \
+                    if child and not self.isZombie(child) and not self.isEmptyAnchor(child) \
                        and not self.isUselessImage(child):
                         return self.findNextCaretInOrder(child, -1)
                     if allText[i] != self.EMBEDDED_OBJECT_CHARACTER:
@@ -2722,7 +2726,7 @@ class Utilities(script_utilities.Utilities):
                     offset = len(allText)
                 for i in range(offset - 1, -1, -1):
                     child = self.getChildAtOffset(obj, i)
-                    if child and not self.isZombie(child) and not self.isAnchor(child) \
+                    if child and not self.isZombie(child) and not self.isEmptyAnchor(child) \
                        and not self.isUselessImage(child):
                         return self.findPreviousCaretInOrder(child, -1)
                     if allText[i] != self.EMBEDDED_OBJECT_CHARACTER:
diff --git a/src/orca/scripts/web/speech_generator.py b/src/orca/scripts/web/speech_generator.py
index 77a2f23..88d0593 100644
--- a/src/orca/scripts/web/speech_generator.py
+++ b/src/orca/scripts/web/speech_generator.py
@@ -256,6 +256,8 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
             if (start or end):
                 doNotSpeak.append(pyatspi.ROLE_DOCUMENT_FRAME)
                 doNotSpeak.append(pyatspi.ROLE_ALERT)
+            if self._script.utilities.isAnchor(obj):
+                doNotSpeak.append(obj.getRole())
 
         if obj.getState().contains(pyatspi.STATE_EDITABLE):
             lastKey, mods = self._script.utilities.lastKeyAndModifiers()
@@ -280,7 +282,7 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
                 result.append(self.getLocalizedRoleName(obj, role))
                 result.extend(acss)
 
-        elif role == pyatspi.ROLE_LINK:
+        elif self._script.utilities.isLink(obj):
             if obj.parent.getRole() == pyatspi.ROLE_IMAGE:
                 result.append(messages.IMAGE_MAP_LINK)
                 result.extend(acss)
@@ -440,6 +442,8 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
             oldRole = self._overrideRole('default', args)
         elif self._script.utilities.isLink(obj):
             oldRole = self._overrideRole(pyatspi.ROLE_LINK, args)
+        elif self._script.utilities.isAnchor(obj):
+            oldRole = 'ROLE_STATIC'
         elif self._script.utilities.treatAsDiv(obj):
             oldRole = self._overrideRole(pyatspi.ROLE_SECTION, args)
         else:


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