[orca] Prevent double-presentation of live-region events
- From: Joanmarie Diggs <joanied src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca] Prevent double-presentation of live-region events
- Date: Mon, 6 May 2019 18:29:45 +0000 (UTC)
commit 6fb5e4b00b22aadebcd3652dcb756a4fb63efddc
Author: Joanmarie Diggs <jdiggs igalia com>
Date: Mon May 6 14:26:53 2019 -0400
Prevent double-presentation of live-region events
src/orca/scripts/toolkits/Chromium/script.py | 5 +++++
src/orca/scripts/web/script.py | 5 +++++
src/orca/scripts/web/script_utilities.py | 23 ++++++++++++++++++++++-
3 files changed, 32 insertions(+), 1 deletion(-)
---
diff --git a/src/orca/scripts/toolkits/Chromium/script.py b/src/orca/scripts/toolkits/Chromium/script.py
index 63cd5eb1f..b391f3449 100644
--- a/src/orca/scripts/toolkits/Chromium/script.py
+++ b/src/orca/scripts/toolkits/Chromium/script.py
@@ -193,6 +193,11 @@ class Script(web.Script):
def onChildrenChanged(self, event):
"""Callback for object:children-changed accessibility events."""
+ if self.utilities.isStaticTextLeaf(event.any_data):
+ msg = "CHROMIUM: Ignoring because child is static text leaf"
+ debug.println(debug.LEVEL_INFO, msg, True)
+ return
+
if super().onChildrenChanged(event):
return
diff --git a/src/orca/scripts/web/script.py b/src/orca/scripts/web/script.py
index 61688ccb4..50f1c7146 100644
--- a/src/orca/scripts/web/script.py
+++ b/src/orca/scripts/web/script.py
@@ -1645,6 +1645,11 @@ class Script(default.Script):
childRole = event.any_data.getRole()
if childRole == pyatspi.ROLE_ALERT:
+ if event.any_data == self.utilities.lastQueuedLiveRegion():
+ msg = "WEB: Ignoring %s (is last queued live region)" % event.any_data
+ debug.println(debug.LEVEL_INFO, msg, True)
+ return True
+
msg = "WEB: Presenting event.any_data"
debug.println(debug.LEVEL_INFO, msg, True)
self.presentObject(event.any_data)
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index 5df6b5077..e74e1d832 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -113,6 +113,7 @@ class Utilities(script_utilities.Utilities):
self._currentLineContents = None
self._currentWordContents = None
self._currentCharacterContents = None
+ self._lastQueuedLiveRegionEvent = None
self._validChildRoles = {pyatspi.ROLE_LIST: [pyatspi.ROLE_LIST_ITEM]}
@@ -185,6 +186,7 @@ class Utilities(script_utilities.Utilities):
self._contextPathsRolesAndNames = {}
self._cleanupContexts()
self._priorContexts = {}
+ self._lastQueuedLiveRegionEvent = None
def clearContentCache(self):
self._currentObjectContents = None
@@ -4021,6 +4023,18 @@ class Utilities(script_utilities.Utilities):
return None, -1
+ def lastQueuedLiveRegion(self):
+ if self._lastQueuedLiveRegionEvent is None:
+ return None
+
+ if self._lastQueuedLiveRegionEvent.type.startswith("object:text-changed:insert"):
+ return self._lastQueuedLiveRegionEvent.source
+
+ if self._lastQueuedLiveRegionEvent.type.startswith("object:children-changed:add"):
+ return self._lastQueuedLiveRegionEvent.any_data
+
+ return None
+
def handleAsLiveRegion(self, event):
if not _settingsManager.getSetting('inferLiveRegions'):
return False
@@ -4034,7 +4048,7 @@ class Utilities(script_utilities.Utilities):
except:
msg = "WEB: Exception getting role for %s" % event.any_data
debug.println(debug.LEVEL_INFO, msg, True)
- return True
+ return False
if role in [pyatspi.ROLE_UNKNOWN, pyatspi.ROLE_REDUNDANT_OBJECT] \
and not self._getTag(event.any_data):
@@ -4042,6 +4056,13 @@ class Utilities(script_utilities.Utilities):
debug.println(debug.LEVEL_INFO, msg, True)
return False
+ if self.lastQueuedLiveRegion() == event.any_data \
+ and self._lastQueuedLiveRegionEvent.type != event.type:
+ msg = "WEB: Event is believed to be redundant live region notification"
+ debug.println(debug.LEVEL_INFO, msg, True)
+ return False
+
+ self._lastQueuedLiveRegionEvent = event
return True
def getPageObjectCount(self, obj):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]