[orca] Improve presentation of layered pane selection changes
- From: Joanmarie Diggs <joanied src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca] Improve presentation of layered pane selection changes
- Date: Sun, 28 Feb 2016 03:13:56 +0000 (UTC)
commit 861ea68da9001b263b6d3d4c178729c90e4087a2
Author: Joanmarie Diggs <jdiggs igalia com>
Date: Sat Feb 27 22:13:11 2016 -0500
Improve presentation of layered pane selection changes
src/orca/script_utilities.py | 17 +++++++++++++++++
src/orca/scripts/toolkits/GAIL/script.py | 17 +++++++++++++++++
src/orca/scripts/toolkits/gtk/script.py | 9 +++++++--
3 files changed, 41 insertions(+), 2 deletions(-)
---
diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
index c34df02..b459e6a 100644
--- a/src/orca/script_utilities.py
+++ b/src/orca/script_utilities.py
@@ -3200,6 +3200,23 @@ class Utilities:
return children
+ def selectedChildCount(self, obj):
+ try:
+ selection = obj.querySelection()
+ except NotImplementedError:
+ msg = "INFO: %s does not implement the selection interface" % obj
+ debug.println(debug.LEVEL_INFO, msg, True)
+ return 0
+ except:
+ msg = "ERROR: Exception querying selection interface for %s" % obj
+ debug.println(debug.LEVEL_INFO, msg, True)
+ return 0
+
+ count = selection.nSelectedChildren
+ msg = "INFO: %s reports %i selected children" % (obj, count)
+ debug.println(debug.LEVEL_INFO, msg, True)
+ return count
+
def focusedChild(self, obj):
isFocused = lambda x: x and x.getState().contains(pyatspi.STATE_FOCUSED)
child = pyatspi.findDescendant(obj, isFocused)
diff --git a/src/orca/scripts/toolkits/GAIL/script.py b/src/orca/scripts/toolkits/GAIL/script.py
index 698e72d..6e8a213 100644
--- a/src/orca/scripts/toolkits/GAIL/script.py
+++ b/src/orca/scripts/toolkits/GAIL/script.py
@@ -118,6 +118,14 @@ class Script(default.Script):
orca.setLocusOfFocus(event, event.source)
return
+ # Unfiled, but yet another case of only getting a focus: event.
+ # Seems to happen mainly when selecting.
+ if role == pyatspi.ROLE_ICON:
+ topLevelObject = self.utilities.topLevelObject(event.source)
+ if topLevelObject == orca_state.activeWindow:
+ orca.setLocusOfFocus(event, event.source)
+ return
+
# Unfiled, but yet another case of only getting a focus: event when
# a widget appears in a parent container and is already focused.
if role == pyatspi.ROLE_TABLE:
@@ -129,6 +137,15 @@ class Script(default.Script):
orca.setLocusOfFocus(event, obj)
return
+ def onSelectionChanged(self, event):
+ """Callback for object:selection-changed accessibility events."""
+
+ if event.source.getRole() == pyatspi.ROLE_LAYERED_PANE \
+ and self.utilities.selectedChildCount(event.source) > 1:
+ return
+
+ super().onSelectionChanged(event)
+
def onTextSelectionChanged(self, event):
"""Callback for object:text-selection-changed accessibility events."""
diff --git a/src/orca/scripts/toolkits/gtk/script.py b/src/orca/scripts/toolkits/gtk/script.py
index e7126e4..b1c3fed 100644
--- a/src/orca/scripts/toolkits/gtk/script.py
+++ b/src/orca/scripts/toolkits/gtk/script.py
@@ -198,11 +198,16 @@ class Script(default.Script):
def onSelectionChanged(self, event):
"""Callback for object:selection-changed accessibility events."""
- if event.source.getRole() == pyatspi.ROLE_COMBO_BOX \
+ role = event.source.getRole()
+ if role == pyatspi.ROLE_COMBO_BOX \
and not event.source.getState().contains(pyatspi.STATE_FOCUSED):
return
- default.Script.onSelectionChanged(self, event)
+ if role == pyatspi.ROLE_LAYERED_PANE \
+ and self.utilities.selectedChildCount(event.source) > 1:
+ return
+
+ super().onSelectionChanged(event)
def onShowingChanged(self, event):
"""Callback for object:state-changed:showing accessibility events."""
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]