From: PatR Date: Sat, 19 Mar 2022 22:09:20 +0000 (-0700) Subject: menuinvertmode on X11 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bc5231d0ea552da1ac5eff0bbc09477c46e7b82d;p=nethack menuinvertmode on X11 Catch up with tty and curses. Menu items flagged as skip-invert will not be toggled On by select-all and select-page. If menuinvertmode is 2 they also won't be toggled Off by deselect-all and deselect-page. --- diff --git a/win/X11/winmenu.c b/win/X11/winmenu.c index d31b95a35..92bad502d 100644 --- a/win/X11/winmenu.c +++ b/win/X11/winmenu.c @@ -503,12 +503,15 @@ select_all(struct xwindow *wp) reset_menu_count(wp->menu_information); for (count = 0, curr = wp->menu_information->curr_menu.base; curr; - curr = curr->next, count++) - if (curr->identifier.a_void != 0) - if (!curr->selected) { - invert_line(wp, curr, count, -1L); - } - + curr = curr->next, count++) { + /* skip 'curr' if not selectable (header or such) or already + selected (no need to set) or rejected due to skip-invert test */ + if (!curr->identifier.a_void + || curr->selected + || !menuitem_invert_test(1, curr->itemflags, FALSE)) + continue; + invert_line(wp, curr, count, -1L); + } } static void @@ -519,11 +522,15 @@ select_none(struct xwindow *wp) reset_menu_count(wp->menu_information); for (count = 0, curr = wp->menu_information->curr_menu.base; curr; - curr = curr->next, count++) - if (curr->identifier.a_void != 0) - if (curr->selected) { - invert_line(wp, curr, count, -1L); - } + curr = curr->next, count++) { + /* skip 'curr' if not selectable (header or such) or already not + selected (no need to unset) or rejected due to skip-invert test */ + if (!curr->identifier.a_void + || !curr->selected + || !menuitem_invert_test(2, curr->itemflags, TRUE)) + continue; + invert_line(wp, curr, count, -1L); + } } @@ -536,10 +543,12 @@ invert_all(struct xwindow *wp) reset_menu_count(wp->menu_information); for (count = 0, curr = wp->menu_information->curr_menu.base; curr; curr = curr->next, count++) { - if (!menuitem_invert_test(0, curr->itemflags, curr->selected)) + /* skip 'curr' if not selectable (header or such) + or rejected due to skip-invert test */ + if (!curr->identifier.a_void + || !menuitem_invert_test(0, curr->itemflags, curr->selected)) continue; - if (curr->identifier.a_void != 0) - invert_line(wp, curr, count, -1L); + invert_line(wp, curr, count, -1L); } }