mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
Delete invisible TUI windows
This changes the TUI so that when the layout changes, any windows that are invisible are now deleted. This makes it simpler to understand window lifetimes. gdb/ChangeLog 2019-08-13 Tom Tromey <tom@tromey.com> * tui/tui-win.c (tui_resize_all): Call tui_delete_invisible_windows. * tui/tui-layout.c (show_layout): Call tui_delete_invisible_windows. * tui/tui-data.h (tui_delete_invisible_windows): Declare. * tui/tui-data.c (tui_delete_invisible_windows): New function.
This commit is contained in:
parent
22c3f4909a
commit
fede52738f
@ -1,3 +1,12 @@
|
||||
2019-08-13 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* tui/tui-win.c (tui_resize_all): Call
|
||||
tui_delete_invisible_windows.
|
||||
* tui/tui-layout.c (show_layout): Call
|
||||
tui_delete_invisible_windows.
|
||||
* tui/tui-data.h (tui_delete_invisible_windows): Declare.
|
||||
* tui/tui-data.c (tui_delete_invisible_windows): New function.
|
||||
|
||||
2019-08-13 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* tui/tui-disasm.c (tui_show_disassem): Add assertion. Don't call
|
||||
|
@ -269,6 +269,28 @@ tui_initialize_static_data ()
|
||||
win->title = 0;
|
||||
}
|
||||
|
||||
/* See tui-data.h. */
|
||||
|
||||
void
|
||||
tui_delete_invisible_windows ()
|
||||
{
|
||||
for (int win_type = SRC_WIN; (win_type < MAX_MAJOR_WINDOWS); win_type++)
|
||||
{
|
||||
if (tui_win_list[win_type] != NULL
|
||||
&& !tui_win_list[win_type]->is_visible)
|
||||
{
|
||||
/* This should always be made visible before a call to this
|
||||
function. */
|
||||
gdb_assert (win_type != CMD_WIN);
|
||||
|
||||
if (win_with_focus == tui_win_list[win_type])
|
||||
win_with_focus = nullptr;
|
||||
|
||||
delete tui_win_list[win_type];
|
||||
tui_win_list[win_type] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tui_win_info::tui_win_info (enum tui_win_type type)
|
||||
: tui_gen_win_info (type)
|
||||
|
@ -399,6 +399,11 @@ extern void tui_set_win_resized_to (int);
|
||||
extern struct tui_win_info *tui_next_win (struct tui_win_info *);
|
||||
extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
|
||||
|
||||
/* Delete all the invisible windows. Note that it is an error to call
|
||||
this when the command window is invisible -- we don't allow the
|
||||
command window to be removed from the layout. */
|
||||
extern void tui_delete_invisible_windows ();
|
||||
|
||||
extern unsigned int tui_tab_width;
|
||||
|
||||
#endif /* TUI_TUI_DATA_H */
|
||||
|
@ -107,6 +107,8 @@ show_layout (enum tui_layout_type layout)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
tui_delete_invisible_windows ();
|
||||
}
|
||||
}
|
||||
|
||||
@ -596,6 +598,7 @@ show_data (enum tui_layout_type new_layout)
|
||||
locator->make_visible (true);
|
||||
tui_show_locator_content ();
|
||||
tui_add_to_source_windows (base);
|
||||
TUI_CMD_WIN->make_visible (true);
|
||||
current_layout = new_layout;
|
||||
}
|
||||
|
||||
|
@ -537,7 +537,6 @@ tui_resize_all (void)
|
||||
struct tui_win_info *second_win;
|
||||
tui_source_window_base *src_win;
|
||||
struct tui_locator_window *locator = tui_locator_win_info_ptr ();
|
||||
int win_type;
|
||||
int new_height, split_diff, cmd_split_diff, num_wins_displayed = 2;
|
||||
|
||||
#ifdef HAVE_RESIZE_TERM
|
||||
@ -663,18 +662,8 @@ tui_resize_all (void)
|
||||
tui_erase_source_content (src_win);
|
||||
break;
|
||||
}
|
||||
/* Now remove all invisible windows, and their content so that
|
||||
they get created again when called for with the new size. */
|
||||
for (win_type = SRC_WIN; (win_type < MAX_MAJOR_WINDOWS); win_type++)
|
||||
{
|
||||
if (win_type != CMD_WIN
|
||||
&& (tui_win_list[win_type] != NULL)
|
||||
&& !tui_win_list[win_type]->is_visible)
|
||||
{
|
||||
delete tui_win_list[win_type];
|
||||
tui_win_list[win_type] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
tui_delete_invisible_windows ();
|
||||
/* Turn keypad back on, unless focus is in the command
|
||||
window. */
|
||||
if (win_with_focus != TUI_CMD_WIN)
|
||||
|
Loading…
Reference in New Issue
Block a user