[orca] More work on progress bar beeps - they are now user-testable



commit 19bcf95f1d8b20b5b907581381c67abbe013436d
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue Feb 16 18:48:58 2016 -0500

    More work on progress bar beeps - they are now user-testable

 src/orca/scripts/default.py |   16 ++++++++++++++++
 src/orca/sound.py           |   15 +++++++++++++--
 src/orca/sound_generator.py |    9 ++++-----
 3 files changed, 33 insertions(+), 7 deletions(-)
---
diff --git a/src/orca/scripts/default.py b/src/orca/scripts/default.py
index de2b95c..24a33dd 100644
--- a/src/orca/scripts/default.py
+++ b/src/orca/scripts/default.py
@@ -51,6 +51,7 @@ import orca.phonnames as phonnames
 import orca.script as script
 import orca.settings as settings
 import orca.settings_manager as settings_manager
+import orca.sound as sound
 import orca.speech as speech
 import orca.speechserver as speechserver
 import orca.mouse_review as mouse_review
@@ -2670,6 +2671,8 @@ class Script(script.Script):
         self.updateBraille(obj, isProgressBarUpdate=isProgressBarUpdate)
         speech.speak(self.speechGenerator.generateSpeech(
             obj, alreadyFocused=True, isProgressBarUpdate=isProgressBarUpdate))
+        self.__play(self.soundGenerator.generateSound(
+            obj, alreadyFocused=True, isProgressBarUpdate=isProgressBarUpdate))
 
     def onWindowActivated(self, event):
         """Called whenever a toplevel window is activated.
@@ -3806,6 +3809,19 @@ class Script(script.Script):
             braille.displayMessage(message, flashTime=duration)
 
     @staticmethod
+    def __play(sounds, interrupt=True):
+        if not sounds:
+            return
+
+        if not isinstance(sounds, list):
+            icon = [sounds]
+
+        _player = sound.getPlayer()
+        _player.play(sounds[0], interrupt)
+        for i in range(1, len(sounds)):
+            sound.play(sounds[i], interrupt=False)
+
+    @staticmethod
     def addBrailleRegionToLine(region, line):
         """Adds the braille region to the line.
 
diff --git a/src/orca/sound.py b/src/orca/sound.py
index 7df0cb6..7a68837 100644
--- a/src/orca/sound.py
+++ b/src/orca/sound.py
@@ -44,6 +44,8 @@ class Player:
 
     def __init__(self):
         self._initialized = False
+        self._source = None
+        self._sink = None
 
         if not _gstreamerAvailable:
             msg = 'SOUND ERROR: Gstreamer is not available'
@@ -70,6 +72,11 @@ class Player:
             msg = 'SOUND ERROR: %s' % error
             debug.println(debug.LEVEL_INFO, msg, True)
 
+    def _onTimeout(self, element):
+        element.set_state(Gst.State.NULL)
+        self.stop(element)
+        return False
+
     def _playIcon(self, icon, interrupt=True):
         """Plays a sound icon, interrupting the current play first unless specified."""
 
@@ -90,7 +97,7 @@ class Player:
         self._source.set_property('wave', tone.wave)
         self._pipeline.set_state(Gst.State.PLAYING)
         duration = int(1000 * tone.duration)
-        GLib.timeout_add(duration, self._pipeline.set_state, Gst.State.NULL)
+        GLib.timeout_add(duration, self._onTimeout, self._pipeline)
 
     def init(self):
         """(Re)Initializes the Player."""
@@ -127,12 +134,16 @@ class Player:
             msg = 'SOUND ERROR: %s is not an Icon or Tone' % item
             debug.println(debug.LEVEL_INFO, msg, True)
 
-    def stop(self):
+    def stop(self, element=None):
         """Stops play."""
 
         if not _gstreamerAvailable:
             return
 
+        if element:
+            element.set_state(Gst.State.NULL)
+            return
+
         self._player.set_state(Gst.State.NULL)
         self._pipeline.set_state(Gst.State.NULL)
 
diff --git a/src/orca/sound_generator.py b/src/orca/sound_generator.py
index f179496..b8a79df 100644
--- a/src/orca/sound_generator.py
+++ b/src/orca/sound_generator.py
@@ -288,11 +288,10 @@ class SoundGenerator(generator.Generator):
     def _generateProgressBarValue(self, obj, **args):
         """Returns an array of sounds representing the progress bar value."""
 
-        if args.get('isProgressBarUpdate') \
-           and not _settingsManager.getSetting('beepProgressBarUpdates'):
-            return []
-
-        if not _settingsManager.getSetting('playSoundForValue'):
+        if args.get('isProgressBarUpdate'):
+            if not _settingsManager.getSetting('beepProgressBarUpdates'):
+                return []
+        elif not _settingsManager.getSetting('playSoundForValue'):
             return []
 
         percent = self._script.utilities.getValueAsPercent(obj)


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