Fix for bug H7132.

In nethackw, there can be conflicts between menu accelerators and an extra
choice accelerator.  For example, when engraving the using fingers options
conflicts with the unselect all menu accelerator.  The extra choice
accelerator should take precedence.
This commit is contained in:
Bart House
2018-05-08 07:25:24 -07:00
parent 4e5c41401f
commit f7e665be98

View File

@@ -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) {