[pyatspi2] Modified interim focus tracker for gnome-shell magnifier.



commit a8e3525e0d38c4f6f09e309425fa44b85e060ae3
Author: Joseph Scheuhammer <clown alum mit edu>
Date:   Mon Aug 27 16:39:47 2012 -0400

    Modified interim focus tracker for gnome-shell magnifier.
    
    Modified focus tracker to:
    1. check for presence of magnifier D-Bus service and exit if none,
    2. not exit if the magnifier is disabled by GSettings,
    3. register/deregister 'focus' handlers in sync with the
       magnifier's enable/disable gsetting.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=682636

 examples/magFocusTracker.py |   72 +++++++++++++++++++++++++------------------
 1 files changed, 42 insertions(+), 30 deletions(-)
---
diff --git a/examples/magFocusTracker.py b/examples/magFocusTracker.py
index 8269f1b..47efe00 100755
--- a/examples/magFocusTracker.py
+++ b/examples/magFocusTracker.py
@@ -47,6 +47,7 @@ from gi.repository.Gio import Settings
 
 _screenWidth = 0
 _screenHeight = 0
+_magnifier = None
 _zoomer = None
 
 class RoiHandler:
@@ -220,39 +221,27 @@ def magnifyAccessible(event, obj=None, extents=None):
     if haveSomethingToMagnify:
         _setROICursorPush(x, y, width, height)
 
-def init():
-    global _zoomer
+def startTracking():
     global _screenWidth
     global _screenHeight
+    global _magnifier
+    global _zoomer
 
-    screen = Gdk.Screen.get_default()
-    _screenWidth = screen.width()
-    _screenHeight = screen.height()
-
-    _dbusLoop = DBusGMainLoop()
-    _bus = dbus.SessionBus(mainloop=_dbusLoop)
-    _proxy_obj = _bus.get_object("org.gnome.Magnifier", "/org/gnome/Magnifier")
-    _magnifier = dbus.Interface(_proxy_obj, "org.gnome.Magnifier")
-    zoomerPaths = _magnifier.getZoomRegions()
-    if not zoomerPaths:
-        return
-
-    zoomProxy = _bus.get_object('org.gnome.Magnifier', zoomerPaths[0])
-    _zoomer = dbus.Interface(
-        zoomProxy, dbus_interface='org.gnome.Magnifier.ZoomRegion')
+    if _magnifier and _zoomer:
+        screen = Gdk.Screen.get_default()
+        _screenWidth = screen.width()
+        _screenHeight = screen.height()
 
-    pyatspi.Registry.registerEventListener(magnifyAccessible,
-                                           "object:text-caret-moved",
-                                           "object:state-changed:focused",
-                                           "object:state-changed:selected")
-    pyatspi.Registry.start()
+        pyatspi.Registry.registerEventListener(magnifyAccessible,
+                                               "object:text-caret-moved",
+                                               "object:state-changed:focused",
+                                               "object:state-changed:selected")
 
-def shutdown():
+def stopTracking():
     pyatspi.Registry.deregisterEventListener(magnifyAccessible,
                                              "object:text-caret-moved",
                                              "object:state-changed:focused",
                                              "object:state-changed:selected")
-    pyatspi.Registry.stop()
 
 def onEnabledChanged(gsetting, key):
     if key != 'screen-magnifier-enabled':
@@ -260,17 +249,40 @@ def onEnabledChanged(gsetting, key):
 
     enabled = gsetting.get_boolean(key)
     if enabled:
-        init()
+        startTracking()
     else:
-        shutdown()
+        stopTracking()
+
+def _initMagDbus():
+    global _magnifier
+    global _zoomer
+
+    available = False
+    try:
+        bus = dbus.SessionBus(mainloop=DBusGMainLoop())
+        proxy = \
+          bus.get_object('org.gnome.Magnifier', '/org/gnome/Magnifier')
+        _magnifier = dbus.Interface(proxy, 'org.gnome.Magnifier')
+        zoomerPaths = _magnifier.getZoomRegions()
+        if zoomerPaths:
+            proxy = bus.get_object('org.gnome.Magnifier', zoomerPaths[0])
+            _zoomer = dbus.Interface(proxy, 'org.gnome.Magnifier.ZoomRegion')
+            available = True
+    except:
+        available = False
+
+    return available
 
 def main():
-    a11yAppSettings = Settings('org.gnome.desktop.a11y.applications')
-    if a11yAppSettings.get_boolean('screen-magnifier-enabled'):
+    magServiceAvailable = _initMagDbus()
+    if magServiceAvailable:
+        a11yAppSettings = Settings('org.gnome.desktop.a11y.applications')
         a11yAppSettings.connect('changed', onEnabledChanged)
-        init()
+        if a11yAppSettings.get_boolean('screen-magnifier-enabled'):
+            startTracking()
+        pyatspi.Registry.start()
     else:
-        print 'Magnification is not running. Exiting.'
+        print 'Magnification service not available. Exiting.'
 
     return 0
 



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