Re-apply the current layout when resizing

The TUI has separate code for each possible layout to handle the case
where the terminal window is resized.  With the new layout code, this
can all be replaced with a call to tui_apply_current_layout, which
simply re-applies the current layout.

This results in some small differences in behavior when resizing, so
some tests are updated.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* tui/tui-win.c (tui_resize_all): Remove code, call
	tui_apply_current_layout.

gdb/testsuite/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* gdb.tui/resize.exp: Update.
	* gdb.tui/empty.exp (layouts): Update.

Change-Id: I3dc6c02a753d495d9ab5e8213d550a147198ce6f
This commit is contained in:
Tom Tromey 2019-10-09 21:18:31 -06:00
parent 2192a9d3b3
commit 3d97994549
5 changed files with 19 additions and 111 deletions

View File

@ -1,3 +1,8 @@
2019-12-11 Tom Tromey <tom@tromey.com>
* tui/tui-win.c (tui_resize_all): Remove code, call
tui_apply_current_layout.
2019-12-11 Tom Tromey <tom@tromey.com>
* tui/tui-layout.h (tui_apply_current_layout): Declare.

View File

@ -1,3 +1,8 @@
2019-12-11 Tom Tromey <tom@tromey.com>
* gdb.tui/resize.exp: Update.
* gdb.tui/empty.exp (layouts): Update.
2019-12-11 Tom Tromey <tom@tromey.com>
* gdb.tui/regs.exp: Update.

View File

@ -32,28 +32,28 @@ if {![Term::enter_tui]} {
# 4. List of boxes in 90x40 mode
# 5. List of test name and text for the empty window
set layouts {
{src src {{0 0 80 15}} {{0 0 90 23}}
{src src {{0 0 80 15}} {{0 0 90 26}}
{{"no source" "No Source Available"}}}
{regs src-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
{regs src-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 13} {0 12 90 13}}
{
{"no source" "No Source Available"}
{"no regs" "Register Values Unavailable"}
}}
{asm asm {{0 0 80 15}} {{0 0 90 23}}
{asm asm {{0 0 80 13}} {{0 0 90 26}}
{
{"no asm" "No Assembly Available"}
}}
{regs asm-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
{regs asm-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 13} {0 12 90 13}}
{
{"no asm" "No Assembly Available"}
{"no regs" "Register Values Unavailable"}
}}
{split split {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
{split split {{0 0 80 6} {0 5 80 8}} {{0 0 90 13} {0 12 90 13}}
{
{"no source" "No Source Available"}
{"no asm" "No Assembly Available"}
}}
{regs split-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
{regs split-regs {{0 0 80 6} {0 5 80 8}} {{0 0 90 13} {0 12 90 13}}
{
{"no asm" "No Assembly Available"}
{"no regs" "Register Values Unavailable"}

View File

@ -37,4 +37,4 @@ if {![Term::enter_tui]} {
Term::check_contents "source at startup" ">|21 *return 0"
Term::resize 40 90
Term::check_box "source box after resize" 0 0 90 23
Term::check_box "source box after resize" 0 0 90 26

View File

@ -536,13 +536,7 @@ tui_resize_all (void)
height_diff = screenheight - tui_term_height ();
if (height_diff || width_diff)
{
enum tui_layout_type cur_layout = tui_current_layout ();
struct tui_win_info *win_with_focus = tui_win_with_focus ();
struct tui_win_info *first_win;
struct tui_win_info *second_win;
tui_source_window_base *src_win;
struct tui_locator_window *locator = tui_locator_win_info_ptr ();
int new_height, split_diff, cmd_split_diff, num_wins_displayed = 2;
#ifdef HAVE_RESIZE_TERM
resize_term (screenheight, screenwidth);
@ -553,108 +547,12 @@ tui_resize_all (void)
tui_update_gdb_sizes ();
tui_set_term_height_to (screenheight);
tui_set_term_width_to (screenwidth);
if (cur_layout == SRC_DISASSEM_COMMAND
|| cur_layout == SRC_DATA_COMMAND
|| cur_layout == DISASSEM_DATA_COMMAND)
num_wins_displayed++;
split_diff = height_diff / num_wins_displayed;
cmd_split_diff = split_diff;
if (height_diff % num_wins_displayed)
{
if (height_diff < 0)
cmd_split_diff--;
else
cmd_split_diff++;
}
/* Now adjust each window. */
/* erase + clearok are used instead of a straightforward clear as
AIX 5.3 does not define clear. */
erase ();
clearok (curscr, TRUE);
switch (cur_layout)
{
case SRC_COMMAND:
case DISASSEM_COMMAND:
src_win = *(tui_source_windows ().begin ());
/* Check for invalid heights. */
if (height_diff == 0)
new_height = src_win->height;
else if ((src_win->height + split_diff) >=
(screenheight - MIN_CMD_WIN_HEIGHT - 1))
new_height = screenheight - MIN_CMD_WIN_HEIGHT - 1;
else if ((src_win->height + split_diff) <= 0)
new_height = MIN_WIN_HEIGHT;
else
new_height = src_win->height + split_diff;
src_win->resize (new_height, screenwidth, 0, 0);
locator->resize (1, screenwidth, 0, new_height);
new_height = screenheight - (new_height + 1);
TUI_CMD_WIN->resize (new_height, screenwidth,
0, locator->y + 1);
break;
default:
if (cur_layout == SRC_DISASSEM_COMMAND)
{
src_win = TUI_SRC_WIN;
first_win = src_win;
second_win = TUI_DISASM_WIN;
}
else
{
first_win = TUI_DATA_WIN;
src_win = *(tui_source_windows ().begin ());
second_win = src_win;
}
/* Change the first window's height/width. */
/* Check for invalid heights. */
if (height_diff == 0)
new_height = first_win->height;
else if ((first_win->height +
second_win->height + (split_diff * 2)) >=
(screenheight - MIN_CMD_WIN_HEIGHT - 1))
new_height = (screenheight - MIN_CMD_WIN_HEIGHT - 1) / 2;
else if ((first_win->height + split_diff) <= 0)
new_height = MIN_WIN_HEIGHT;
else
new_height = first_win->height + split_diff;
first_win->resize (new_height, screenwidth, 0, 0);
/* Change the second window's height/width. */
/* Check for invalid heights. */
if (height_diff == 0)
new_height = second_win->height;
else if ((first_win->height +
second_win->height + (split_diff * 2)) >=
(screenheight - MIN_CMD_WIN_HEIGHT - 1))
{
new_height = screenheight - MIN_CMD_WIN_HEIGHT - 1;
if (new_height % 2)
new_height = (new_height / 2) + 1;
else
new_height /= 2;
}
else if ((second_win->height + split_diff) <= 0)
new_height = MIN_WIN_HEIGHT;
else
new_height = second_win->height + split_diff;
second_win->resize (new_height, screenwidth,
0, first_win->height - 1);
locator->resize (1, screenwidth,
0, second_win->y + new_height);
/* Change the command window's height/width. */
new_height = screenheight - (locator->y + 1);
TUI_CMD_WIN->resize (new_height, screenwidth,
0, locator->y + 1);
break;
}
tui_apply_current_layout ();
tui_delete_invisible_windows ();
/* Turn keypad back on, unless focus is in the command
window. */