[orca] Filter out selection-changed events from parents of defunct descendants



commit a7dcb5305a4aaa47fe80c1195eb5757cde76ad27
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Sat Apr 28 18:38:41 2018 -0400

    Filter out selection-changed events from parents of defunct descendants

 src/orca/event_manager.py |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)
---
diff --git a/src/orca/event_manager.py b/src/orca/event_manager.py
index 1bbc2ac..2a5928d 100644
--- a/src/orca/event_manager.py
+++ b/src/orca/event_manager.py
@@ -61,6 +61,7 @@ class EventManager:
         self._ignoredEvents = ['object:bounds-changed',
                                'object:state-changed:defunct',
                                'object:property-change:accessible-parent']
+        self._parentsOfDefunctDescendants = []
         debug.println(debug.LEVEL_INFO, 'Event manager initialized', True)
 
     def activate(self):
@@ -196,6 +197,11 @@ class EventManager:
                 msg = 'EVENT MANAGER: Ignoring event type due to role'
                 debug.println(debug.LEVEL_INFO, msg, True)
                 return True
+        elif event.type.startswith('object:selection-changed'):
+            if event.source in self._parentsOfDefunctDescendants:
+                msg = 'EVENT MANAGER: Ignoring event from parent of defunct descendants'
+                debug.println(debug.LEVEL_INFO, msg, True)
+                return True
 
         if event.type.startswith('object:children-changed:add') \
            or event.type.startswith('object:active-descendant-changed'):
@@ -216,11 +222,19 @@ class EventManager:
                 msg = 'ERROR: Event any_data contains potentially-defunct child/descendant'
                 debug.println(debug.LEVEL_INFO, msg, True)
                 return True
+
             if childState.contains(pyatspi.STATE_DEFUNCT):
+                if state.contains(pyatspi.STATE_MANAGES_DESCENDANTS) \
+                   and event.source not in self._parentsOfDefunctDescendants:
+                    self._parentsOfDefunctDescendants.append(event.source)
+
                 msg = 'ERROR: Event any_data contains defunct child/descendant'
                 debug.println(debug.LEVEL_INFO, msg, True)
                 return True
 
+            if event.source in self._parentsOfDefunctDescendants:
+                self._parentsOfDefunctDescendants.remove(event.source)
+
             # This should be safe. We do not have a reason to present a newly-added,
             # but not focused image. We do not need to update live regions for images.
             # This is very likely a completely and utterly useless event for us. The


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