[34/61] Remove TUI data window special case

Message ID 20190704170311.15982-35-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey July 4, 2019, 5:02 p.m. UTC
  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.

2019-07-04  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.
---
 gdb/ChangeLog            |  9 +++++++++
 gdb/tui/tui-win.c        |  2 --
 gdb/tui/tui-wingeneral.c | 15 ++++++---------
 gdb/tui/tui.c            |  2 --
 4 files changed, 15 insertions(+), 13 deletions(-)
  

Patch

diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index 083f046cafa..9d9d9a5f577 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -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 ());
diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c
index 2902b8006b7..dc008cd7198 100644
--- a/gdb/tui/tui-wingeneral.c
+++ b/gdb/tui/tui-wingeneral.c
@@ -48,15 +48,12 @@  tui_gen_win_info::refresh_window ()
 void
 tui_data_window::refresh_window ()
 {
-  if (!regs_content.empty ())
+  tui_gen_win_info::refresh_window ();
+  for (auto &&win : regs_content)
     {
-      for (auto &&win : regs_content)
-	{
-	  if (win != NULL)
-	    win->refresh_window ();
-	}
+      if (win != NULL)
+	win->refresh_window ();
     }
-  tui_gen_win_info::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);
     }
 }
diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c
index 693c2ff4a03..ee2c35587df 100644
--- a/gdb/tui/tui.c
+++ b/gdb/tui/tui.c
@@ -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;