[orca] Separate space out from other "action" keys for the purpose of key echo



commit 9212608b54998c424ab36efb677c261887e58aef
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue Nov 10 04:03:15 2015 -0500

    Separate space out from other "action" keys for the purpose of key echo

 help/C/howto_text_setup.page     |   11 +++++++++--
 help/C/preferences_key_echo.page |   14 ++++++++++++--
 src/orca/input_event.py          |   14 +++++++++++++-
 src/orca/messages.py             |    5 +++++
 src/orca/orca-setup.ui           |   29 ++++++++++++++++++++++++-----
 src/orca/orca_console_prefs.py   |   16 ++++++++++++++++
 src/orca/orca_gui_prefs.py       |    3 +++
 src/orca/settings.py             |    2 ++
 8 files changed, 84 insertions(+), 10 deletions(-)
---
diff --git a/help/C/howto_text_setup.page b/help/C/howto_text_setup.page
index 50f0050..56933da 100644
--- a/help/C/howto_text_setup.page
+++ b/help/C/howto_text_setup.page
@@ -106,6 +106,13 @@
           </p>
         </item>
         <item>
+          <p>space</p>
+          <p>
+            This option controls whether or not <key>space</key> should
+            be spoken when pressed.
+          </p>
+        </item>
+        <item>
           <p>modifier keys</p>
           <p>
             This option controls whether or not <key>Shift</key>, <key>Ctrl</key>,
@@ -130,8 +137,8 @@
           <p>action keys</p>
           <p>
             This option controls whether or not <key>BackSpace</key>,
-            <key>Delete</key>, <key>Return</key>, <key>Space</key>,
-            <key>Tab</key>, <key>Escape</key>, <key>Page Up</key>, <key>Page Down</key>,
+            <key>Delete</key>, <key>Return</key>, <key>Escape</key>,
+            <key>Tab</key>, <key>Page Up</key>, <key>Page Down</key>,
             <key>Home</key>, and <key>End</key> should be spoken when
             pressed.
           </p>
diff --git a/help/C/preferences_key_echo.page b/help/C/preferences_key_echo.page
index 1de5ab5..573e126 100644
--- a/help/C/preferences_key_echo.page
+++ b/help/C/preferences_key_echo.page
@@ -59,6 +59,16 @@
       </p>
     </section>
     <section>
+      <title>Enable space</title>
+      <p>
+        This option controls whether or not <key>space</key> should be
+        spoken when pressed.
+      </p>
+      <p>
+        Default value: checked
+      </p>
+    </section>
+    <section>
       <title>Enable modifier keys</title>
       <p>
         This option controls whether or not <key>Shift</key>, <key>Ctrl</key>,
@@ -82,8 +92,8 @@
       <title>Enable action keys</title>
       <p>
         This option controls whether or not <key>BackSpace</key>, <key>Delete
-        </key>, <key>Return</key>, <key>Space</key>, <key>Tab</key>, <key>Escape</key>
-        <key>Page Up</key>, <key>Page Down</key>, <key>Home</key>, and <key>End</key>
+        </key>, <key>Return</key>, <key>Escape</key>, <key>Tab</key>, <key>Page
+        Up</key>, <key>Page Down</key>, <key>Home</key>, and <key>End</key>
         should be spoken when pressed.
       </p>
       <p>
diff --git a/src/orca/input_event.py b/src/orca/input_event.py
index f2f10b7..74cea40 100644
--- a/src/orca/input_event.py
+++ b/src/orca/input_event.py
@@ -111,6 +111,7 @@ class KeyboardEvent(InputEvent):
     TYPE_ALPHABETIC       = "alphabetic"
     TYPE_NUMERIC          = "numeric"
     TYPE_PUNCTUATION      = "punctuation"
+    TYPE_SPACE            = "space"
 
     def __init__(self, event):
         """Creates a new InputEvent of type KEYBOARD_EVENT.
@@ -187,6 +188,9 @@ class KeyboardEvent(InputEvent):
         elif self.isPunctuationKey():
             self.keyType = KeyboardEvent.TYPE_PUNCTUATION
             self.shouldEcho = settings.enablePunctuationKeys or settings.enableEchoByCharacter
+        elif self.isSpace():
+            self.keyType = KeyboardEvent.TYPE_SPACE
+            self.shouldEcho = settings.enableSpace or settings.enableEchoByCharacter
         else:
             self.keyType = KeyboardEvent.TYPE_UNKNOWN
             self.shouldEcho = False
@@ -235,7 +239,7 @@ class KeyboardEvent(InputEvent):
 
         return self.event_string in \
             ["Return", "Escape", "Tab", "BackSpace", "Delete",
-             "Page_Up", "Page_Down", "space", " "]
+             "Page_Up", "Page_Down"]
 
     def isAlphabeticKey(self):
         """Return True if this is an alphabetic key."""
@@ -360,6 +364,14 @@ class KeyboardEvent(InputEvent):
 
         return self.event_string.isprintable() and not self.event_string.isspace()
 
+    def isSpace(self):
+        """Return True if this is the space key."""
+
+        if self.keyType:
+            return self.keyType == KeyboardEvent.TYPE_SPACE
+
+        return self.event_string in ["space", " "]
+
     def isCharacterEchoable(self):
         """Returns True if the script will echo this event as part of
         character echo. We do this to not double-echo a given printable
diff --git a/src/orca/messages.py b/src/orca/messages.py
index 21e52fa..1aad633 100644
--- a/src/orca/messages.py
+++ b/src/orca/messages.py
@@ -389,6 +389,11 @@ CONSOLE_SETUP_ENABLE_ECHO_NUMERIC_KEYS = \
 CONSOLE_SETUP_ENABLE_ECHO_PUNCTUATION_KEYS = \
     _("Enable punctuation keys?  Enter y or n: ")
 
+# Translators: This is in reference to key echo for the space key and
+# is part of Orca's console-based setup.
+CONSOLE_SETUP_ENABLE_SPACE = \
+    _("Enable space?  Enter y or n: ")
+
 # Translators: This is in reference to key echo for keys such as CTRL, ALT,
 # Shift, Insert, etc. It is part of Orca's console-based setup.
 CONSOLE_SETUP_ENABLE_ECHO_MODIFIER_KEYS = \
diff --git a/src/orca/orca-setup.ui b/src/orca/orca-setup.ui
index 2a9dc94..65b15a7 100644
--- a/src/orca/orca-setup.ui
+++ b/src/orca/orca-setup.ui
@@ -2437,6 +2437,25 @@
                           </packing>
                         </child>
                         <child>
+                          <object class="GtkCheckButton" id="enableSpaceCheckButton">
+                            <property name="label" translatable="yes">Enable _space</property>
+                            <property name="use_action_appearance">False</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
+                            <property name="use_underline">True</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" handler="checkButtonToggled" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">3</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                        <child>
                           <object class="GtkCheckButton" id="enableModifierKeysCheckButton">
                             <property name="label" translatable="yes">Enable _modifier keys</property>
                             <property name="use_action_appearance">False</property>
@@ -2450,7 +2469,7 @@
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
-                            <property name="top_attach">3</property>
+                            <property name="top_attach">4</property>
                             <property name="width">1</property>
                             <property name="height">1</property>
                           </packing>
@@ -2469,7 +2488,7 @@
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
-                            <property name="top_attach">4</property>
+                            <property name="top_attach">5</property>
                             <property name="width">1</property>
                             <property name="height">1</property>
                           </packing>
@@ -2488,7 +2507,7 @@
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
-                            <property name="top_attach">5</property>
+                            <property name="top_attach">6</property>
                             <property name="width">1</property>
                             <property name="height">1</property>
                           </packing>
@@ -2507,7 +2526,7 @@
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
-                            <property name="top_attach">6</property>
+                            <property name="top_attach">7</property>
                             <property name="width">1</property>
                             <property name="height">1</property>
                           </packing>
@@ -2526,7 +2545,7 @@
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
-                            <property name="top_attach">7</property>
+                            <property name="top_attach">8</property>
                             <property name="width">1</property>
                             <property name="height">1</property>
                           </packing>
diff --git a/src/orca/orca_console_prefs.py b/src/orca/orca_console_prefs.py
index 62649d2..900318b 100644
--- a/src/orca/orca_console_prefs.py
+++ b/src/orca/orca_console_prefs.py
@@ -277,6 +277,7 @@ def setupSpeech(prefsDict):
         prefsDict["enableAlphabeticKeys"] = False
         prefsDict["enableNumericKeys"] = False
         prefsDict["enablePunctuationKeys"] = False
+        prefsDict["enableSpace"]         = False
         prefsDict["enableModifierKeys"]  = False
         prefsDict["enableFunctionKeys"]  = False
         prefsDict["enableActionKeys"]    = False
@@ -328,6 +329,21 @@ def setupSpeech(prefsDict):
 
     stop = True
     while keyEcho and True:
+        answer = sayAndPrint(
+            messages.CONSOLE_SETUP_ENABLE_SPACE,
+            stop,
+            True,
+            speechServerChoice,
+            speechVoiceChoice)
+        try:
+            prefsDict["enableSpace"] = checkYes(answer)
+            break
+        except:
+            stop = False
+            sayAndPrint(messages.CONSOLE_SETUP_ENTER_Y_OR_N)
+
+    stop = True
+    while keyEcho and True:
         answer = sayAndPrint(messages.CONSOLE_SETUP_ENABLE_ECHO_MODIFIER_KEYS,
                              stop,
                              True,
diff --git a/src/orca/orca_gui_prefs.py b/src/orca/orca_gui_prefs.py
index 89a69b6..e7d1740 100644
--- a/src/orca/orca_gui_prefs.py
+++ b/src/orca/orca_gui_prefs.py
@@ -1508,6 +1508,8 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
                         prefs.get("enableNumericKeys", settings.enableNumericKeys))
         self.get_widget("enablePunctuationKeysCheckButton").set_active(
                         prefs.get("enablePunctuationKeys", settings.enablePunctuationKeys))
+        self.get_widget("enableSpaceCheckButton").set_active(
+                        prefs.get("enableSpace", settings.enableSpace))
         self.get_widget("enableModifierKeysCheckButton").set_active( \
                         prefs["enableModifierKeys"])
         self.get_widget("enableFunctionKeysCheckButton").set_active( \
@@ -1744,6 +1746,7 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
         self.get_widget("enableAlphabeticKeysCheckButton").set_sensitive(enable)
         self.get_widget("enableNumericKeysCheckButton").set_sensitive(enable)
         self.get_widget("enablePunctuationKeysCheckButton").set_sensitive(enable)
+        self.get_widget("enableSpaceCheckButton").set_sensitive(enable)
         self.get_widget("enableModifierKeysCheckButton").set_sensitive(enable)
         self.get_widget("enableFunctionKeysCheckButton").set_sensitive(enable)
         self.get_widget("enableActionKeysCheckButton").set_sensitive(enable)
diff --git a/src/orca/settings.py b/src/orca/settings.py
index 04cf9da..5081e15 100644
--- a/src/orca/settings.py
+++ b/src/orca/settings.py
@@ -49,6 +49,7 @@ userCustomizableSettings = [
     "enableAlphabeticKeys",
     "enableNumericKeys",
     "enablePunctuationKeys",
+    "enableSpace",
     "enableModifierKeys",
     "enableFunctionKeys",
     "enableActionKeys",
@@ -242,6 +243,7 @@ enableKeyEcho                = True
 enableAlphabeticKeys         = True
 enableNumericKeys            = True
 enablePunctuationKeys        = True
+enableSpace                  = True
 enableModifierKeys           = True
 enableFunctionKeys           = True
 enableActionKeys             = True


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]