def shutdown(script=None, inputEvent=None): """Exits Orca. Unregisters any event listeners and cleans up. Also quits the bonobo main loop and resets the initialized state to False. Returns True if the shutdown procedure ran or False if this module was never initialized. """ global _initialized if not _initialized: return False # Try to say goodbye, but be defensive if something has hung. # if settings.timeoutCallback and (settings.timeoutTime > 0): signal.signal(signal.SIGALRM, settings.timeoutCallback) signal.alarm(settings.timeoutTime) # Translators: this is what Orca speaks and brailles when it quits. # speech.speak(_("Goodbye.")) braille.displayMessage(_("Goodbye.")) # Deregister our event listeners # registry = atspi.Registry() registry.deregisterEventListener(_onChildrenChanged, "object:children-changed:") registry.deregisterEventListener(_onMouseButton, "mouse:button") if _currentPresentationManager >= 0: _PRESENTATION_MANAGERS[_currentPresentationManager].deactivate() # Shutdown all the other support. # if settings.enableSpeech: speech.shutdown() if settings.enableBraille: braille.shutdown(); if settings.enableMagnifier: mag.shutdown(); registry.stop() if settings.timeoutCallback and (settings.timeoutTime > 0): signal.alarm(0) _initialized = False return True
def shutdown(script=None, inputEvent=None): """Exits Orca. Unregisters any event listeners and cleans up. Also quits the bonobo main loop and resets the initialized state to False. Returns True if the shutdown procedure ran or False if this module was never initialized. """ global _initialized if not _initialized: return False # Try to say goodbye, but be defensive if something has hung. # if settings.timeoutCallback and (settings.timeoutTime > 0): signal.signal(signal.SIGALRM, settings.timeoutCallback) signal.alarm(settings.timeoutTime) # Translators: this is what Orca speaks and brailles when it quits. # speech.speak(_("Goodbye.")) braille.displayMessage(_("Goodbye.")) # Deregister our event listeners # registry = atspi.Registry() registry.deregisterEventListener(_onChildrenChanged, "object:children-changed:") registry.deregisterEventListener(_onMouseButton, "mouse:button") if _currentPresentationManager >= 0: _PRESENTATION_MANAGERS[_currentPresentationManager].deactivate() # Shutdown all the other support. # if settings.enableSpeech: speech.shutdown() if settings.enableBraille: braille.shutdown() if settings.enableMagnifier: mag.shutdown() registry.stop() if settings.timeoutCallback and (settings.timeoutTime > 0): signal.alarm(0) _initialized = False return True
def shutdownOnSignal(signum, frame): global exitCount debug.println(debug.LEVEL_ALL, "Shutting down and exiting due to signal = %d" \ % signum) debug.println(debug.LEVEL_ALL, "Current stack is:") debug.printStack(debug.LEVEL_ALL) # Well...we'll try to exit nicely, but if we keep getting called, # something bad is happening, so just quit. # if exitCount: abort(signum) else: exitCount += 1 # Try to do a graceful shutdown if we can. # if settings.timeoutCallback and (settings.timeoutTime > 0): signal.signal(signal.SIGALRM, settings.timeoutCallback) signal.alarm(settings.timeoutTime) try: if _initialized: shutdown() else: # We always want to try to shutdown speech since the # speech servers are very persistent about living. # speech.shutdown() shutdown() cleanExit = True except: cleanExit = False if settings.timeoutCallback and (settings.timeoutTime > 0): signal.alarm(0) if not cleanExit: abort(signum)
def loadUserSettings(script=None, inputEvent=None): """Loads (and reloads) the user settings module, reinitializing things such as speech if necessary. Returns True to indicate the input event has been consumed. """ global _userSettings # Shutdown the output drivers and give them a chance to die. # httpserver.shutdown() speech.shutdown() braille.shutdown() mag.shutdown() if _currentPresentationManager >= 0: _PRESENTATION_MANAGERS[_currentPresentationManager].deactivate() time.sleep(1) reloaded = False if _userSettings: try: reload(_userSettings) reloaded = True except ImportError: debug.printException(debug.LEVEL_FINEST) except: debug.printException(debug.LEVEL_SEVERE) else: try: _userSettings = __import__("user-settings") except ImportError: debug.printException(debug.LEVEL_FINEST) except: debug.printException(debug.LEVEL_SEVERE) # If any settings were added to the command line, they take # precedence over everything else. # for key in _commandLineSettings: settings.__dict__[key] = _commandLineSettings[key] if settings.enableSpeech: try: speech.init() if reloaded: # Translators: there is a keystroke to reload the user # preferences. This is a spoken prompt to let the user # know when the preferences has been reloaded. # speech.speak(_("Orca user settings reloaded.")) debug.println(debug.LEVEL_CONFIGURATION, "Speech module has been initialized.") except: debug.printException(debug.LEVEL_SEVERE) debug.println(debug.LEVEL_SEVERE, "Could not initialize connection to speech.") else: debug.println(debug.LEVEL_CONFIGURATION, "Speech module has NOT been initialized.") if settings.enableBraille: try: braille.init(_processBrailleEvent, settings.tty) except: debug.printException(debug.LEVEL_WARNING) debug.println(debug.LEVEL_WARNING, "Could not initialize connection to braille.") if settings.enableMagnifier: try: mag.init() debug.println(debug.LEVEL_CONFIGURATION, "Magnification module has been initialized.") except: debug.printException(debug.LEVEL_SEVERE) debug.println(debug.LEVEL_SEVERE, "Could not initialize connection to magnifier.") else: debug.println(debug.LEVEL_CONFIGURATION, "Magnification module has NOT been initialized.") # We don't want the Caps_Lock modifier to act as a locking # modifier if it used as the Orca modifier key. In addition, if # the KP_Insert key is used as the Orca modifier key, we want to # make sure we clear any other keysyms that might be in use on # that key since we won't be able to detect them as being the Orca # modifier key. For example, KP_Insert produces "KP_Insert" when # pressed by itself, but Shift+KP_Insert produces "0". # # The original values are saved/reset in the orca shell script. # # [[[TODO: WDW - we probably should just to a 'xmodmap -e "%s = %s"' # for all of the orcaModifierKeys, but saving/restoring the values # becomes a little more difficult. If we could assume a writeable # filesystem (we cannot), we could do a 'xmodmap -pke > /tmp/foo' # to save the keymap and a 'xmodmap /tmp/foo' to restore it. # For now, we'll just look at the Orca modifier keys we support # (Caps Lock, KP_Insert, and Insert).]]] # for keyName in settings.orcaModifierKeys: if keyName == "Caps_Lock": os.system('xmodmap -e "clear Lock"') if keyName in ["Caps_Lock", "KP_Insert", "Insert"]: command = 'xmodmap -e "keysym %s = %s"' % (keyName, keyName) os.system(command) if _currentPresentationManager >= 0: _PRESENTATION_MANAGERS[_currentPresentationManager].activate() _showMainWindowGUI() httpserver.init() return True