[orca] Improve presentation of Calc cells being edited



commit 498df98091324a31a0c7ab32d69cc6be8e7fe438
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Fri Nov 8 15:27:13 2013 -0500

    Improve presentation of Calc cells being edited

 src/orca/scripts/apps/soffice/script.py           |   17 +++++++++------
 src/orca/scripts/apps/soffice/script_utilities.py |   22 +++++++++++---------
 src/orca/scripts/apps/soffice/speech_generator.py |   11 ++++++++++
 3 files changed, 33 insertions(+), 17 deletions(-)
---
diff --git a/src/orca/scripts/apps/soffice/script.py b/src/orca/scripts/apps/soffice/script.py
index a772307..3aa4730 100644
--- a/src/orca/scripts/apps/soffice/script.py
+++ b/src/orca/scripts/apps/soffice/script.py
@@ -902,15 +902,15 @@ class Script(default.Script):
         if self.isStructuralNavigationCommand():
             return
 
-        role = event.source.getRole()
-        if role == pyatspi.ROLE_EXTENDED:
-            if event.source.getRoleName() == 'text frame':
-                return
+        if not event.detail1:
+            return
+
+        if event.source.getRoleName() == 'text frame':
+            return
 
         parent = event.source.parent
-        if parent and parent.getRole() == pyatspi.ROLE_EXTENDED:
-            if parent.getRoleName() == 'text frame':
-                return
+        if parent and parent.getRoleName() == 'text frame':
+            return
 
         default.Script.onStateChanged(self, event)
 
@@ -932,6 +932,9 @@ class Script(default.Script):
            and self.utilities.isSameObject(obj, event.source):
             return
 
+        if self.utilities.isCellBeingEdited(event.source):
+            orca.setLocusOfFocus(event, event.source.parent)
+
         # The lists and combo boxes in the Formatting toolbar emit
         # object:active-descendant-changed events which cause us
         # to set the locusOfFocus to the list item. If the user then
diff --git a/src/orca/scripts/apps/soffice/script_utilities.py 
b/src/orca/scripts/apps/soffice/script_utilities.py
index 4aabc96..271daca 100644
--- a/src/orca/scripts/apps/soffice/script_utilities.py
+++ b/src/orca/scripts/apps/soffice/script_utilities.py
@@ -97,6 +97,17 @@ class Utilities(script_utilities.Utilities):
 
         return readOnly
 
+    def isCellBeingEdited(self, obj):
+        if not obj:
+            return False
+
+        parent = obj.parent
+        if parent and parent.getRoleName() == 'text frame':
+            if self.spreadSheetCellName(parent):
+                return True
+
+        return False
+
     def isSpreadSheetCell(self, obj, startFromTable=False):
         """Return an indication of whether the given obj is a spread sheet
         table cell.
@@ -116,16 +127,7 @@ class Utilities(script_utilities.Utilities):
         try:
             table = obj.queryTable()
         except:
-            # There really doesn't seem to be a good way to identify
-            # when the user is editing a cell because it has a role
-            # of paragraph and no table in the ancestry. This hack is
-            # a carry-over from the whereAmI code.
-            #
-            if cell.getRole() == pyatspi.ROLE_PARAGRAPH:
-                top = self.topLevelObject(cell)
-                return (top and top.name.endswith(" Calc"))
-            else:
-                return False
+            return self.isCellBeingEdited(cell)
         else:
             return table.nRows in [65536, 1048576]
 
diff --git a/src/orca/scripts/apps/soffice/speech_generator.py 
b/src/orca/scripts/apps/soffice/speech_generator.py
index 80150e1..885185b 100644
--- a/src/orca/scripts/apps/soffice/speech_generator.py
+++ b/src/orca/scripts/apps/soffice/speech_generator.py
@@ -425,6 +425,14 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
         return (speech_generator.SpeechGenerator._generateEndOfTableIndicator(
                 self, obj, **args))
 
+    def _generateNewAncestors(self, obj, **args):
+        priorObj = args.get('priorObj', None)
+        if not priorObj or priorObj.getRoleName() == 'text frame':
+            return []
+
+        return speech_generator.SpeechGenerator._generateNewAncestors(
+            self, obj, **args)
+
     def _generateOldAncestors(self, obj, **args):
         """Returns an array of strings (and possibly voice and audio
         specifications) that represent the text of the ancestors for
@@ -434,6 +442,9 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
         if not priorObj:
             return []
 
+        if obj.getRoleName() == 'text frame':
+            return []
+
         isTable = lambda x: x and x.getRole() == pyatspi.ROLE_TABLE
         oldTable = pyatspi.findAncestor(priorObj, isTable)
         if oldTable:


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