[orca] Detect, and clean up scripts for, duplicate/bogus accessible applications



commit 070e74cd9da093b69182aba7e602e9ea7448a163
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Thu Feb 23 08:22:04 2017 -0500

    Detect, and clean up scripts for, duplicate/bogus accessible applications

 src/orca/event_manager.py                |    3 ++
 src/orca/script_manager.py               |    3 ++
 src/orca/scripts/web/script_utilities.py |   32 ++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+), 0 deletions(-)
---
diff --git a/src/orca/event_manager.py b/src/orca/event_manager.py
index cbcf091..70876cf 100644
--- a/src/orca/event_manager.py
+++ b/src/orca/event_manager.py
@@ -627,6 +627,9 @@ class EventManager:
                 debug.printException(debug.LEVEL_WARNING)
                 return
 
+        if eType.startswith("window"):
+            _scriptManager.reclaimScripts()
+
         # Clean up any flat review context so that Orca does not get
         # confused (see bgo#609633)
         #
diff --git a/src/orca/script_manager.py b/src/orca/script_manager.py
index 8ece76f..77b8115 100644
--- a/src/orca/script_manager.py
+++ b/src/orca/script_manager.py
@@ -311,6 +311,9 @@ class ScriptManager:
             return
 
         for app in appList:
+            msg = "SCRIPT MANAGER: %s is no longer in registry's desktop" % app
+            debug.println(debug.LEVEL_INFO, msg, True)
+
             appScript = self.appScripts.pop(app)
             del appScript
 
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index ef68b0e..229b020 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -217,7 +217,39 @@ class Utilities(script_utilities.Utilities):
 
         return list(filter(self.isDocument, targets))
 
+    def sanityCheckApplication(self):
+        try:
+            appInDesktop = self._script.app in pyatspi.Registry.getDesktop(0)
+        except:
+            appInDesktop = False
+
+        if appInDesktop:
+            return True
+
+        msg = "WARNING: %s is not in the registry's desktop" % self._script.app
+        debug.println(debug.LEVEL_INFO, msg, True)
+
+        try:
+            app = orca_state.activeWindow.getApplication()
+        except:
+            msg = "ERROR: Exception getting application for active window"
+            debug.println(debug.LEVEL_INFO, msg, True)
+            return False
+
+        msg = "WEB: Application for active window is %s" % app
+        debug.println(debug.LEVEL_INFO, msg, True)
+
+        if app in pyatspi.Registry.getDesktop(0):
+            self._script.app = app
+            return True
+
+        msg = "WARNING: App for window is not in the registry's desktop"
+        debug.println(debug.LEVEL_INFO, msg, True)
+        return False
+
     def sanityCheckActiveWindow(self):
+        self.sanityCheckApplication()
+
         app = self._script.app
         try:
             windowInApp = orca_state.activeWindow in app


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