From 4c03c9434b3f0a18ba34ca926dc7ede86dc1c75d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prei=C3=9F?= Date: Sun, 5 May 2019 04:23:52 +0200 Subject: [PATCH] Make Alt+Hotkey in menus work (#194) --- Terminal.Gui/Views/Menu.cs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/Terminal.Gui/Views/Menu.cs b/Terminal.Gui/Views/Menu.cs index 6d0a0c3c6..4cfa4c52b 100644 --- a/Terminal.Gui/Views/Menu.cs +++ b/Terminal.Gui/Views/Menu.cs @@ -407,12 +407,36 @@ namespace Terminal.Gui { OpenMenu (selected); } - public override bool ProcessHotKey (KeyEvent kb) + internal bool FindAndOpenMenuByHotkey(KeyEvent kb) + { + int pos = 0; + var c = ((uint)kb.Key & (uint)Key.CharMask); + for (int i = 0; i < Menus.Length; i++) + { + // TODO: this code is duplicated, hotkey should be part of the MenuBarItem + var mi = Menus[i]; + int p = mi.Title.IndexOf('_'); + if (p != -1 && p + 1 < mi.Title.Length) { + if (mi.Title[p + 1] == c) { + OpenMenu(i); + return true; + } + } + } + return false; + } + + public override bool ProcessHotKey (KeyEvent kb) { if (kb.Key == Key.F9) { StartMenu (); return true; } + + if (kb.IsAlt) + { + if (FindAndOpenMenuByHotkey(kb)) return true; + } var kc = kb.KeyValue; return base.ProcessHotKey (kb);