From 3b7ac98ab26ba2fe311ce2fe1680f5659d06c61e Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Thu, 13 Oct 2016 16:29:54 +0300 Subject: [PATCH] Alt+Letter should activate main menu if hotkey is set --- src/dlangui/widgets/menu.d | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/dlangui/widgets/menu.d b/src/dlangui/widgets/menu.d index 9dc70f99..8f93f778 100644 --- a/src/dlangui/widgets/menu.d +++ b/src/dlangui/widgets/menu.d @@ -977,15 +977,23 @@ class MainMenu : MenuWidgetBase { // handle MainMenu activation / deactivation (Alt, Esc...) bool toggleMenu = false; bool isAlt = event.keyCode == KeyCode.ALT || event.keyCode == KeyCode.LALT || event.keyCode == KeyCode.RALT; + bool altPressed = !!(event.flags & KeyFlag.Alt); bool noOtherModifiers = !(event.flags & (KeyFlag.Shift | KeyFlag.Control)); if (event.action == KeyAction.KeyDown && event.keyCode == KeyCode.ESCAPE && event.flags == 0 && activated) { deactivate(); return true; } - if (event.action == KeyAction.Text && (event.flags & KeyFlag.Alt) && !(event.flags & KeyFlag.Shift) && !(event.flags & KeyFlag.Shift)) { - dchar ch = event.text[0]; - int index = _item.findSubitemByHotkey(ch); + dchar hotkey = 0; + if (event.action == KeyAction.KeyDown && event.keyCode >= KeyCode.KEY_A && event.keyCode <= KeyCode.KEY_Z && altPressed && noOtherModifiers) { +// Log.d("Alt + a..z"); + hotkey = cast(dchar)((event.keyCode - KeyCode.KEY_A) + 'a'); + } + if (event.action == KeyAction.Text && altPressed && noOtherModifiers) { + hotkey = event.text[0]; + } + if (hotkey) { + int index = _item.findSubitemByHotkey(hotkey); if (index >= 0) { activate(); itemClicked(index);