* tuiIO.c (tui_initialize_io): Install tui_cont_sig signal handler
authorStephane Carrez <stcarrez@nerim.fr>
Sat, 21 Jul 2001 22:35:40 +0000 (22:35 +0000)
committerStephane Carrez <stcarrez@nerim.fr>
Sat, 21 Jul 2001 22:35:40 +0000 (22:35 +0000)
if SIGCONT is defined.
(tui_cont_sig): New function when SIGCONT is defined.
(tui_setup_io): Save tty setting to restore by SIGCONT.

gdb/tui/ChangeLog
gdb/tui/tuiIO.c

index f00e8389ceb8f4f7cc4d89f37affd680b69cb397..85f317e6a8887d0fef94a27269e0178dbb03bc60 100644 (file)
@@ -1,3 +1,10 @@
+2001-07-22  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+       * tuiIO.c (tui_initialize_io): Install tui_cont_sig signal handler
+       if SIGCONT is defined.
+       (tui_cont_sig): New function when SIGCONT is defined.
+       (tui_setup_io): Save tty setting to restore by SIGCONT.
+       
 2001-07-22  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
 
        * tui.h (tui_show_assembly): Declare.
index c4d43a63a12e50226700030aa5056882a45fe6df..a0899292715381ec2a055952624ff59dff97a200 100644 (file)
@@ -37,6 +37,7 @@
 #include "ui-out.h"
 #include "cli-out.h"
 #include <fcntl.h>
+#include <signal.h>
 
 /* This file controls the IO interactions between gdb and curses.
    When the TUI is enabled, gdb has two modes a curses and a standard
@@ -267,6 +268,9 @@ tui_setup_io (int mode)
       gdb_stdlog = gdb_stdout; /* for moment */
       gdb_stdtarg = gdb_stderr;        /* for moment */
       uiout = tui_out;
+
+      /* Save tty for SIGCONT.  */
+      savetty ();
     }
   else
     {
@@ -284,13 +288,38 @@ tui_setup_io (int mode)
       rl_getc_function = tui_old_rl_getc_function;
       rl_outstream = tui_old_rl_outstream;
       readline_echoing_p = tui_old_readline_echoing_p;
+
+      /* Save tty for SIGCONT.  */
+      savetty ();
     }
 }
 
+#ifdef SIGCONT
+/* Catch SIGCONT to restore the terminal and refresh the screen.  */
+static void
+tui_cont_sig (int sig)
+{
+  if (tui_active)
+    {
+      /* Restore the terminal setting because another process (shell)
+         might have changed it.  */
+      resetty ();
+
+      /* Force a refresh of the screen.  */
+      tuiRefreshAll ();
+    }
+  signal (sig, tui_cont_sig);
+}
+#endif
+
 /* Initialize the IO for gdb in curses mode.  */
 void
 tui_initialize_io ()
 {
+#ifdef SIGCONT
+  signal (SIGCONT, tui_cont_sig);
+#endif
+
   /* Create tui output streams.  */
   tui_stdout = tui_fileopen (stdout);
   tui_stderr = tui_fileopen (stderr);