[orca] Fix for bug 681441 - Orca should present inline lists from WebKitGtk on the same line in braille



commit 3e3163e183d5b6ba4c86e05b85b5831a78abeccf
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Wed Aug 8 14:54:39 2012 +0200

    Fix for bug 681441 - Orca should present inline lists from WebKitGtk on the same line in braille

 src/orca/script_utilities.py                       |   17 ++++++++++-
 src/orca/scripts/toolkits/WebKitGtk/script.py      |   30 ++++++++++++++++++-
 .../scripts/toolkits/WebKitGtk/script_utilities.py |   10 ++++++
 3 files changed, 54 insertions(+), 3 deletions(-)
---
diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
index 7b81837..0054d47 100644
--- a/src/orca/script_utilities.py
+++ b/src/orca/script_utilities.py
@@ -1,4 +1,4 @@
-
+# Orca
 #
 # Copyright 2010 Joanmarie Diggs.
 #
@@ -1500,6 +1500,21 @@ class Utilities:
         return obj
 
     @staticmethod
+    def onSameLine(obj1, obj2, delta=0):
+        """Determines if obj1 and obj2 are on the same line."""
+
+        try:
+            bbox1 = obj1.queryComponent().getExtents(pyatspi.DESKTOP_COORDS)
+            bbox2 = obj2.queryComponent().getExtents(pyatspi.DESKTOP_COORDS)
+        except:
+            return False
+
+        center1 = bbox1.y + bbox1.height / 2
+        center2 = bbox2.y + bbox2.height / 2
+
+        return abs(center1 - center2) <= delta
+
+    @staticmethod
     def spatialComparison(obj1, obj2):
         """Compares the physical locations of obj1 and obj2 and returns -1,
         0, or 1 to indicate if obj1 physically is before, is in the same
diff --git a/src/orca/scripts/toolkits/WebKitGtk/script.py b/src/orca/scripts/toolkits/WebKitGtk/script.py
index 6843412..84b6bf9 100644
--- a/src/orca/scripts/toolkits/WebKitGtk/script.py
+++ b/src/orca/scripts/toolkits/WebKitGtk/script.py
@@ -676,8 +676,6 @@ class Script(default.Script):
         where the caret is.
         """
 
-        # TODO - JD: Piece together the full line for braille
-
         textLine = default.Script.getTextLineAtCaret(self, obj, offset)
         string = textLine[0]
         if string.find(self.EMBEDDED_OBJECT_CHARACTER) == -1:
@@ -686,3 +684,31 @@ class Script(default.Script):
         textLine[0] = self.utilities.displayedText(obj)
 
         return textLine
+
+    def updateBraille(self, obj, extraRegion=None):
+        """Updates the braille display to show the given object.
+
+        Arguments:
+        - obj: the Accessible
+        - extra: extra Region to add to the end
+        """
+
+        if not obj:
+            return
+
+        if not self.utilities.isWebKitGtk(obj) \
+           or not self.utilities.isInlineContainer(obj):
+            default.Script.updateBraille(self, obj, extraRegion)
+            return
+
+        brailleLine = self.getNewBrailleLine(clearBraille=True, addLine=True)
+        for child in obj:
+            if not self.utilities.onSameLine(child, obj[0]):
+                break
+            [regions, fRegion] = self.brailleGenerator.generateBraille(child)
+            self.addBrailleRegionsToLine(regions, brailleLine)
+
+        if extraRegion:
+            self.addBrailleRegionToLine(extraRegion, brailleLine)
+
+        self.refreshBraille()
diff --git a/src/orca/scripts/toolkits/WebKitGtk/script_utilities.py b/src/orca/scripts/toolkits/WebKitGtk/script_utilities.py
index 084072a..1df2d22 100644
--- a/src/orca/scripts/toolkits/WebKitGtk/script_utilities.py
+++ b/src/orca/scripts/toolkits/WebKitGtk/script_utilities.py
@@ -206,3 +206,13 @@ class Utilities(script_utilities.Utilities):
             nextObj = None
 
         return nextObj
+
+    def isInlineContainer(self, obj):
+        """Returns True if obj is an inline/non-wrapped container."""
+
+        if not obj.getRole() == pyatspi.ROLE_LIST \
+           or obj.getState().contains(pyatspi.STATE_FOCUSABLE) \
+           or obj.childCount <= 1:
+            return False
+
+        return self.onSameLine(obj[0], obj[1])



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