# Orca # # Copyright 2005-2009 Sun Microsystems Inc. # Copyright 2010 Joanmarie Diggs # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., Franklin Street, Fifth Floor, # Boston MA 02110-1301 USA. """Custom script for rhythmbox.""" __id__ = "$Id$" __version__ = "$Revision$" __date__ = "$Date$" __copyright__ = "Copyright (c) 2005-2009 Sun Microsystems Inc." \ "Copyright (c) 2010 Joanmarie Diggs" __license__ = "LGPL" import pyatspi import orca.scripts.default as default import orca.orca as orca import orca.orca_state as orca_state from speech_generator import SpeechGenerator from braille_generator import BrailleGenerator from formatting import Formatting class Script(default.Script): def __init__(self, app): """Creates a new script for the given application. Arguments: - app: the application to create a script for. """ default.Script.__init__(self, app) def getBrailleGenerator(self): """Returns the braille generator for this script. """ return BrailleGenerator(self) def getSpeechGenerator(self): """Returns the speech generator for this script. """ return SpeechGenerator(self) def getFormatting(self): """Returns the formatting strings for this script.""" return Formatting(self) def adjustTableCell(self, obj): # Check to see if this is a table cell from the Library table. # If so, it'll have five children and we are interested in the # penultimate one. See bug #512639 for more details. # if obj.childCount == 5: return obj[3] else: return obj def onActiveDescendantChanged(self, event): """Called when an object who manages its own descendants detects a change in one of its children. Overridden here because the table on the left-hand side lacks STATE_FOCUSED which causes the default script to reject this event. Arguments: - event: the Event """ child = event.any_data if child: orca.setLocusOfFocus(event, child) else: orca.setLocusOfFocus(event, event.source) # We'll tuck away the activeDescendant information for future # reference since the AT-SPI gives us little help in finding # this. # if orca_state.locusOfFocus \ and (orca_state.locusOfFocus != event.source): self.pointOfReference['activeDescendantInfo'] = \ [orca_state.locusOfFocus.parent, orca_state.locusOfFocus.getIndexInParent()] def onFocus(self, event): """Called whenever an object gets focus. Overridden here because a page tab keeps making bogus focus claims when the user is in the tree on the left-hand side. Arguments: - event: the Event """ if event.source.getRole() == pyatspi.ROLE_PAGE_TAB \ and not event.source.name and orca_state.locusOfFocus \ and orca_state.locusOfFocus.getRole() == pyatspi.ROLE_TABLE_CELL: return default.Script.onFocus(self, event)