]> granicus.if.org Git - nethack/commitdiff
fix #K3357 - curses menu disappears
authorPatR <rankin@nethack.org>
Sat, 5 Jun 2021 23:11:50 +0000 (16:11 -0700)
committerPatR <rankin@nethack.org>
Sat, 5 Jun 2021 23:11:50 +0000 (16:11 -0700)
This fixes the disappearing menu, but not curses menu count entry
failing to honor backspace/delete.  Entering two or more digits
to get a "Count:12" message, followed by non-digit which removes
that, resulted in the menu for apply/loot in-out container operation
vanishing while it was still waiting for a choice.  (Typing a choice
blindly did work.)

The code intended to handle this.  I don't understand why refresh()
wasn't working.  Reordering stuff didn't help until I changed that
from refresh() to wrefresh(win).

The original Count:123 display was limited to 25 characters and
menus to half the main window, so they didn't overlap.  I made the
count display wider--because it is now also used for 'autodescribe'
feedback when moving the cursor around the map--so made something
that originally was impossible become possible.  One line of the
menu does get erased while "Count:" is displayed, but then gets put
back by the wrefresh().

doc/fixes37.0
win/curses/cursdial.c
win/curses/cursmisc.c

index 947c85f98052f26bc681648423f5ec28ddddeff6..33ae2468e344b3d543afb64acb0c5e0b0959520c 100644 (file)
@@ -754,6 +754,10 @@ curses: for vertical status, line up conditions in columns; usually two but
 curses: indent items in perm_invent window by one space
 curses: don't change the terminal's default colors
 curses: remove unnecessary special handling for dark gray
+curses: sometimes entering a count during menu selection caused the menu to
+       disappear (example was apply/loot in-out container menu with two or
+       more digits typed followed by non-digit); in-out menu was still active
+       but no longer displayed
 macOS: Xcode project was failing to build if the path to the NetHack source
        tree contained a space; the issue was within some shell script code
        contained within the project
index a2cebc24c17f645dd5e7618b00fe721f765d5c07..d00a2df885fa59d15b50d627d1fa052bab37e104 100644 (file)
@@ -1497,12 +1497,15 @@ menu_get_selections(WINDOW *win, nhmenu *menu, int how)
         default:
             if (isdigit(curletter)) {
                 count = curses_get_count(curletter - '0');
-                touchwin(win);
-                refresh();
+                /* after count, we know some non-digit is already pending */
                 curletter = getch();
-                if (count > 0) {
-                    count_letter = curletter;
-                }
+                count_letter = (count > 0) ? curletter : '\0';
+
+                /* remove the count wind (erases last line of message wind) */
+                curses_count_window(NULL);
+                /* force redraw of the menu that is receiving the count */
+                touchwin(win);
+                wrefresh(win);
             }
         }
 
index b65364a584f5096bf2874935215395e1bf506c17..3e996ed4f5727cad789b5c583dc5e1811d5954c9 100644 (file)
@@ -65,7 +65,7 @@ curses_read_char(void)
     }
 #endif
 
-    if (counting && !isdigit(ch)) { /* Dismiss count window if necissary */
+    if (counting && !isdigit(ch)) { /* dismiss count window if necessary */
         curses_count_window(NULL);
         curses_refresh_nethack_windows();
     }