Remove TUI data window special case

The TUI has a couple of special cases for updating the data window:
one in tui_rl_other_windowand one in tui_set_focus_command.  As part
of the project to remove references to globals, I wanted to remove
these calls; but when I did, some simple operations (like "C-x o")
would cause the register window to blank.

This fixes the underlying problem by arranging for the data window's
refresh_window method to call the superclass method first, and then to
refresh the child windows.  Then the special cases can be removed.

gdb/ChangeLog
2019-07-17  Tom Tromey  <tom@tromey.com>

	* tui/tui.c (tui_rl_other_window): Update.
	* tui/tui-wingeneral.c (tui_data_window::refresh_window): Call
	superclass method first.  Always iterate over regs_content.
	(tui_unhighlight_win, tui_highlight_win): Use refresh_window
	method.
	* tui/tui-win.c (tui_set_focus_command): Update.
This commit is contained in:
Tom Tromey 2019-06-28 23:32:05 -06:00
parent 01aeb396d0
commit cf82af058d
4 changed files with 16 additions and 14 deletions

View File

@ -1,3 +1,12 @@
2019-07-17 Tom Tromey <tom@tromey.com>
* tui/tui.c (tui_rl_other_window): Update.
* tui/tui-wingeneral.c (tui_data_window::refresh_window): Call
superclass method first. Always iterate over regs_content.
(tui_unhighlight_win, tui_highlight_win): Use refresh_window
method.
* tui/tui-win.c (tui_set_focus_command): Update.
2019-07-17 Tom Tromey <tom@tromey.com>
* tui/tui-win.c (tui_set_focus_command): Rename from

View File

@ -857,8 +857,6 @@ The window name specified must be valid and visible.\n"));
keypad (TUI_CMD_WIN->handle, (win_info != TUI_CMD_WIN));
}
if (TUI_DATA_WIN && TUI_DATA_WIN->is_visible)
TUI_DATA_WIN->refresh_all ();
xfree (buf_ptr);
printf_filtered (_("Focus set to %s window.\n"),
tui_win_with_focus ()->name ());

View File

@ -48,15 +48,12 @@ tui_gen_win_info::refresh_window ()
void
tui_data_window::refresh_window ()
{
if (!regs_content.empty ())
{
for (auto &&win : regs_content)
{
if (win != NULL)
win->refresh_window ();
}
}
tui_gen_win_info::refresh_window ();
for (auto &&win : regs_content)
{
if (win != NULL)
win->refresh_window ();
}
}
/* Function to delete the curses window, checking for NULL. */
@ -108,7 +105,7 @@ tui_unhighlight_win (struct tui_win_info *win_info)
&& win_info->handle != NULL)
{
box_win (win_info, NO_HILITE);
wrefresh (win_info->handle);
win_info->refresh_window ();
win_info->set_highlight (false);
}
}
@ -122,7 +119,7 @@ tui_highlight_win (struct tui_win_info *win_info)
&& win_info->handle != NULL)
{
box_win (win_info, HILITE);
wrefresh (win_info->handle);
win_info->refresh_window ();
win_info->set_highlight (true);
}
}

View File

@ -236,8 +236,6 @@ tui_rl_other_window (int count, int key)
if (win_info)
{
tui_set_win_focus_to (win_info);
if (TUI_DATA_WIN && TUI_DATA_WIN->is_visible)
TUI_DATA_WIN->refresh_all ();
keypad (TUI_CMD_WIN->handle, (win_info != TUI_CMD_WIN));
}
return 0;