From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rock.gnat.com (rock.gnat.com [IPv6:2620:20:4000:0:a9e:1ff:fe9b:1d1]) by sourceware.org (Postfix) with ESMTP id 6A01F3861899 for ; Fri, 9 Oct 2020 20:27:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 6A01F3861899 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey@adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 479B7560CB; Fri, 9 Oct 2020 16:27:55 -0400 (EDT) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id M0Di-EwNcZ4O; Fri, 9 Oct 2020 16:27:55 -0400 (EDT) Received: from murgatroyd.Home (174-16-122-38.hlrn.qwest.net [174.16.122.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPSA id 02225560CA; Fri, 9 Oct 2020 16:27:54 -0400 (EDT) From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Don't erase TUI source window when switching focus Date: Fri, 9 Oct 2020 14:27:52 -0600 Message-Id: <20201009202752.3858565-1-tromey@adacore.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Oct 2020 20:28:06 -0000 PR tui/26719 points out that switching the focus can erase the TUI source window. This is a regression introduced by the patch to switch the source window to using a pad. This patch fixes the bug by arranging to call prefresh whenever the window is refreshed. gdb/ChangeLog 2020-10-09 Tom Tromey PR tui/26719 * tui/tui-winsource.h (struct tui_source_window_base) : Rename from refresh_pad. * tui/tui-winsource.c (tui_source_window_base::refresh_window): Rename from refresh_pad. (tui_source_window_base::show_source_content) (tui_source_window_base::do_scroll_horizontal): Update. gdb/testsuite/ChangeLog 2020-10-09 Tom Tromey PR tui/26719 * gdb.tui/list.exp: Check source window contents after focus change. --- gdb/ChangeLog | 10 ++++++++++ gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.tui/list.exp | 3 +++ gdb/tui/tui-winsource.c | 8 ++++---- gdb/tui/tui-winsource.h | 5 ++--- 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/gdb/testsuite/gdb.tui/list.exp b/gdb/testsuite/gdb.tui/list.exp index 576b33fa869..435540418ed 100644 --- a/gdb/testsuite/gdb.tui/list.exp +++ b/gdb/testsuite/gdb.tui/list.exp @@ -35,8 +35,11 @@ Term::command "layout asm" Term::check_contents "asm window shows main" "$hex
" Term::command "list main" +Term::dump_screen Term::check_contents "list main" "21 *return 0" # The following 'focus next' must be immediately after 'list main' to # ensure that GDB has a valid idea of what is currently focused. Term::command "focus next" Term::check_contents "focus next" "Focus set to cmd window" +# PR tui/26719 - switching focus would clear the source window. +Term::check_contents "source is still visible" "21 *return 0" diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index 30b8f69027a..957d9310f7a 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -250,8 +250,10 @@ tui_source_window_base::show_source_line (int lineno) /* See tui-winsource.h. */ void -tui_source_window_base::refresh_pad () +tui_source_window_base::refresh_window () { + tui_win_info::refresh_window (); + int pad_width = std::max (m_max_length, width); int left_margin = 1 + TUI_EXECINFO_SIZE + extra_margin (); int view_width = width - left_margin - 1; @@ -278,8 +280,6 @@ tui_source_window_base::show_source_content () for (int lineno = 0; lineno < m_content.size (); lineno++) show_source_line (lineno); - refresh_pad (); - refresh_window (); } @@ -377,7 +377,7 @@ tui_source_window_base::do_scroll_horizontal (int num_to_scroll) if (offset < 0) offset = 0; m_horizontal_offset = offset; - refresh_pad (); + refresh_window (); } } diff --git a/gdb/tui/tui-winsource.h b/gdb/tui/tui-winsource.h index 5fc6a6d8126..6dcf0efe4b9 100644 --- a/gdb/tui/tui-winsource.h +++ b/gdb/tui/tui-winsource.h @@ -171,6 +171,8 @@ struct tui_source_window_base : public tui_win_info /* Erase the source content. */ virtual void erase_source_content () = 0; + void refresh_window () override; + /* Return the start address and gdbarch. */ virtual void display_start_addr (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p) = 0; @@ -179,9 +181,6 @@ struct tui_source_window_base : public tui_win_info void show_source_content (); - /* Re-display the pad in the window. */ - void refresh_pad (); - /* Called when the user "set style enabled" setting is changed. */ void style_changed (); -- 2.26.2