+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+       * tui/tui-wingeneral.c (tui_win_info::refresh)
+       (tui_source_window_base::refresh): New methods.
+       (tui_refresh_all): Call the refresh method.
+       * tui/tui-data.h (struct tui_win_info)
+       (struct tui_source_window_base) <refresh>: New method.
+
 2019-06-25  Tom Tromey  <tom@tromey.com>
 
        * tui/tui.h (tui_is_window_visible): Return bool.
 
   /* Make this window visible or invisible.  */
   virtual void make_visible (bool visible);
 
+  /* Refresh this window and any associated windows.  */
+  virtual void refresh ();
+
   /* 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.  */
   }
 
   void make_visible (bool visible) override;
+  void refresh () override;
 
   /* Does the locator belong to this window?  */
   bool m_has_locator = false;
 
   make_all_visible (false);
 }
 
+/* See tui-data.h.  */
+
+void
+tui_win_info::refresh ()
+{
+  touchwin (generic.handle);
+  tui_refresh_win (&generic);
+}
+
+/* See tui-data.h.  */
+
+void
+tui_source_window_base::refresh ()
+{
+  touchwin (execution_info->handle);
+  tui_refresh_win (execution_info);
+  tui_win_info::refresh ();
+}
+
 /* Function to refresh all the windows currently displayed.  */
 
 void
   for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++)
     {
       if (list[type] && list[type]->generic.is_visible)
-       {
-         if (type == SRC_WIN || type == DISASSEM_WIN)
-           {
-             tui_source_window_base *base
-               = (tui_source_window_base *) list[type];
-             touchwin (base->execution_info->handle);
-             tui_refresh_win (base->execution_info);
-           }
-         touchwin (list[type]->generic.handle);
-         tui_refresh_win (&list[type]->generic);
-       }
+       list[type]->refresh ();
     }
   if (locator->is_visible)
     {