This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[PATCH]: Fix tui refresh after background on Solaris


Hi!

On Solaris when the gdb-tui is restored from background, the screen is
refreshed correctly but the cursor is not put at the correct place.
It should be in the command window at the current readline cursor.
(no such pb on Linux, or with ncurses 5.x).

The following patch solves this by explicitly restoring the cursor 
after SIGCONT.  I've committed this patch.

	Stephane

2001-07-23  Stephane Carrez  <Stephane.Carrez@worldnet.fr>

	* tuiIO.c (tui_cont_sig): Update cursor position on the screen to
	leave it in the command window.
	(tui_redisplay_readline): Save cursor position to restore the
	cursor after we go back from background.
	* tuiData.h (TuiCommandInfo): Add start_line member.
Index: tuiData.h
===================================================================
RCS file: /cvs/src/src/gdb/tui/tuiData.h,v
retrieving revision 1.6
diff -u -p -r1.6 tuiData.h
--- tuiData.h	2001/07/21 20:52:56	1.6
+++ tuiData.h	2001/07/23 21:11:30
@@ -252,6 +252,7 @@ typedef struct _TuiCommandInfo
   {
     int curLine;		/* The current line position */
     int curch;			/* The current cursor position */
+    int start_line;
   }
 TuiCommandInfo, *TuiCommandInfoPtr;
 
Index: tuiIO.c
===================================================================
RCS file: /cvs/src/src/gdb/tui/tuiIO.c,v
retrieving revision 1.9
diff -u -p -r1.9 tuiIO.c
--- tuiIO.c	2001/07/21 22:35:40	1.9
+++ tuiIO.c	2001/07/23 21:11:33
@@ -117,6 +117,7 @@ tui_puts (const char *string)
     }
   getyx (w, cmdWin->detail.commandInfo.curLine,
          cmdWin->detail.commandInfo.curch);
+  cmdWin->detail.commandInfo.start_line = cmdWin->detail.commandInfo.curLine;
 
   /* We could defer the following.  */
   wrefresh (w);
@@ -144,7 +145,7 @@ tui_redisplay_readline (void)
   c_pos = -1;
   c_line = -1;
   w = cmdWin->generic.handle;
-  start_line = cmdWin->detail.commandInfo.curLine;
+  start_line = cmdWin->detail.commandInfo.start_line;
   wmove (w, start_line, 0);
   prev_col = 0;
   height = 1;
@@ -177,7 +178,7 @@ tui_redisplay_readline (void)
 	}
       if (c == '\n')
         {
-          getyx (w, cmdWin->detail.commandInfo.curLine,
+          getyx (w, cmdWin->detail.commandInfo.start_line,
                  cmdWin->detail.commandInfo.curch);
         }
       getyx (w, line, col);
@@ -186,13 +187,16 @@ tui_redisplay_readline (void)
       prev_col = col;
     }
   wclrtobot (w);
-  getyx (w, cmdWin->detail.commandInfo.curLine,
+  getyx (w, cmdWin->detail.commandInfo.start_line,
          cmdWin->detail.commandInfo.curch);
   if (c_line >= 0)
-    wmove (w, c_line, c_pos);
+    {
+      wmove (w, c_line, c_pos);
+      cmdWin->detail.commandInfo.curLine = c_line;
+      cmdWin->detail.commandInfo.curch = c_pos;
+    }
+  cmdWin->detail.commandInfo.start_line -= height - 1;
 
-  cmdWin->detail.commandInfo.curLine -= height - 1;
-  
   wrefresh (w);
   fflush(stdout);
 }
@@ -307,6 +311,12 @@ tui_cont_sig (int sig)
 
       /* Force a refresh of the screen.  */
       tuiRefreshAll ();
+
+      /* Update cursor position on the screen.  */
+      wmove (cmdWin->generic.handle,
+             cmdWin->detail.commandInfo.start_line,
+             cmdWin->detail.commandInfo.curch);
+      wrefresh (cmdWin->generic.handle);
     }
   signal (sig, tui_cont_sig);
 }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]