Qt menu fix

Noticed when working on the add_menu() crash earlier, using a mouse
rather than the keyboard to pick an entry in the sub-sub menus for
'm O' -> 'disclose' -> {any disclosure category} didn't work properly.
The problem was in post-3.6.x menu code for the Qt interface.
This commit is contained in:
PatR
2023-04-21 00:44:50 -07:00
parent 889b437775
commit 71decafefd
3 changed files with 8 additions and 2 deletions

View File

@@ -1583,6 +1583,11 @@ Qt: changes in glyph handling in the core introduced a bug in the "paper doll"
Qt: during role selection, icons for role and race showed giant ant tile after
the glyph overhaul changes
Qt: resolve a use-after-free error when saving message history
Qt: with a pick-one menu containing a pre-selected entry, clicking on that
worked to re-select it, as intended; clicking on any other entry
instead of typing the selector letter toggled off preselected entry
but failed to toggle on the explicitly selected one; clicking again
after nothing was pre-selected anymore refused to toggle anything on
tty: redraw unexplored locations as S_unexplored rather than <space> after
map has been partially overwritten by popup menu or text display
tty: previous change resulted in remnants of previous level being shown on

View File

@@ -802,7 +802,7 @@ void NetHackQtMenuWindow::ChooseNone()
itemlist[row].preselected = false; // stale for all rows
// skip if not selectable or already unselected or fails invert_test()
if (!itemlist[row].Selectable()
|| !itemlist[row].selected
|| (!itemlist[row].selected && !isSelected(row))
|| !menuitem_invert_test(2, itemlist[row].itemflags, TRUE))
continue;
itemlist[row].selected = false;

View File

@@ -42,7 +42,8 @@ public:
virtual void EndMenu(const QString& prompt);
virtual int SelectMenu(int how, MENU_ITEM_P **menu_list);
virtual void ClipAround(int x, int y);
virtual void PrintGlyph(int x, int y, const glyph_info *glyphinfo, const glyph_info *bkglyphinfo);
virtual void PrintGlyph(int x, int y, const glyph_info *glyphinfo,
const glyph_info *bkglyphinfo);
virtual void UseRIP(int how, time_t when);
int nhid;