github issue #1145 - ^C-induced panic on tty
Issue reported by entrez: on tty, ^C while a menu was open followed by 'yes' to "Really quit?" would lead to a bad window panic. Brought on by screen erasure changes included with recent SIGWINCH (window resize signal) changes. Closes #1145
This commit is contained in:
@@ -1823,6 +1823,8 @@ tty: for the !DEF_PAGER configuration, redraw screen properly if attempting
|
|||||||
feedback for that situation
|
feedback for that situation
|
||||||
tty: if a group accelerator matched a menu command ('^' in menu for '/')
|
tty: if a group accelerator matched a menu command ('^' in menu for '/')
|
||||||
it wouldn't work to select, just to manipulate the menu
|
it wouldn't work to select, just to manipulate the menu
|
||||||
|
tty: after resize changes which included screen erasure changes, ^C and yes|y
|
||||||
|
to "Really quit?" while a menu was open would lead to a panic
|
||||||
Unix: after lua changes to Makefiles, 'make spotless' for dat subdirectory
|
Unix: after lua changes to Makefiles, 'make spotless' for dat subdirectory
|
||||||
left some generated data files which should have been deleted
|
left some generated data files which should have been deleted
|
||||||
Unix: reject "--sX" on command line except if "X" is "cores" (so "--scores");
|
Unix: reject "--sX" on command line except if "X" is "cores" (so "--scores");
|
||||||
|
|||||||
+4
-3
@@ -1077,9 +1077,9 @@ tty_clear_nhwindow(winid window)
|
|||||||
break;
|
break;
|
||||||
case NHW_MENU:
|
case NHW_MENU:
|
||||||
case NHW_TEXT:
|
case NHW_TEXT:
|
||||||
if (cw->active)
|
|
||||||
erase_menu_or_text(window, cw, TRUE);
|
|
||||||
if (!erasing_tty_screen) {
|
if (!erasing_tty_screen) {
|
||||||
|
if (cw->active)
|
||||||
|
erase_menu_or_text(window, cw, TRUE);
|
||||||
free_window_info(cw, FALSE);
|
free_window_info(cw, FALSE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1953,7 +1953,7 @@ tty_dismiss_nhwindow(winid window)
|
|||||||
final run-down in case this is the end-of-game window;
|
final run-down in case this is the end-of-game window;
|
||||||
the contents of that window should remain shown even when
|
the contents of that window should remain shown even when
|
||||||
the window itself has gone away */
|
the window itself has gone away */
|
||||||
if (iflags.window_inited) {
|
if (iflags.window_inited && !erasing_tty_screen) {
|
||||||
boolean clearscreen = FALSE; /* just erase the menu */
|
boolean clearscreen = FALSE; /* just erase the menu */
|
||||||
|
|
||||||
/* during role/race/&c selection, menus are put up on top
|
/* during role/race/&c selection, menus are put up on top
|
||||||
@@ -2006,6 +2006,7 @@ erase_tty_screen(void)
|
|||||||
struct WinDesc *cw;
|
struct WinDesc *cw;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
HUPSKIP();
|
||||||
if (erasing_tty_screen++)
|
if (erasing_tty_screen++)
|
||||||
return;
|
return;
|
||||||
#if 0 /* originally we called term_clear_screen() but now it calls us */
|
#if 0 /* originally we called term_clear_screen() but now it calls us */
|
||||||
|
|||||||
Reference in New Issue
Block a user