[25/66] Introduce the refresh_all method

Message ID 20190623224329.16060-26-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey June 23, 2019, 10:42 p.m. UTC
  This introduces the tui_win_info::refresh_all method and implements it
as needed in subclasses.  The name and comment are a bit of a guess on
my part.  The main benefit of this patch is removing another switch on
the type of the window.

gdb/ChangeLog
2019-06-23  Tom Tromey  <tom@tromey.com>

	* tui/tui.c (tui_rl_other_window): Call the refresh_all method.
	* tui/tui-windata.c (tui_data_window::refresh_all): Rename from
	tui_refresh_data_win.
	* tui/tui-win.c (tui_source_window_base::refresh_all): New
	method.
	(tui_refresh_all_win): Call the refresh_all method.
	(tui_set_focus): Likewise.
	* tui/tui-data.h (struct tui_win_info) <refresh_all>: New method.
	(struct tui_source_window_base, struct tui_data_window) <refresh>:
	Likewise.
---
 gdb/ChangeLog         | 13 +++++++++++++
 gdb/tui/tui-data.h    |  8 ++++++++
 gdb/tui/tui-win.c     | 34 ++++++++++++++--------------------
 gdb/tui/tui-windata.c |  4 ++--
 gdb/tui/tui.c         |  2 +-
 5 files changed, 38 insertions(+), 23 deletions(-)
  

Patch

diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index c41e812c483..e838c0e1622 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -261,6 +261,12 @@  public:
   /* Refresh this window and any associated windows.  */
   virtual void refresh ();
 
+  /* Called after all the TUI windows are refreshed, to let this
+     window have a chance to update itself further.  */
+  virtual void refresh_all ()
+  {
+  }
+
   /* Methods to scroll the contents of this window.  Note that they
      are named with "_scroll" coming at the end because the more
      obvious "scroll_forward" is defined as a macro in term.h.  */
@@ -303,6 +309,7 @@  public:
 
   void make_visible (bool visible) override;
   void refresh () override;
+  void refresh_all () override;
 
   /* Refill the source window's source cache and update it.  If this
      is a disassembly window, then just update it.  */
@@ -371,6 +378,7 @@  struct tui_data_window : public tui_win_info
   DISABLE_COPY_AND_ASSIGN (tui_data_window);
 
   void clear_detail () override;
+  void refresh_all () override;
 
   /* Start of data display content.  */
   tui_win_content data_content = NULL;
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index 9c4f9ad5779..383487e5f7a 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -508,6 +508,17 @@  tui_win_info::right_scroll (int num_to_scroll)
 }
 
 
+/* See tui-data.h.  */
+
+void
+tui_source_window_base::refresh_all ()
+{
+  tui_show_source_content (this);
+  tui_check_and_display_highlight_if_needed (this);
+  tui_erase_exec_info_content (this);
+  tui_update_exec_info (this);
+}
+
 void
 tui_refresh_all_win (void)
 {
@@ -517,25 +528,8 @@  tui_refresh_all_win (void)
   tui_refresh_all (tui_win_list);
   for (type = SRC_WIN; type < MAX_MAJOR_WINDOWS; type++)
     {
-      if (tui_win_list[type] 
-	  && tui_win_list[type]->generic.is_visible)
-	{
-	  switch (type)
-	    {
-	    case SRC_WIN:
-	    case DISASSEM_WIN:
-	      tui_show_source_content (tui_win_list[type]);
-	      tui_check_and_display_highlight_if_needed (tui_win_list[type]);
-	      tui_erase_exec_info_content (tui_win_list[type]);
-	      tui_update_exec_info (tui_win_list[type]);
-	      break;
-	    case DATA_WIN:
-	      tui_refresh_data_win ();
-	      break;
-	    default:
-	      break;
-	    }
-	}
+      if (tui_win_list[type] && tui_win_list[type]->generic.is_visible)
+	tui_win_list[type]->refresh_all ();
     }
   tui_show_locator_content ();
 }
@@ -872,7 +866,7 @@  The window name specified must be valid and visible.\n"));
 	}
 
       if (TUI_DATA_WIN && TUI_DATA_WIN->generic.is_visible)
-	tui_refresh_data_win ();
+	TUI_DATA_WIN->refresh_all ();
       xfree (buf_ptr);
       printf_filtered (_("Focus set to %s window.\n"),
 		       tui_win_name (&tui_win_with_focus ()->generic));
diff --git a/gdb/tui/tui-windata.c b/gdb/tui/tui-windata.c
index 67228a6c5ee..770baf857f6 100644
--- a/gdb/tui/tui-windata.c
+++ b/gdb/tui/tui-windata.c
@@ -193,10 +193,10 @@  tui_display_data_from (int element_no, int reuse_windows)
 
 /* Function to redisplay the contents of the data window.  */
 void
-tui_refresh_data_win (void)
+tui_data_window::refresh_all ()
 {
   tui_erase_data_content (NULL);
-  if (TUI_DATA_WIN->generic.content_size > 0)
+  if (generic.content_size > 0)
     {
       int first_element = tui_first_data_item_displayed ();
 
diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c
index d7201992ae4..55a44e8840e 100644
--- a/gdb/tui/tui.c
+++ b/gdb/tui/tui.c
@@ -237,7 +237,7 @@  tui_rl_other_window (int count, int key)
     {
       tui_set_win_focus_to (win_info);
       if (TUI_DATA_WIN && TUI_DATA_WIN->generic.is_visible)
-        tui_refresh_data_win ();
+	TUI_DATA_WIN->refresh_all ();
       keypad (TUI_CMD_WIN->generic.handle, (win_info != TUI_CMD_WIN));
     }
   return 0;