[orca] Event manager: Process children-changed from tables in async mode
- From: Joanmarie Diggs <joanied src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca] Event manager: Process children-changed from tables in async mode
- Date: Fri, 4 Mar 2022 15:46:46 +0000 (UTC)
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]