[orca] Event manager: Process children-changed from tables in async mode



commit c313adb3f280e5ff1634b7994b1a403daf2f7c00
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Fri Mar 4 16:39:59 2022 +0100

    Event manager: Process children-changed from tables in async mode
    
    Our flood detection and handling code assumes we are queuing events.
    We typically don't queue children-changed so that we can try to recover
    from object destruction (e.g. on the web). As a result, if an app or
    toolkit decides to populate a giant table row by row, notifying us
    as it goes, we'll grind to a halt.

 src/orca/event_manager.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
---
diff --git a/src/orca/event_manager.py b/src/orca/event_manager.py
index ce5e3dced..d47a33623 100644
--- a/src/orca/event_manager.py
+++ b/src/orca/event_manager.py
@@ -447,9 +447,13 @@ class EventManager:
             except:
                 toolkitName = None
             if toolkitName in self._synchronousToolkits \
-               or isinstance(e, input_event.MouseButtonEvent) \
-               or e.type.startswith("object:children-changed"):
+               or isinstance(e, input_event.MouseButtonEvent):
                 asyncMode = False
+            elif e.type.startswith("object:children-changed"):
+                try:
+                    asyncMode = e.source.getRole() == pyatspi.ROLE_TABLE
+                except:
+                    asyncMode = True
             script = _scriptManager.getScript(app, e.source)
             script.eventCache[e.type] = (e, time.time())
 


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