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");