Introduce the refresh_all method
authorTom Tromey <tom@tromey.com>
Sun, 16 Jun 2019 20:52:08 +0000 (14:52 -0600)
committerTom Tromey <tom@tromey.com>
Tue, 25 Jun 2019 13:48:34 +0000 (07:48 -0600)
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-25  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
gdb/tui/tui-data.h
gdb/tui/tui-win.c
gdb/tui/tui-windata.c
gdb/tui/tui.c

index 1a60375..595a76a 100644 (file)
@@ -1,5 +1,18 @@
 2019-06-25  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.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
        * tui/tui-winsource.h (tui_refill_source_window)
        (tui_set_is_exec_point_at): Don't declare.
        * tui/tui-winsource.c (tui_update_source_windows_with_addr)
index 183efb1..e45c9fa 100644 (file)
@@ -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;
index 9c4f9ad..383487e 100644 (file)
@@ -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));
index 67228a6..770baf8 100644 (file)
@@ -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 ();
 
index d720199..55a44e8 100644 (file)
@@ -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;