]> granicus.if.org Git - nethack/commitdiff
menuinvertmode on X11
authorPatR <rankin@nethack.org>
Sat, 19 Mar 2022 22:09:20 +0000 (15:09 -0700)
committerPatR <rankin@nethack.org>
Sat, 19 Mar 2022 22:09:20 +0000 (15:09 -0700)
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

index d31b95a35a4f0df415ef605cc5854bb5b5ec1216..92bad502dce9896de24a9dee2ebf286c68fbe9d8 100644 (file)
@@ -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);
     }
 }