From ab02c5513a329e1f56e526b0fc4d2272bdbb0907 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Thu, 13 Oct 2016 16:42:52 +0300 Subject: [PATCH] fix menu hotkeys support --- src/dlangui/widgets/menu.d | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/dlangui/widgets/menu.d b/src/dlangui/widgets/menu.d index 8f93f778..e79ff722 100644 --- a/src/dlangui/widgets/menu.d +++ b/src/dlangui/widgets/menu.d @@ -178,6 +178,24 @@ class MenuItem { return -1; } + /// find subitem by hotkey character, returns subitem index, -1 if not found + MenuItem findSubitemByHotkeyRecursive(dchar ch) { + static import std.uni; + if (!ch) + return null; + ch = std.uni.toUpper(ch); + for (int i = 0; i < _subitems.length; i++) { + if (_subitems[i].getHotkey() == ch) + return _subitems[i]; + } + for (int i = 0; i < _subitems.length; i++) { + MenuItem res = _subitems[i].findSubitemByHotkeyRecursive(ch); + if (res) + return res; + } + return null; + } + /// Add separator item MenuItem addSeparator() { return add(new Action(SEPARATOR_ACTION_ID)); @@ -999,6 +1017,12 @@ class MainMenu : MenuWidgetBase { itemClicked(index); return true; } else { + MenuItem item = _item.findSubitemByHotkeyRecursive(hotkey); + if (item) { + Log.d("found menu item recursive"); + onMenuItem(item); + return true; + } return false; } }