aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/testsuite/gdb.tui/main-2.exp47
-rw-r--r--gdb/tui/tui-winsource.c10
-rw-r--r--gdb/tui/tui.c2
3 files changed, 58 insertions, 1 deletions
diff --git a/gdb/testsuite/gdb.tui/main-2.exp b/gdb/testsuite/gdb.tui/main-2.exp
new file mode 100644
index 0000000..1dcb3cf
--- /dev/null
+++ b/gdb/testsuite/gdb.tui/main-2.exp
@@ -0,0 +1,47 @@
+# Copyright 2024 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test that enabling tui while having a current frame results in
+# centering and highlighting the associated line.
+
+require allow_tui_tests
+
+tuiterm_env
+
+standard_testfile tui-layout.c
+
+if { [build_executable "failed to prepare" $testfile $srcfile ] == -1} {
+ return -1
+}
+
+Term::clean_restart 24 80 $binfile
+
+if {![runto_main]} {
+ perror "test suppressed"
+ return
+}
+
+if {![Term::enter_tui]} {
+ unsupported "TUI not supported"
+ return
+}
+
+set line " return 0;"
+set nr [gdb_get_line_number $line]
+
+set screen_line [Term::get_line_with_attrs 6]
+verbose -log "screen line 6: '$screen_line'"
+gdb_assert { [regexp "$nr <reverse:1>$line<reverse:0>" $screen_line] } \
+ "highlighted line in middle of source window"
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index 4dbbe92..61c8e00 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -467,6 +467,16 @@ tui_source_window_base::rerender ()
struct symtab *s = find_pc_line_symtab (get_frame_pc (frame));
if (this != TUI_SRC_WIN)
find_line_pc (s, cursal.line, &cursal.pc);
+
+ /* This centering code is copied from tui_source_window::maybe_update.
+ It would be nice to do centering more often, and do it in just one
+ location. But since this is a regression fix, handle this
+ conservatively for now. */
+ int start_line = (cursal.line - ((height - box_size ()) / 2)) + 1;
+ if (start_line <= 0)
+ start_line = 1;
+ cursal.line = start_line;
+
update_source_window (gdbarch, cursal);
}
else
diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c
index 19f0960..eaee85f 100644
--- a/gdb/tui/tui.c
+++ b/gdb/tui/tui.c
@@ -466,7 +466,7 @@ tui_enable (void)
tui_set_term_width_to (COLS);
def_prog_mode ();
- tui_show_frame_info (0);
+ tui_show_frame_info (deprecated_safe_get_selected_frame ());
tui_set_initial_layout ();
tui_set_win_focus_to (TUI_SRC_WIN);
keypad (TUI_CMD_WIN->handle.get (), TRUE);