[orca/sayall-progress-event-scroll2: 2/2] Call text.scrollSubstringTo on speech progress



commit 1fe9484995916ac672dafb417c6bbb8960fc5dbe
Author: Samuel Thibault <samuel thibault ens-lyon org>
Date:   Thu Sep 26 18:22:42 2019 +0200

    Call text.scrollSubstringTo on speech progress
    
    So that if all the text could not fit on the screen, we get progressive
    scrolling.

 src/orca/eventsynthesizer.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
---
diff --git a/src/orca/eventsynthesizer.py b/src/orca/eventsynthesizer.py
index ed5458331..a812a9b31 100644
--- a/src/orca/eventsynthesizer.py
+++ b/src/orca/eventsynthesizer.py
@@ -40,6 +40,11 @@ try:
 except:
     _canScrollTo = False
 
+try:
+    _canScrollSubstringTo = pyatspi.Text.scrollSubstringTo is not None
+except:
+    _canScrollSubstringTo = False
+
 def _getMouseCoordinates():
     """Returns the current mouse coordinates."""
 
@@ -194,6 +199,14 @@ def _scrollSubstringToLocation(obj, location, startOffset, endOffset):
     debug.println(debug.LEVEL_INFO, msg, True)
     return result
 
+def scrollSubstringIntoView(obj, startOffset=None, endOffset=None):
+    if not _canScrollSubstringTo:
+        msg = "INFO: Installed version of AT-SPI2 doesn't support scrolling."
+        debug.println(debug.LEVEL_INFO, msg, True)
+        return
+
+    _scrollToLocation(obj, pyatspi.SCROLL_ANYWHERE, startOffset, endOffset)
+
 def _scrollObjectToLocation(obj, location):
     """Attemps to scroll obj to the specified location."""
 
@@ -328,6 +341,7 @@ def grabFocusOn(obj):
 
 def notifyReadingPosition(obj, startOffset, endOffset):
     try:
+        scrollSubstringIntoView(obj, startOffset, endOffset)
         obj.emit("region-changed", startOffset, endOffset)
     except:
         return


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