diff --git a/win/win32/mhmenu.c b/win/win32/mhmenu.c index b541af305..c8d71b4e6 100644 --- a/win/win32/mhmenu.c +++ b/win/win32/mhmenu.c @@ -1208,6 +1208,21 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch) data = (PNHMenuWindow) GetWindowLongPtr(hWnd, GWLP_USERDATA); + is_accelerator = FALSE; + for (i = 0; i < data->menu.size; i++) { + if (data->menu.items[i].accelerator == ch) { + is_accelerator = TRUE; + break; + } + } + + /* Don't use switch if input matched an accelerator. Sometimes + * accelerators can conflict with menu actions. For example, when + * engraving the extra choice of using fingers matches MENU_UNSELECT_ALL. + */ + if (is_accelerator) + goto accelerator; + switch (ch) { case MENU_FIRST_PAGE: i = 0; @@ -1402,6 +1417,7 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch) } } break; + accelerator: default: if (strchr(data->menu.gacc, ch) && !(ch == '0' && data->menu.counting)) { @@ -1450,14 +1466,6 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch) return -2; } - is_accelerator = FALSE; - for (i = 0; i < data->menu.size; i++) { - if (data->menu.items[i].accelerator == ch) { - is_accelerator = TRUE; - break; - } - } - if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || is_accelerator) { if (data->how == PICK_ANY || data->how == PICK_ONE) {