diff --git a/DistFiles/Language Explorer/Configuration/Main.xml b/DistFiles/Language Explorer/Configuration/Main.xml
index b906a001a2..9526478b06 100644
--- a/DistFiles/Language Explorer/Configuration/Main.xml
+++ b/DistFiles/Language Explorer/Configuration/Main.xml
@@ -141,7 +141,7 @@
-
+
diff --git a/Src/XCore/xCoreInterfaces/Command.cs b/Src/XCore/xCoreInterfaces/Command.cs
index da62f06328..28909bf18a 100644
--- a/Src/XCore/xCoreInterfaces/Command.cs
+++ b/Src/XCore/xCoreInterfaces/Command.cs
@@ -381,106 +381,126 @@ public Keys Shortcut
get
{
CheckDisposed();
- if(m_configurationNode==null)
+ if (m_configurationNode == null)
return Keys.None;
string sc = XmlUtils.GetAttributeValue(m_configurationNode, "shortcut", "");
- if (sc != "")
+ return GetShortcutKeys(sc);
+ }
+ }
+
+ public Keys Shortcut2
+ {
+ get
+ {
+ CheckDisposed();
+ if (m_configurationNode == null)
+ return Keys.None;
+
+ string sc = XmlUtils.GetAttributeValue(m_configurationNode, "shortcut2", "");
+ return GetShortcutKeys(sc);
+ }
+ }
+
+ private Keys GetShortcutKeys(string sc)
+ {
+ if (sc != "")
+ {
+ // Note: On a German system, KeysConverter().ConvertFromString, ConvertToString,
+ // ConvertToInvariantString, etc. all use German strings (e.g., Strg for Ctrl)
+ // regardless of using the locale specific calls. So to get things to work, we
+ // need to parse the English shortcut string and reconstruct the internal keys.
+ Keys keys = Keys.None;
+ try
{
- // Note: On a German system, KeysConverter().ConvertFromString, ConvertToString,
- // ConvertToInvariantString, etc. all use German strings (e.g., Strg for Ctrl)
- // regardless of using the locale specific calls. So to get things to work, we
- // need to parse the English shortcut string and reconstruct the internal keys.
- Keys keys = Keys.None;
- try
+ string s;
+ string srest = sc.ToLower();
+ while (srest.Length > 0)
{
- string s;
- string srest = sc.ToLower();
- while (srest.Length > 0)
+ int i = srest.IndexOf('+');
+ if (i < 0)
{
- int i = srest.IndexOf('+');
- if (i < 0)
- {
- s = srest;
- srest = "";
- }
- else
- {
- s = srest.Substring(0, i);
- srest = srest.Substring(i + 1);
- }
- switch (s)
- {
- default:
- keys |= (Keys)new KeysConverter().ConvertFromString(s.ToUpper());
- break;
- case "alt":
- keys |= Keys.Alt;
- break;
- case "back":
- keys |= Keys.Back;
- break;
- case "cancel":
- keys |= Keys.Cancel;
- break;
- case "ctrl":
- keys |= Keys.Control;
- break;
- case "del":
- keys |= Keys.Delete;
- break;
- case "down":
- keys |= Keys.Down;
- break;
- case "end":
- keys |= Keys.End;
- break;
- case "enter":
- keys |= Keys.Enter;
- break;
- case "esc":
- keys |= Keys.Escape;
- break;
- case "home":
- keys |= Keys.Home;
- break;
- case "ins":
- keys |= Keys.Insert;
- break;
- case "left":
- keys |= Keys.Left;
- break;
- case "pgdwn":
- keys |= Keys.PageDown;
- break;
- case "pgup":
- keys |= Keys.PageUp;
- break;
- case "right":
- keys |= Keys.Right;
- break;
- case "shift":
- keys |= Keys.Shift;
- break;
- case "tab":
- keys |= Keys.Tab;
- break;
- case "up":
- keys |= Keys.Up;
- break;
- };
- };
- }
- catch (Exception e)
- {
- throw new SIL.Utils.ConfigurationException("The System.Windows.Forms.KeysConverter() did not understand this key description:"
- + sc + ".", m_configurationNode, e);
+ s = srest;
+ srest = "";
+ }
+ else
+ {
+ s = srest.Substring(0, i);
+ srest = srest.Substring(i + 1);
+ }
+ switch (s)
+ {
+ default:
+ keys |= (Keys)new KeysConverter().ConvertFromString(s.ToUpper());
+ break;
+ case "alt":
+ keys |= Keys.Alt;
+ break;
+ case "back":
+ keys |= Keys.Back;
+ break;
+ case "cancel":
+ keys |= Keys.Cancel;
+ break;
+ case "ctrl":
+ keys |= Keys.Control;
+ break;
+ case "del":
+ keys |= Keys.Delete;
+ break;
+ case "down":
+ keys |= Keys.Down;
+ break;
+ case "end":
+ keys |= Keys.End;
+ break;
+ case "enter":
+ keys |= Keys.Enter;
+ break;
+ case "esc":
+ keys |= Keys.Escape;
+ break;
+ case "home":
+ keys |= Keys.Home;
+ break;
+ case "ins":
+ keys |= Keys.Insert;
+ break;
+ case "left":
+ keys |= Keys.Left;
+ break;
+ case "pgdwn":
+ keys |= Keys.PageDown;
+ break;
+ case "pgup":
+ keys |= Keys.PageUp;
+ break;
+ case "right":
+ keys |= Keys.Right;
+ break;
+ case "shift":
+ keys |= Keys.Shift;
+ break;
+ case "tab":
+ keys |= Keys.Tab;
+ break;
+ case "up":
+ keys |= Keys.Up;
+ break;
+ }
+ ;
}
- return keys;
+ ;
}
-
- return Keys.None;
+ catch (Exception e)
+ {
+ throw new SIL.Utils.ConfigurationException("The System.Windows.Forms.KeysConverter() did not understand this key description:"
+ + sc + ".", m_configurationNode, e);
+ }
+ return keys;
}
+
+ return Keys.None;
}
#endregion
diff --git a/Src/XCore/xWindow.cs b/Src/XCore/xWindow.cs
index 9be1a47eaa..d6b31d12bf 100644
--- a/Src/XCore/xWindow.cs
+++ b/Src/XCore/xWindow.cs
@@ -2381,7 +2381,7 @@ private void XWindow_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
foreach (System.Collections.DictionaryEntry entry in this.m_mediator.CommandSet)
{
Command c = (Command)entry.Value;
- if (e.KeyData == c.Shortcut)
+ if (e.KeyData == c.Shortcut || e.KeyData == c.Shortcut2)
{
UIItemDisplayProperties display = CommandChoice.QueryDisplayProperties(m_mediator, c, false, "foo");