Fix flushing bug in tui_puts_internal
authorTom Tromey <tom@tromey.com>
Tue, 2 Jul 2019 21:18:27 +0000 (15:18 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 17 Jul 2019 18:19:20 +0000 (12:19 -0600)
A while back I changed gdb not to flush in some places.  It turned out
that this broke the TUI a little.  An easy way to see it is to run
"gdb -tui -nx", then "file gdb" at the gdb prompt.  gdb will print the
usual "Reading symbols..." message -- but it won't appear on-screen
until the reading is complete.

This patch changes the TUI to do the equivalent of line buffering in
tui_puts_internal.

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

* tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is
seen.

gdb/ChangeLog
gdb/tui/tui-io.c

index 5a3d6c5..4890f6f 100644 (file)
@@ -1,5 +1,10 @@
 2019-07-17  Tom Tromey  <tom@tromey.com>
 
+       * tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is
+       seen.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
        * tui/tui-win.c (tui_source_window_base::set_new_height)
        (tui_source_window_base::do_make_visible_with_new_height): Use
        m_has_locator field directly.
index c9607d8..cb27306 100644 (file)
@@ -461,9 +461,13 @@ tui_puts_internal (WINDOW *w, const char *string, int *height)
 {
   char c;
   int prev_col = 0;
+  bool saw_nl = false;
 
   while ((c = *string++) != 0)
     {
+      if (c == '\n')
+       saw_nl = true;
+
       if (c == '\1' || c == '\2')
        {
          /* Ignore these, they are readline escape-marking
@@ -492,6 +496,8 @@ tui_puts_internal (WINDOW *w, const char *string, int *height)
        }
     }
   update_cmdwin_start_line ();
+  if (saw_nl)
+    wrefresh (w);
 }
 
 /* Print a string in the curses command window.  The output is