[orca] Remove more direct calls to speech.speak()



commit 62c539d11197360255eec6eda32bb60c1f4b147f
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Fri Jan 14 17:38:00 2022 +0100

    Remove more direct calls to speech.speak()
    
    The default script already has methods which make it possible for
    messages to be spoken. Using these methods will facilitate on-the-fly
    language switching.
    
    Also set the interrupt argument to True when using presentObject()
    to present updates in state change or the new structural navigation
    object.

 src/orca/mouse_review.py                 |  2 +-
 src/orca/scripts/apps/soffice/script.py  |  2 +-
 src/orca/scripts/default.py              | 64 +++++++++++++++-----------------
 src/orca/scripts/toolkits/GAIL/script.py |  2 +-
 src/orca/scripts/toolkits/gtk/script.py  |  6 +--
 src/orca/scripts/web/script.py           | 12 ++++--
 src/orca/structural_navigation.py        |  2 +-
 7 files changed, 44 insertions(+), 46 deletions(-)
---
diff --git a/src/orca/mouse_review.py b/src/orca/mouse_review.py
index 77d463b99..fd2ae975d 100644
--- a/src/orca/mouse_review.py
+++ b/src/orca/mouse_review.py
@@ -289,7 +289,7 @@ class _ItemContext:
             self._script.presentationInterrupt()
 
         if self._frame and self._frame != prior._frame:
-            self._script.presentObject(self._frame, alreadyFocused=True, inMouseReview=True)
+            self._script.presentObject(self._frame, alreadyFocused=True, inMouseReview=True, interrupt=True)
 
         if self._script.utilities.containsOnlyEOCs(self._obj):
             msg = "MOUSE REVIEW: Not presenting object which contains only EOCs"
diff --git a/src/orca/scripts/apps/soffice/script.py b/src/orca/scripts/apps/soffice/script.py
index 2912c4717..4e0b72d5a 100644
--- a/src/orca/scripts/apps/soffice/script.py
+++ b/src/orca/scripts/apps/soffice/script.py
@@ -851,7 +851,7 @@ class Script(default.Script):
             wasCommand = mods & keybindings.COMMAND_MODIFIER_MASK
             weToggledIt = wasCommand and keyString not in navKeys
         if weToggledIt:
-            self.presentObject(obj, alreadyFocused=True)
+            self.presentObject(obj, alreadyFocused=True, interrupt=True)
 
     def onSelectedChanged(self, event):
         """Callback for object:state-changed:selected accessibility events."""
diff --git a/src/orca/scripts/default.py b/src/orca/scripts/default.py
index 1a555967f..f9f90126f 100644
--- a/src/orca/scripts/default.py
+++ b/src/orca/scripts/default.py
@@ -1325,7 +1325,7 @@ class Script(script.Script):
             debug.println(debug.LEVEL_INFO, msg, True)
             if statusbar:
                 self.pointOfReference['statusBarItems'] = None
-                self.presentObject(statusbar)
+                self.presentObject(statusbar, interrupt=True)
                 self.pointOfReference['statusBarItems'] = None
             else:
                 full = messages.STATUS_BAR_NOT_FOUND_FULL
@@ -1460,26 +1460,24 @@ class Script(script.Script):
         # the Braille display as an input device.
         #
         if not isinstance(inputEvent, input_event.BrailleEvent):
-            if (not wordString) \
-               or (not len(wordString)) \
-               or (wordString == "\n"):
-                speech.speak(messages.BLANK)
+            if not wordString or wordString == "\n":
+                self.speakMessage(messages.BLANK)
             else:
                 [lineString, x, y, width, height] = \
                          context.getCurrent(flat_review.Context.LINE)
                 if lineString == "\n":
-                    speech.speak(messages.BLANK)
+                    self.speakMessage(messages.BLANK)
                 elif wordString.isspace():
-                    speech.speak(messages.WHITE_SPACE)
+                    self.speakMessage(messages.WHITE_SPACE)
                 elif wordString.isupper() and speechType == 1:
-                    speech.speak(wordString, voice)
+                    self.speakMessage(wordString, voice)
                 elif speechType == 2:
                     self.spellCurrentItem(wordString)
                 elif speechType == 3:
                     self.phoneticSpellCurrentItem(wordString)
                 elif speechType == 1:
                     wordString = self.utilities.adjustForRepeats(wordString)
-                    speech.speak(wordString, voice)
+                    self.speakMessage(wordString, voice)
 
         self.updateBrailleReview(targetCursorCell)
         self.currentReviewContents = wordString
@@ -1578,12 +1576,12 @@ class Script(script.Script):
         #
         if not isinstance(inputEvent, input_event.BrailleEvent):
             if (not charString) or (not len(charString)):
-                speech.speak(messages.BLANK)
+                self.speakMessage(messages.BLANK)
             else:
                 [lineString, x, y, width, height] = \
                          context.getCurrent(flat_review.Context.LINE)
                 if lineString == "\n" and speechType != 3:
-                    speech.speak(messages.BLANK)
+                    self.speakMessage(messages.BLANK)
                 elif speechType == 3:
                     self.speakUnicodeCharacter(charString)
                 elif speechType == 2:
@@ -1709,21 +1707,19 @@ class Script(script.Script):
         # the Braille display as an input device.
         #
         if not isinstance(inputEvent, input_event.BrailleEvent):
-            if (not lineString) \
-               or (not len(lineString)) \
-               or (lineString == "\n"):
-                speech.speak(messages.BLANK)
+            if not lineString or lineString == "\n":
+                self.speakMessage(messages.BLANK)
             elif lineString.isspace():
-                speech.speak(messages.WHITE_SPACE)
+                self.speakMessage(messages.WHITE_SPACE)
             elif lineString.isupper() and (speechType < 2 or speechType > 3):
-                speech.speak(lineString, voice)
+                self.speakMessage(lineString, voice)
             elif speechType == 2:
                 self.spellCurrentItem(lineString)
             elif speechType == 3:
                 self.phoneticSpellCurrentItem(lineString)
             else:
                 lineString = self.utilities.adjustForRepeats(lineString)
-                speech.speak(lineString, voice)
+                self.speakMessage(lineString, voice)
 
         self.updateBrailleReview()
         self.currentReviewContents = lineString
@@ -2322,7 +2318,7 @@ class Script(script.Script):
         if hash(oldObj) == hash(obj) and oldState == event.detail1:
             return
  
-        self.presentObject(obj, alreadyFocused=True)
+        self.presentObject(obj, alreadyFocused=True, interrupt=True)
         self.pointOfReference['checkedChange'] = hash(obj), event.detail1
 
     def onChildrenAdded(self, event):
@@ -2445,8 +2441,7 @@ class Script(script.Script):
         if hash(oldObj) == hash(obj) and oldState == event.detail1:
             return
 
-        self.updateBraille(obj)
-        speech.speak(self.speechGenerator.generateSpeech(obj, alreadyFocused=True))
+        self.presentObject(obj, alreadyFocused=True, interrupt=True)
         self.pointOfReference['expandedChange'] = hash(obj), event.detail1
 
         details = self.utilities.detailsContentForObject(obj)
@@ -2471,8 +2466,7 @@ class Script(script.Script):
         if hash(oldObj) == hash(obj) and oldState == event.detail1:
             return
 
-        self.updateBraille(obj)
-        speech.speak(self.speechGenerator.generateSpeech(obj, alreadyFocused=True))
+        self.presentObject(obj, alreadyFocused=True, interrupt=True)
         self.pointOfReference['indeterminateChange'] = hash(obj), event.detail1
 
     def onMouseButton(self, event):
@@ -2522,8 +2516,7 @@ class Script(script.Script):
 
         names[hash(obj)] = event.any_data
         self.pointOfReference['names'] = names
-        self.updateBraille(obj)
-        speech.speak(self.speechGenerator.generateSpeech(obj, alreadyFocused=True))
+        self.presentObject(obj, alreadyFocused=True, interrupt=True)
 
     def onPressedChanged(self, event):
         """Callback for object:state-changed:pressed accessibility events."""
@@ -2536,8 +2529,7 @@ class Script(script.Script):
         if hash(oldObj) == hash(obj) and oldState == event.detail1:
             return
 
-        self.updateBraille(obj)
-        speech.speak(self.speechGenerator.generateSpeech(obj, alreadyFocused=True))
+        self.presentObject(obj, alreadyFocused=True, interrupt=True)
         self.pointOfReference['pressedChange'] = hash(obj), event.detail1
 
     def onSelectedChanged(self, event):
@@ -2711,13 +2703,12 @@ class Script(script.Script):
                and not _settingsManager.getSetting('presentToolTips'):
                 return
             if event.detail1:
-                self.presentObject(obj)
+                self.presentObject(obj, interrupt=True)
                 return
  
             if orca_state.locusOfFocus and keyString == "F1":
                 obj = orca_state.locusOfFocus
-                self.updateBraille(obj)
-                speech.speak(self.speechGenerator.generateSpeech(obj, priorObj=event.source))
+                self.presentObject(obj, priorObj=event.source, interrupt=True)
                 return
 
     def onTextAttributesChanged(self, event):
@@ -2784,7 +2775,7 @@ class Script(script.Script):
         else:
             voice = self.speechGenerator.voice(string=string)
             string = self.utilities.adjustForRepeats(string)
-            speech.speak(string, voice)
+            self.speakMessage(string, voice)
 
     def onTextInserted(self, event):
         """Callback for object:text-changed:insert accessibility events."""
@@ -2849,7 +2840,7 @@ class Script(script.Script):
             else:
                 voice = self.speechGenerator.voice(obj=event.source, string=string)
                 string = self.utilities.adjustForRepeats(string)
-                speech.speak(string, voice)
+                self.speakMessage(string, voice)
 
         if len(string) != 1:
             return
@@ -3284,7 +3275,7 @@ class Script(script.Script):
 
         voice = self.speechGenerator.voice(obj=obj, string=sentence)
         sentence = self.utilities.adjustForRepeats(sentence)
-        speech.speak(sentence, voice)
+        self.speakMessage(sentence, voice)
         return True
 
     def echoPreviousWord(self, obj, offset=None):
@@ -3360,7 +3351,7 @@ class Script(script.Script):
 
         voice = self.speechGenerator.voice(obj=obj, string=word)
         word = self.utilities.adjustForRepeats(word)
-        speech.speak(word, voice)
+        self.speakMessage(word, voice)
         return True
 
     def sayCharacter(self, obj):
@@ -3528,6 +3519,9 @@ class Script(script.Script):
 
     def presentObject(self, obj, **args):
         interrupt = args.get("interrupt", False)
+        msg = "DEFAULT: Presenting object %s. Interrupt: %s" % (obj, interrupt)
+        debug.println(debug.LEVEL_INFO, msg, True)
+
         self.updateBraille(obj, **args)
         utterances = self.speechGenerator.generateSpeech(obj, **args)
         speech.speak(utterances, interrupt=interrupt)
@@ -3900,7 +3894,7 @@ class Script(script.Script):
         for (charIndex, character) in enumerate(itemString):
             voice = self.speechGenerator.voice(string=character)
             phoneticString = phonnames.getPhoneticName(character.lower())
-            speech.speak(phoneticString, voice)
+            self.speakMessage(phoneticString, voice)
 
     def _saveLastCursorPosition(self, obj, caretOffset):
         """Save away the current text cursor position for next time.
diff --git a/src/orca/scripts/toolkits/GAIL/script.py b/src/orca/scripts/toolkits/GAIL/script.py
index e870dd7e3..edd2d1389 100644
--- a/src/orca/scripts/toolkits/GAIL/script.py
+++ b/src/orca/scripts/toolkits/GAIL/script.py
@@ -64,7 +64,7 @@ class Script(default.Script):
 
         msg = "GAIL: locusOfFocus believed to be typeahead. Presenting change."
         debug.println(debug.LEVEL_INFO, msg, True)
-        self.presentObject(event.any_data)
+        self.presentObject(event.any_data, interrupt=True)
 
     def onFocus(self, event):
         """Callback for focus: accessibility events."""
diff --git a/src/orca/scripts/toolkits/gtk/script.py b/src/orca/scripts/toolkits/gtk/script.py
index 2cfeaa70a..2ef60fe69 100644
--- a/src/orca/scripts/toolkits/gtk/script.py
+++ b/src/orca/scripts/toolkits/gtk/script.py
@@ -75,7 +75,7 @@ class Script(default.Script):
 
         msg = "GTK: locusOfFocus believed to be typeahead. Presenting change."
         debug.println(debug.LEVEL_INFO, msg, True)
-        self.presentObject(event.any_data)
+        self.presentObject(event.any_data, interrupt=True)
 
     def onCheckedChanged(self, event):
         """Callback for object:state-changed:checked accessibility events."""
@@ -90,7 +90,7 @@ class Script(default.Script):
         if not pyatspi.findAncestor(obj, isListBox):
             return
 
-        self.presentObject(obj, alreadyFocused=True)
+        self.presentObject(obj, alreadyFocused=True, interrupt=True)
 
     def onFocus(self, event):
         """Callback for focus: accessibility events."""
@@ -204,7 +204,7 @@ class Script(default.Script):
            or obj.getRole() in [pyatspi.ROLE_ALERT, pyatspi.ROLE_INFO_BAR]:
             if obj.parent and obj.parent.getRole() == pyatspi.ROLE_APPLICATION:
                 return
-            self.presentObject(event.source)
+            self.presentObject(event.source, interrupt=True)
             return
 
         super().onShowingChanged(event)
diff --git a/src/orca/scripts/web/script.py b/src/orca/scripts/web/script.py
index c8e2e2d59..fc24e232d 100644
--- a/src/orca/scripts/web/script.py
+++ b/src/orca/scripts/web/script.py
@@ -996,6 +996,10 @@ class Script(default.Script):
             super().presentObject(obj, **args)
             return
 
+        interrupt = args.get("interrupt", False)
+        msg = "WEB: Presenting object %s. Interrupt: %s" % (obj, interrupt)
+        debug.println(debug.LEVEL_INFO, msg, True)
+
         # We shouldn't use cache in this method, because if the last thing we presented
         # included this object and offset (e.g. a Say All or Mouse Review), we're in
         # danger of presented irrelevant context.
@@ -1755,7 +1759,7 @@ class Script(default.Script):
             debug.println(debug.LEVEL_INFO, msg, True)
             return False
 
-        self.presentObject(obj, alreadyFocused=True)
+        self.presentObject(obj, alreadyFocused=True, interrupt=True)
         self.pointOfReference['checkedChange'] = hash(obj), event.detail1
         return True
 
@@ -1841,7 +1845,7 @@ class Script(default.Script):
 
             msg = "WEB: Presenting event.any_data"
             debug.println(debug.LEVEL_INFO, msg, True)
-            self.presentObject(event.any_data)
+            self.presentObject(event.any_data, interrupt=True)
 
             focused = self.utilities.focusedObject(event.any_data)
             if focused:
@@ -2188,7 +2192,7 @@ class Script(default.Script):
             msg = "WEB: Event believed to be browser UI page switch"
             debug.println(debug.LEVEL_INFO, msg, True)
             if event.detail1:
-                self.presentObject(event.source, priorObj=orca_state.locusOfFocus)
+                self.presentObject(event.source, priorObj=orca_state.locusOfFocus, interrupt=True)
             return True
 
         if not self.utilities.inDocumentContent(event.source):
@@ -2257,7 +2261,7 @@ class Script(default.Script):
         if event.detail1 and self.utilities.isTopLevelBrowserUIAlert(event.source):
             msg = "WEB: Event handled: Presenting event source"
             debug.println(debug.LEVEL_INFO, msg, True)
-            self.presentObject(event.source)
+            self.presentObject(event.source, interrupt=True)
             return True
 
         if not self.utilities.inDocumentContent(event.source):
diff --git a/src/orca/structural_navigation.py b/src/orca/structural_navigation.py
index 4c93521ca..bb78ed650 100644
--- a/src/orca/structural_navigation.py
+++ b/src/orca/structural_navigation.py
@@ -1278,7 +1278,7 @@ class StructuralNavigation:
             return
 
         eventsynthesizer.scrollToTopEdge(obj)
-        self._script.presentObject(obj, offset=offset, priorObj=priorObj)
+        self._script.presentObject(obj, offset=offset, priorObj=priorObj, interrupt=True)
 
     def _presentWithSayAll(self, obj, offset):
         if self._script.inSayAll() \


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