orca r4072 - in trunk: . src/orca
- From: wwalker svn gnome org
- To: svn-commits-list gnome org
- Subject: orca r4072 - in trunk: . src/orca
- Date: Fri, 1 Aug 2008 20:47:02 +0000 (UTC)
Author: wwalker
Date: Fri Aug 1 20:47:02 2008
New Revision: 4072
URL: http://svn.gnome.org/viewvc/orca?rev=4072&view=rev
Log:
Fix for bug #536985 - Orca no longer reads applets on the panel
Modified:
trunk/ChangeLog
trunk/src/orca/braillegenerator.py
trunk/src/orca/focus_tracking_presenter.py
trunk/src/orca/speechgenerator.py
Modified: trunk/src/orca/braillegenerator.py
==============================================================================
--- trunk/src/orca/braillegenerator.py (original)
+++ trunk/src/orca/braillegenerator.py Fri Aug 1 20:47:02 2008
@@ -80,6 +80,8 @@
self._getBrailleRegionsForDialog
self.brailleGenerators[pyatspi.ROLE_DIRECTORY_PANE] = \
self._getBrailleRegionsForDirectoryPane
+ self.brailleGenerators[pyatspi.ROLE_EMBEDDED] = \
+ self._getBrailleRegionsForEmbedded
self.brailleGenerators[pyatspi.ROLE_FRAME] = \
self._getBrailleRegionsForFrame
self.brailleGenerators[pyatspi.ROLE_HTML_CONTAINER] = \
@@ -548,6 +550,39 @@
return self._getDefaultBrailleRegions(obj)
+ def _getBrailleRegionsForEmbedded(self, obj, role=None):
+ """Gets text to be displayed for the current embedded object.
+
+ Arguments:
+ - obj: an Accessible
+ - role: Role to use as an override.
+
+ Returns a list where the first element is a list of Regions to
+ display and the second element is the Region which should get
+ focus.
+ """
+
+ self._debugGenerator("_getBrailleRegionsForEmbedded", obj)
+
+ regions = []
+
+ text = ""
+ text = self._script.appendString(
+ text, self._script.getDisplayedLabel(obj))
+ text = self._script.appendString(
+ text, self._script.getDisplayedText(obj))
+ if not text:
+ try:
+ text = obj.getApplication().name
+ except:
+ pass
+
+ regions = []
+ componentRegion = braille.Component(obj, text)
+ regions.append(componentRegion)
+
+ return [regions, componentRegion]
+
def _getBrailleRegionsForFrame(self, obj):
"""Get the braille for a frame.
Modified: trunk/src/orca/focus_tracking_presenter.py
==============================================================================
--- trunk/src/orca/focus_tracking_presenter.py (original)
+++ trunk/src/orca/focus_tracking_presenter.py Fri Aug 1 20:47:02 2008
@@ -596,6 +596,8 @@
try:
state = event.source.getState()
if not state.contains(pyatspi.STATE_ICONIFIED):
+ eType = event.type
+ setNewActiveScript = eType == "window:activate"
# [[[TODO: WDW - HACK we look for frame that get
# focus: as a means to detect active scripts
@@ -605,24 +607,45 @@
# in use, and then issues a focus: event on the
# main window, which is a frame.]]]
#
+ setNewActiveScript = setNewActiveScript \
+ or (eType.startswith("focus") \
+ and (event.source.getRole() == pyatspi.ROLE_FRAME))
+
# Added in a further check. We look for modal panels
# that are now showing (such as gnome-screensaver-dialog).
# See bug #530368 for more details.
#
+ setNewActiveScript = setNewActiveScript \
+ or (eType.startswith("object:state-changed:showing")
+ and (event.source.getRole() == pyatspi.ROLE_PANEL)
+ and state.contains(pyatspi.STATE_MODAL))
+
# Also, we might be running into a gnome-panel
# applet, which is indicated by a host application
# with no children. See bug #536985.
#
- eType = event.type
- if (eType == "window:activate") \
- or ((eType.startswith("focus"))
- and (event.source.getRole() == pyatspi.ROLE_FRAME)) \
- or (eType.startswith("object:state-changed:showing")
- and (event.source.getRole() == pyatspi.ROLE_PANEL)
- and state.contains(pyatspi.STATE_MODAL)) \
- or (event.host_application \
- and len(event.host_application) == 0):
+ setNewActiveScript = setNewActiveScript \
+ or (event.host_application \
+ and len(event.host_application) == 0 \
+ and orca_state.activeScript \
+ and (orca_state.activeScript.app \
+ != event.host_application))
+
+ # Or, we might just be getting a focus event. In this
+ # case, assume the window has focus and we missed an
+ # event for it somehow.
+ #
+ if not setNewActiveScript:
+ if eType.startswith("focus") \
+ or (eType.startswith("object:state-changed:focused")\
+ and event.detail1):
+ setNewActiveScript = \
+ orca_state.activeScript \
+ and event.host_application \
+ and (orca_state.activeScript.app \
+ != event.host_application)
+ if setNewActiveScript:
# We'll let someone else decide if it's important
# to stop speech or not.
#speech.stop()
Modified: trunk/src/orca/speechgenerator.py
==============================================================================
--- trunk/src/orca/speechgenerator.py (original)
+++ trunk/src/orca/speechgenerator.py Fri Aug 1 20:47:02 2008
@@ -78,6 +78,8 @@
self._getSpeechForDialog
self.speechGenerators[pyatspi.ROLE_DIRECTORY_PANE] = \
self._getSpeechForDirectoryPane
+ self.speechGenerators[pyatspi.ROLE_EMBEDDED] = \
+ self._getSpeechForEmbedded
self.speechGenerators[pyatspi.ROLE_FRAME] = \
self._getSpeechForFrame
self.speechGenerators[pyatspi.ROLE_HTML_CONTAINER] = \
@@ -616,6 +618,39 @@
return utterances
+ def _getSpeechForEmbedded(self, obj, already_focused, role=None):
+ """Gets a list of utterances to be spoken for the current
+ embedded component (i.e., something in a panel).
+
+ Arguments:
+ - obj: an Accessible
+ - already_focused: False if object just received focus
+ - role: A role that should be used instead of the Accessible's
+ possible role.
+
+ Returns a list of utterances to be spoken for the object.
+ """
+
+ utterances = []
+
+ label = self._getSpeechForObjectLabel(obj)
+ utterances.extend(label)
+ name = self._getSpeechForObjectName(obj)
+ if name != label:
+ utterances.extend(name)
+ if not utterances:
+ try:
+ utterances.append(obj.getApplication().name)
+ except:
+ pass
+
+ self._debugGenerator("_getSpeechForEmbedded",
+ obj,
+ already_focused,
+ utterances)
+
+ return utterances
+
def _getSpeechForFrame(self, obj, already_focused):
"""Get the speech for a frame.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]