From 0f27f810ccab247342715de36d0432c27c151c0a Mon Sep 17 00:00:00 2001 From: Dattatray Bhat Date: Fri, 23 Apr 2010 17:13:54 +0530 Subject: [PATCH] [orca]Features Added: Speak Keyboard Shortcuts (flat review & general) This commit adds two key bindings to Orca - 1. Orca + Alt + O : Speak keyboard shortcuts for flat review 2. Orca + Shift + O : Speak general keyboard shortcuts --- src/orca/default.py | 30 +++++++++++++++++++++ src/orca/orca.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 0 deletions(-) diff --git a/src/orca/default.py b/src/orca/default.py index 7205b68..86750ff 100644 --- a/src/orca/default.py +++ b/src/orca/default.py @@ -845,6 +845,22 @@ class Script(script.Script): # _("Toggles the silencing of speech.")) + self.inputEventHandlers["speakOrcaFlatReviewKeyBindingsHandler"] = \ + input_event.InputEventHandler( + orca.speakOrcaFlatReviewKeyBindings, + # Translators: Orca speaks its own keyboard shortcuts for flat review. + # We call it 'orca flat review key help'. + # + _("Speaks Orca keyboard shortcuts for flat review.")) + + self.inputEventHandlers["speakOrcaGeneralKeyBindingsHandler"] = \ + input_event.InputEventHandler( + orca.speakOrcaGeneralKeyBindings, + # Translators: Orca speaks its own general keyboard shortcuts. + # We call it 'orca general key help'. + # + _("Speaks Orca general keyboard shortcuts.")) + self.inputEventHandlers["listAppsHandler"] = \ input_event.InputEventHandler( Script.printAppsHandler, @@ -1842,6 +1858,20 @@ class Script(script.Script): keyBindings.add( keybindings.KeyBinding( + "o", + settings.defaultModifierMask, + settings.ORCA_ALT_MODIFIER_MASK, + self.inputEventHandlers["speakOrcaFlatReviewKeyBindingsHandler"])) + + keyBindings.add( + keybindings.KeyBinding( + "o", + settings.defaultModifierMask, + settings.ORCA_SHIFT_MODIFIER_MASK, + self.inputEventHandlers["speakOrcaGeneralKeyBindingsHandler"])) + + keyBindings.add( + keybindings.KeyBinding( "End", settings.defaultModifierMask, settings.ORCA_CTRL_ALT_MODIFIER_MASK, diff --git a/src/orca/orca.py b/src/orca/orca.py index 8d97f16..194c06c 100644 --- a/src/orca/orca.py +++ b/src/orca/orca.py @@ -1194,6 +1194,78 @@ def helpForOrca(script=None, inputEvent=None): gtk.get_current_event_time()) return True +def speakOrcaFlatReviewKeyBindings(script=None, inputEvent=None): + """Speak Orca Key Bindings for flat review + + Returns True to indicate the input event has been consumed. + """ + kbindings = keybindings.KeyBindings() # An empty KeyBindings object. + for kb in orca_state.activeScript.keyBindings.keyBindings: # Take each keybinding in the active script. + if kb.handler.description.find("flat review")<>-1: # If its description contains "flat review", and + if kb.keysymstring: # it has a non-null keysymstring, and + if not kbindings.hasKeyBinding(kb, "description"): # its description is not present in kbindings, + kbindings.add(kb) # then add it to kbindings. + + n = len(kbindings.keyBindings) # Count keybindings added to kbindings + message = "%d Orca flat review keyboard shortcuts are available. They are," % (n) + speech.speak(_(message)) + + for kb in kbindings.keyBindings: + keysymString = kb.keysymstring.replace("KP_","KEYPAD ") + clickCount = "" + if kb.click_count == 2: + # Translators: Orca keybindings support double + # and triple "clicks" or key presses, similar to + # using a mouse. + # + clickCount = "double click" + elif kb.click_count == 3: + # Translators: Orca keybindings support double + # and triple "clicks" or key presses, similar to + # using a mouse. + # + clickCount = "triple click" + message = kb.handler.description + " " + keybindings.getModifierNames(kb.modifiers) + keysymString + clickCount + "\n" + speech.speak(message) + + return true + +def speakOrcaGeneralKeyBindings(script=None, inputEvent=None): + """Speak Orca Key Bindings other than flat review + + Returns True to indicate the input event has been consumed. + """ + kbindings = keybindings.KeyBindings() # An empty KeyBindings object. + for kb in orca_state.activeScript.keyBindings.keyBindings: # Take each keybinding in the active script. + if kb.handler.description.find("flat review")==-1: # If its description doesn't contain "flat review", and + if kb.keysymstring: # it has a non-null keysymstring, and + if not kbindings.hasKeyBinding(kb, "description"): # its description is not present in kbindings, + kbindings.add(kb) # then add it to kbindings. + + n = len(kbindings.keyBindings) # Count keybindings added to kbindings + message = "%d Orca general keyboard shortcuts are available. They are," % (n) + speech.speak(_(message)) + + for kb in kbindings.keyBindings: + keysymString = kb.keysymstring.replace("KP_","KEYPAD ") + clickCount = "" + if kb.click_count == 2: + # Translators: Orca keybindings support double + # and triple "clicks" or key presses, similar to + # using a mouse. + # + clickCount = "double click" + elif kb.click_count == 3: + # Translators: Orca keybindings support double + # and triple "clicks" or key presses, similar to + # using a mouse. + # + clickCount = "triple click" + message = kb.handler.description + " " + keybindings.getModifierNames(kb.modifiers) + keysymString + clickCount + "\n" + speech.speak(message) + + return true + def quitOrca(script=None, inputEvent=None): """Quit Orca. Check if the user wants to confirm this action. If so, show the confirmation GUI otherwise just shutdown. -- 1.6.3.3