From bc5231d0ea552da1ac5eff0bbc09477c46e7b82d Mon Sep 17 00:00:00 2001 From: PatR Date: Sat, 19 Mar 2022 15:09:20 -0700 Subject: [PATCH] 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. --- win/X11/winmenu.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) 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); } } -- 2.50.1