[orca] Break up printable-keys keyecho into alpha, numeric, and punctuation
- From: Joanmarie Diggs <joanied src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca] Break up printable-keys keyecho into alpha, numeric, and punctuation
- Date: Tue, 10 Nov 2015 05:35:43 +0000 (UTC)
commit 2ab7e66c754a8dea07fb9c8dea0e0b53611df104
Author: Joanmarie Diggs <jdiggs igalia com>
Date: Tue Nov 10 00:31:43 2015 -0500
Break up printable-keys keyecho into alpha, numeric, and punctuation
help/C/howto_text_setup.page | 23 +++++++++++---
help/C/preferences_key_echo.page | 31 +++++++++++++++----
src/orca/input_event.py | 62 ++++++++++++++++++++++++++++++-------
src/orca/messages.py | 16 ++++++++--
src/orca/orca-setup.ui | 52 +++++++++++++++++++++++++++----
src/orca/orca_console_prefs.py | 38 +++++++++++++++++++++--
src/orca/orca_gui_prefs.py | 12 +++++--
src/orca/scripts/default.py | 3 +-
src/orca/settings.py | 8 ++++-
9 files changed, 202 insertions(+), 43 deletions(-)
---
diff --git a/help/C/howto_text_setup.page b/help/C/howto_text_setup.page
index 117fa6b..50f0050 100644
--- a/help/C/howto_text_setup.page
+++ b/help/C/howto_text_setup.page
@@ -85,11 +85,24 @@
</p>
<list>
<item>
- <p>alphanumeric and punctuation keys</p>
+ <p>alphabetic keys</p>
<p>
This option controls whether or not keys like <key>a</key>,
- <key>b</key>, <key>c</key>, <key>;</key>, <key>?</key>, and so on
- should be spoken when pressed.
+ <key>b</key>, and <key>c</key> should be spoken when pressed.
+ </p>
+ </item>
+ <item>
+ <p>numeric keys</p>
+ <p>
+ This option controls whether or not keys like <key>1</key>,
+ <key>2</key>, and <key>3</key> should be spoken when pressed.
+ </p>
+ </item>
+ <item>
+ <p>punctuation keys</p>
+ <p>
+ This option controls whether or not keys like <key>%</key>,
+ <key>;</key>, and <key>?</key> should be spoken when pressed.
</p>
</item>
<item>
@@ -117,8 +130,8 @@
<p>action keys</p>
<p>
This option controls whether or not <key>BackSpace</key>,
- <key>Delete</key>, <key>Return</key>, <key>Escape</key>,
- <key>Tab</key>, <key>Page Up</key>, <key>Page Down</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> should be spoken when
pressed.
</p>
diff --git a/help/C/preferences_key_echo.page b/help/C/preferences_key_echo.page
index d365c20..1de5ab5 100644
--- a/help/C/preferences_key_echo.page
+++ b/help/C/preferences_key_echo.page
@@ -29,11 +29,30 @@
Default value: checked
</p>
<section>
- <title>Enable alphanumeric and punctuation keys</title>
+ <title>Enable alphabetic keys</title>
<p>
This option controls whether or not keys like <key>a</key>,
- <key>b</key>, <key>c</key>, <key>;</key>, <key>?</key>, and
- so on should be spoken when pressed.
+ <key>b</key>, and <key>c</key> should be spoken when pressed.
+ </p>
+ <p>
+ Default value: checked
+ </p>
+ </section>
+ <section>
+ <title>Enable numeric keys</title>
+ <p>
+ This option controls whether or not keys like <key>1</key>,
+ <key>2</key>, and <key>3</key> should be spoken when pressed.
+ </p>
+ <p>
+ Default value: checked
+ </p>
+ </section>
+ <section>
+ <title>Enable punctuation keys</title>
+ <p>
+ This option controls whether or not keys like <key>%</key>,
+ <key>;</key>, and <key>?</key> should be spoken when pressed.
</p>
<p>
Default value: checked
@@ -63,8 +82,8 @@
<title>Enable action keys</title>
<p>
This option controls whether or not <key>BackSpace</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>
+ </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>
should be spoken when pressed.
</p>
<p>
@@ -103,7 +122,7 @@
</p>
<p>
While echo by character seems quite similar to the key echo of
- alphanumeric and punctuation keys, there are important differences,
+ alphabetic, numeric, and punctuation keys, there are important differences,
especially with respect to accented letters and other symbols for which
there is no dedicated key:
</p>
diff --git a/src/orca/input_event.py b/src/orca/input_event.py
index 0c9f3b8..f2f10b7 100644
--- a/src/orca/input_event.py
+++ b/src/orca/input_event.py
@@ -108,6 +108,9 @@ class KeyboardEvent(InputEvent):
TYPE_ACTION = "action"
TYPE_NAVIGATION = "navigation"
TYPE_DIACRITICAL = "diacritical"
+ TYPE_ALPHABETIC = "alphabetic"
+ TYPE_NUMERIC = "numeric"
+ TYPE_PUNCTUATION = "punctuation"
def __init__(self, event):
"""Creates a new InputEvent of type KEYBOARD_EVENT.
@@ -175,10 +178,15 @@ class KeyboardEvent(InputEvent):
self.shouldEcho = settings.presentLockingKeys
if self.shouldEcho == None:
self.shouldEcho = not settings.onlySpeakDisplayedText
- elif self.isPrintableKey():
- self.keyType = KeyboardEvent.TYPE_PRINTABLE
- self.shouldEcho = \
- settings.enablePrintableKeys or settings.enableEchoByCharacter
+ elif self.isAlphabeticKey():
+ self.keyType = KeyboardEvent.TYPE_ALPHABETIC
+ self.shouldEcho = settings.enableAlphabeticKeys or settings.enableEchoByCharacter
+ elif self.isNumericKey():
+ self.keyType = KeyboardEvent.TYPE_NUMERIC
+ self.shouldEcho = settings.enableNumericKeys or settings.enableEchoByCharacter
+ elif self.isPunctuationKey():
+ self.keyType = KeyboardEvent.TYPE_PUNCTUATION
+ self.shouldEcho = settings.enablePunctuationKeys or settings.enableEchoByCharacter
else:
self.keyType = KeyboardEvent.TYPE_UNKNOWN
self.shouldEcho = False
@@ -227,7 +235,18 @@ class KeyboardEvent(InputEvent):
return self.event_string in \
["Return", "Escape", "Tab", "BackSpace", "Delete",
- "Page_Up", "Page_Down"]
+ "Page_Up", "Page_Down", "space", " "]
+
+ def isAlphabeticKey(self):
+ """Return True if this is an alphabetic key."""
+
+ if self.keyType:
+ return self.keyType == KeyboardEvent.TYPE_ALPHABETIC
+
+ if not len(self.event_string) == 1:
+ return False
+
+ return self.event_string.isalpha()
def isDiacriticalKey(self):
"""Return True if this is a non-spacing diacritical key."""
@@ -276,6 +295,17 @@ class KeyboardEvent(InputEvent):
'Shift_L', 'Shift_R', 'Meta_L', 'Meta_R',
'ISO_Level3_Shift']
+ def isNumericKey(self):
+ """Return True if this is a numeric key."""
+
+ if self.keyType:
+ return self.keyType == KeyboardEvent.TYPE_NUMERIC
+
+ if not len(self.event_string) == 1:
+ return False
+
+ return self.event_string.isnumeric()
+
def isOrcaModifier(self):
"""Return True if this is the Orca modifier key."""
@@ -303,25 +333,33 @@ class KeyboardEvent(InputEvent):
def isPrintableKey(self):
"""Return True if this is a printable key."""
- if self.keyType:
- return self.keyType == KeyboardEvent.TYPE_PRINTABLE
-
if self.event_string in ["space", " "]:
return True
if not len(self.event_string) == 1:
return False
- if self.event_string.isalnum() or self.event_string.isspace():
- return True
-
- return unicodedata.category(self.event_string)[0] in ('P', 'S')
+ return self.event_string.isprintable()
def isPressedKey(self):
"""Returns True if the key is pressed"""
return self.type == pyatspi.KEY_PRESSED_EVENT
+ def isPunctuationKey(self):
+ """Return True if this is a punctuation key."""
+
+ if self.keyType:
+ return self.keyType == KeyboardEvent.TYPE_PUNCTUATION
+
+ if not len(self.event_string) == 1:
+ return False
+
+ if self.isAlphabeticKey() or self.isNumericKey():
+ return False
+
+ return self.event_string.isprintable() and not self.event_string.isspace()
+
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 b3b4dec..21e52fa 100644
--- a/src/orca/messages.py
+++ b/src/orca/messages.py
@@ -374,10 +374,20 @@ CONSOLE_SETUP_ENABLE_BRAILLE = _("Enable Braille? Enter y or n: ")
# classes of keys they want echoed.
CONSOLE_SETUP_ENABLE_ECHO_KEY = _("Enable key echo? Enter y or n: ")
-# Translators: This is in reference to key echo for normal text entry keys and
+# Translators: This is in reference to key echo for alphabetic keys and
# is part of Orca's console-based setup.
-CONSOLE_SETUP_ENABLE_ECHO_PRINTABLE_KEYS = \
- _("Enable alphanumeric and punctuation keys? Enter y or n: ")
+CONSOLE_SETUP_ENABLE_ECHO_ALPHABETIC_KEYS = \
+ _("Enable alphabetic keys? Enter y or n: ")
+
+# Translators: This is in reference to key echo for numeric keys and
+# is part of Orca's console-based setup.
+CONSOLE_SETUP_ENABLE_ECHO_NUMERIC_KEYS = \
+ _("Enable numeric keys? Enter y or n: ")
+
+# Translators: This is in reference to key echo for punctuation keys and
+# is part of Orca's console-based setup.
+CONSOLE_SETUP_ENABLE_ECHO_PUNCTUATION_KEYS = \
+ _("Enable punctuation keys? 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.
diff --git a/src/orca/orca-setup.ui b/src/orca/orca-setup.ui
index 0c69e97..2a9dc94 100644
--- a/src/orca/orca-setup.ui
+++ b/src/orca/orca-setup.ui
@@ -2380,8 +2380,8 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
- <object class="GtkCheckButton" id="enablePrintableKeysCheckButton">
- <property name="label" translatable="yes">Enable _alphanumeric and punctuation
keys</property>
+ <object class="GtkCheckButton" id="enableAlphabeticKeysCheckButton">
+ <property name="label" translatable="yes">Enable _alphabetic keys</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -2399,6 +2399,44 @@
</packing>
</child>
<child>
+ <object class="GtkCheckButton" id="enableNumericKeysCheckButton">
+ <property name="label" translatable="yes">Enable n_umeric keys</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">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="enablePunctuationKeysCheckButton">
+ <property name="label" translatable="yes">Enable _punctuation keys</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">2</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>
@@ -2412,7 +2450,7 @@
</object>
<packing>
<property name="left_attach">0</property>
- <property name="top_attach">1</property>
+ <property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
@@ -2431,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>
@@ -2450,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>
@@ -2469,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>
@@ -2488,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>
diff --git a/src/orca/orca_console_prefs.py b/src/orca/orca_console_prefs.py
index 2f06c21..62649d2 100644
--- a/src/orca/orca_console_prefs.py
+++ b/src/orca/orca_console_prefs.py
@@ -274,7 +274,9 @@ def setupSpeech(prefsDict):
keyEcho = prefsDict["enableKeyEcho"]
if not keyEcho:
prefsDict["enableKeyEcho"] = False
- prefsDict["enablePrintableKeys"] = False
+ prefsDict["enableAlphabeticKeys"] = False
+ prefsDict["enableNumericKeys"] = False
+ prefsDict["enablePunctuationKeys"] = False
prefsDict["enableModifierKeys"] = False
prefsDict["enableFunctionKeys"] = False
prefsDict["enableActionKeys"] = False
@@ -282,13 +284,43 @@ def setupSpeech(prefsDict):
stop = True
while keyEcho and True:
answer = sayAndPrint(
- messages.CONSOLE_SETUP_ENABLE_ECHO_PRINTABLE_KEYS,
+ messages.CONSOLE_SETUP_ENABLE_ECHO_ALPHABETIC_KEYS,
stop,
True,
speechServerChoice,
speechVoiceChoice)
try:
- prefsDict["enablePrintableKeys"] = checkYes(answer)
+ prefsDict["enableAlphabeticKeys"] = 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_NUMERIC_KEYS,
+ stop,
+ True,
+ speechServerChoice,
+ speechVoiceChoice)
+ try:
+ prefsDict["enableNumericKeys"] = 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_PUNCTUATION_KEYS,
+ stop,
+ True,
+ speechServerChoice,
+ speechVoiceChoice)
+ try:
+ prefsDict["enablePunctuationKeys"] = checkYes(answer)
break
except:
stop = False
diff --git a/src/orca/orca_gui_prefs.py b/src/orca/orca_gui_prefs.py
index 76fae16..89a69b6 100644
--- a/src/orca/orca_gui_prefs.py
+++ b/src/orca/orca_gui_prefs.py
@@ -1502,8 +1502,12 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
#
self.get_widget("keyEchoCheckButton").set_active( \
prefs["enableKeyEcho"])
- self.get_widget("enablePrintableKeysCheckButton").set_active( \
- prefs["enablePrintableKeys"])
+ self.get_widget("enableAlphabeticKeysCheckButton").set_active(
+ prefs.get("enableAlphabeticKeys", settings.enableAlphabeticKeys))
+ self.get_widget("enableNumericKeysCheckButton").set_active(
+ prefs.get("enableNumericKeys", settings.enableNumericKeys))
+ self.get_widget("enablePunctuationKeysCheckButton").set_active(
+ prefs.get("enablePunctuationKeys", settings.enablePunctuationKeys))
self.get_widget("enableModifierKeysCheckButton").set_active( \
prefs["enableModifierKeys"])
self.get_widget("enableFunctionKeysCheckButton").set_active( \
@@ -1737,7 +1741,9 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
"""
enable = self.get_widget("keyEchoCheckButton").get_active()
- self.get_widget("enablePrintableKeysCheckButton").set_sensitive(enable)
+ self.get_widget("enableAlphabeticKeysCheckButton").set_sensitive(enable)
+ self.get_widget("enableNumericKeysCheckButton").set_sensitive(enable)
+ self.get_widget("enablePunctuationKeysCheckButton").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/scripts/default.py b/src/orca/scripts/default.py
index 0f5bfc0..65af5a6 100644
--- a/src/orca/scripts/default.py
+++ b/src/orca/scripts/default.py
@@ -2625,8 +2625,7 @@ class Script(script.Script):
elif wasCommand or wasAutoComplete:
speakThis = True
elif role == pyatspi.ROLE_PASSWORD_TEXT \
- and _settingsManager.getSetting('enableKeyEcho') \
- and _settingsManager.getSetting('enablePrintableKeys'):
+ and _settingsManager.getSetting('enableKeyEcho'):
# Echoing "star" is preferable to echoing the descriptive
# name of the bullet that has appeared (e.g. "black circle")
#
diff --git a/src/orca/settings.py b/src/orca/settings.py
index 2825160..04cf9da 100644
--- a/src/orca/settings.py
+++ b/src/orca/settings.py
@@ -46,7 +46,9 @@ userCustomizableSettings = [
"enableEchoByWord",
"enableEchoBySentence",
"enableKeyEcho",
- "enablePrintableKeys",
+ "enableAlphabeticKeys",
+ "enableNumericKeys",
+ "enablePunctuationKeys",
"enableModifierKeys",
"enableFunctionKeys",
"enableActionKeys",
@@ -237,7 +239,9 @@ keyboardLayout = GENERAL_KEYBOARD_LAYOUT_DESKTOP
orcaModifierKeys = DESKTOP_MODIFIER_KEYS
doubleClickTimeout = 0.5
enableKeyEcho = True
-enablePrintableKeys = True
+enableAlphabeticKeys = True
+enableNumericKeys = True
+enablePunctuationKeys = True
enableModifierKeys = True
enableFunctionKeys = True
enableActionKeys = True
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]