Update our idea of our terminal's dimensions even outside of TUI

When in the CLI, GDB's "width" and "height" variables are not kept in sync
when the underlying terminal gets resized.

This patch fixes this issue by making sure sure to update GDB's "width"
and "height" variables in the !tui_active case of our SIGWINCH handler.

gdb/ChangeLog:

	* tui/tui-win.c (tui_sigwinch_handler): Remove now-stale comment.
	(tui_sigwinch_handler): Still update our idea of
	the terminal's width and height even when TUI is not active.
This commit is contained in:
Patrick Palka 2015-04-23 18:36:58 -04:00
parent d6e5e7f7fd
commit a88d0bb33c
2 changed files with 25 additions and 14 deletions

View file

@ -1,3 +1,9 @@
2015-04-28 Patrick Palka <patrick@parcs.ath.cx>
* tui/tui-win.c (tui_sigwinch_handler): Remove now-stale comment.
(tui_sigwinch_handler): Still update our idea of
the terminal's width and height even when TUI is not active.
2015-04-28 Patrick Palka <patrick@parcs.ath.cx>
* utils.h (set_screen_width_and_height): Declare.

View file

@ -836,12 +836,6 @@ static struct async_signal_handler *tui_sigwinch_token;
static void
tui_sigwinch_handler (int signal)
{
/* Set win_resized to TRUE and asynchronously invoke our resize callback. If
the callback is invoked while TUI is active then it ought to successfully
resize the screen, resetting win_resized to FALSE. Of course, if the
callback is invoked while TUI is inactive then it will do nothing; in that
case, win_resized will remain TRUE until we get a chance to synchronously
resize the screen from tui_enable(). */
mark_async_signal_handler (tui_sigwinch_token);
tui_set_win_resized_to (TRUE);
}
@ -850,16 +844,27 @@ tui_sigwinch_handler (int signal)
static void
tui_async_resize_screen (gdb_client_data arg)
{
if (!tui_active)
return;
rl_resize_terminal ();
if (!tui_active)
{
int screen_height, screen_width;
rl_get_screen_size (&screen_height, &screen_width);
set_screen_width_and_height (screen_width, screen_height);
/* win_resized is left set so that the next call to tui_enable()
resizes the TUI windows. */
}
else
{
tui_resize_all ();
tui_refresh_all_win ();
tui_update_gdb_sizes ();
tui_set_win_resized_to (FALSE);
tui_redisplay_readline ();
}
}
#endif
/* Initialize TUI's SIGWINCH signal handler. Note that the handler is not