This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH]: Fix tui refresh after background on Solaris
- To: gdb-patches at sources dot redhat dot com
- Subject: [PATCH]: Fix tui refresh after background on Solaris
- From: Stephane Carrez <Stephane dot Carrez at worldnet dot fr>
- Date: Mon, 23 Jul 2001 23:22:11 +0200
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);
}