diff --git a/wadsrc/static/zscript/engine/ui/menu/optionmenu.zs b/wadsrc/static/zscript/engine/ui/menu/optionmenu.zs index d49677718..47ec02069 100644 --- a/wadsrc/static/zscript/engine/ui/menu/optionmenu.zs +++ b/wadsrc/static/zscript/engine/ui/menu/optionmenu.zs @@ -201,6 +201,24 @@ class OptionMenu : Menu } return true; } + else if (ev.type == UIEvent.Type_Char) + { + String key = String.Format("%c", ev.keyChar).MakeLower(); + int itemsNumber = mDesc.mItems.Size(); + int direction = ev.IsAlt ? -1 : 1; + for (int i = 0; i < itemsNumber; ++i) + { + int index = (mDesc.mSelectedItem + direction * (i + 1) + itemsNumber) % itemsNumber; + if (!mDesc.mItems[index].Selectable()) continue; + String label = StringTable.Localize(mDesc.mItems[index].mLabel); + String firstLabelCharacter = String.Format("%c", label.GetNextCodePoint(0)).MakeLower(); + if (firstLabelCharacter == key) + { + mDesc.mSelectedItem = index; + break; + } + } + } return Super.OnUIEvent(ev); }