From patchwork Sun Jun 23 22:43:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 33316 Received: (qmail 56973 invoked by alias); 23 Jun 2019 23:25:53 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 56832 invoked by uid 89); 23 Jun 2019 23:25:52 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SEMBLACK, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy= X-HELO: gateway21.websitewelcome.com Received: from gateway21.websitewelcome.com (HELO gateway21.websitewelcome.com) (192.185.45.91) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 23 Jun 2019 23:25:49 +0000 Received: from cm17.websitewelcome.com (cm17.websitewelcome.com [100.42.49.20]) by gateway21.websitewelcome.com (Postfix) with ESMTP id 879AA4013A00D for ; Sun, 23 Jun 2019 18:25:48 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id fBrohduVQ90onfBrohcHjk; Sun, 23 Jun 2019 18:25:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=hJqymiZP/8hvaRm8/6VKMrghdjEJYrLmvzap1uH0f/Y=; b=KOQ2pSs4v6FogGSImgBTn02j2l 1hGDXPCciDsdYcOKm69dvvMfgSiov3OCwgf8C/2OiwbJRTg5v3h/oVobqQKdwTTf0Ek1+oo+0jqd1 tCa/QW75V3TBUiPIOXvDgu8nF; Received: from 75-166-12-78.hlrn.qwest.net ([75.166.12.78]:54396 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1hfBDB-000vDQ-KP; Sun, 23 Jun 2019 17:43:49 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 42/66] Introduce tui_gen_win_info::reset method Date: Sun, 23 Jun 2019 16:43:05 -0600 Message-Id: <20190623224329.16060-43-tom@tromey.com> In-Reply-To: <20190623224329.16060-1-tom@tromey.com> References: <20190623224329.16060-1-tom@tromey.com> This introduces the tui_gen_win_info::reset method and changes various places to use it. This led to the realization that the can_highlight member only needs to be set during construction, so this patch makes that change as well. Finally, init_and_make_win is drastically simplified. 2019-06-23 Tom Tromey * tui/tui-layout.c (make_command_window): Don't set can_highlight. (show_source_disasm_command): Call the reset method. (show_data): Don't set can_highlight. Call the reset method. (tui_gen_win_info::reset): Rename from init_gen_win_info (init_and_make_win): Simplify. Return tui_gen_win_info. (show_source_or_disasm_and_command): Call the reset method. * tui/tui-data.h (struct tui_gen_win_info) : New method. (struct tui_cmd_window): Set can_highlight. --- gdb/ChangeLog | 12 ++ gdb/tui/tui-data.h | 10 +- gdb/tui/tui-layout.c | 268 ++++++++++++++++++------------------------- 3 files changed, 134 insertions(+), 156 deletions(-) diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index d5e46fed5c0..be34afa70aa 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -60,6 +60,13 @@ struct tui_gen_win_info return ""; } + /* Reset this window. WIN_TYPE must match the existing type of this + window (it is only passed for self-test purposes). The other + parameters are used to set the window's size and position. */ + void reset (enum tui_win_type win_type, + int height, int width, + int origin_x, int origin_y); + /* Window handle. */ WINDOW *handle = nullptr; /* Type of window. */ @@ -309,7 +316,7 @@ public: void right_scroll (int num_to_scroll); /* Can this window ever be highlighted? */ - bool can_highlight = false; + bool can_highlight = true; /* Is this window highlighted? */ bool is_highlighted = false; @@ -453,6 +460,7 @@ struct tui_cmd_window : public tui_win_info tui_cmd_window () : tui_win_info (CMD_WIN) { + can_highlight = false; } DISABLE_COPY_AND_ASSIGN (tui_cmd_window); diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c index d9e1617f19a..f586d703d43 100644 --- a/gdb/tui/tui-layout.c +++ b/gdb/tui/tui-layout.c @@ -43,11 +43,9 @@ ** Static Local Decls ********************************/ static void show_layout (enum tui_layout_type); -static void init_gen_win_info (struct tui_gen_win_info *, - enum tui_win_type, - int, int, int, int); -static void *init_and_make_win (void *, enum tui_win_type, - int, int, int, int, int); +static tui_gen_win_info *init_and_make_win (tui_gen_win_info *, + enum tui_win_type, + int, int, int, int, int); static void show_source_or_disasm_and_command (enum tui_layout_type); static struct tui_win_info *make_source_or_disasm_window (enum tui_win_type, int, int); @@ -546,7 +544,6 @@ make_command_window (int height, int origin_y) 0, origin_y, DONT_BOX_WINDOW); - result->can_highlight = false; return result; } @@ -621,19 +618,16 @@ show_source_disasm_command (void) tui_win_list[SRC_WIN] = make_source_window (src_height, 0); else { - init_gen_win_info (TUI_SRC_WIN, - TUI_SRC_WIN->type, - src_height, - TUI_SRC_WIN->width, - TUI_SRC_WIN->execution_info->width, - 0); - TUI_SRC_WIN->can_highlight = true; - init_gen_win_info (TUI_SRC_WIN->execution_info, - EXEC_INFO_WIN, - src_height, - 3, - 0, - 0); + TUI_SRC_WIN->reset (TUI_SRC_WIN->type, + src_height, + TUI_SRC_WIN->width, + TUI_SRC_WIN->execution_info->width, + 0); + TUI_SRC_WIN->execution_info->reset (EXEC_INFO_WIN, + src_height, + 3, + 0, + 0); tui_make_visible (TUI_SRC_WIN); tui_make_visible (TUI_SRC_WIN->execution_info); TUI_SRC_WIN->m_has_locator = false; @@ -647,37 +641,32 @@ show_source_disasm_command (void) tui_win_list[DISASSEM_WIN] = make_disasm_window (asm_height, src_height - 1); locator - = ((struct tui_gen_win_info *) - init_and_make_win (locator, - LOCATOR_WIN, - 2 /* 1 */ , - tui_term_width (), - 0, - (src_height + asm_height) - 1, - DONT_BOX_WINDOW)); + = init_and_make_win (locator, + LOCATOR_WIN, + 2 /* 1 */ , + tui_term_width (), + 0, + (src_height + asm_height) - 1, + DONT_BOX_WINDOW); } else { - init_gen_win_info (locator, - LOCATOR_WIN, - 2 /* 1 */ , - tui_term_width (), - 0, - (src_height + asm_height) - 1); + locator->reset (LOCATOR_WIN, + 2 /* 1 */ , + tui_term_width (), + 0, + (src_height + asm_height) - 1); TUI_DISASM_WIN->m_has_locator = true; - init_gen_win_info (TUI_DISASM_WIN, - TUI_DISASM_WIN->type, - asm_height, - TUI_DISASM_WIN->width, - TUI_DISASM_WIN->execution_info->width, - src_height - 1); - init_gen_win_info (TUI_DISASM_WIN->execution_info, - EXEC_INFO_WIN, - asm_height, - 3, - 0, - src_height - 1); - TUI_DISASM_WIN->can_highlight = true; + TUI_DISASM_WIN->reset (TUI_DISASM_WIN->type, + asm_height, + TUI_DISASM_WIN->width, + TUI_DISASM_WIN->execution_info->width, + src_height - 1); + TUI_DISASM_WIN->execution_info->reset (EXEC_INFO_WIN, + asm_height, + 3, + 0, + src_height - 1); tui_make_visible (TUI_DISASM_WIN); tui_make_visible (TUI_DISASM_WIN->execution_info); } @@ -692,13 +681,11 @@ show_source_disasm_command (void) = make_command_window (cmd_height, tui_term_height () - cmd_height); else { - init_gen_win_info (TUI_CMD_WIN, - TUI_CMD_WIN->type, - TUI_CMD_WIN->height, - TUI_CMD_WIN->width, - 0, - TUI_CMD_WIN->origin.y); - TUI_CMD_WIN->can_highlight = false; + TUI_CMD_WIN->reset (TUI_CMD_WIN->type, + TUI_CMD_WIN->height, + TUI_CMD_WIN->width, + 0, + TUI_CMD_WIN->origin.y); tui_make_visible (TUI_CMD_WIN); } TUI_CMD_WIN->refresh_window (); @@ -723,7 +710,6 @@ show_data (enum tui_layout_type new_layout) tui_make_all_invisible (); tui_make_invisible (locator); make_data_window (&tui_win_list[DATA_WIN], data_height, 0); - TUI_DATA_WIN->can_highlight = true; if (new_layout == SRC_DATA_COMMAND) win_type = SRC_WIN; else @@ -739,39 +725,35 @@ show_data (enum tui_layout_type new_layout) tui_win_list[win_type] = make_disasm_window (src_height, data_height - 1); locator - = ((struct tui_gen_win_info *) - init_and_make_win (locator, - LOCATOR_WIN, - 2 /* 1 */ , - tui_term_width (), - 0, - total_height - 1, - DONT_BOX_WINDOW)); + = init_and_make_win (locator, + LOCATOR_WIN, + 2 /* 1 */ , + tui_term_width (), + 0, + total_height - 1, + DONT_BOX_WINDOW); base = (tui_source_window_base *) tui_win_list[win_type]; } else { base = (tui_source_window_base *) tui_win_list[win_type]; - init_gen_win_info (tui_win_list[win_type], - tui_win_list[win_type]->type, - src_height, - tui_win_list[win_type]->width, - base->execution_info->width, - data_height - 1); - init_gen_win_info (base->execution_info, - EXEC_INFO_WIN, - src_height, - 3, - 0, - data_height - 1); + tui_win_list[win_type]->reset (tui_win_list[win_type]->type, + src_height, + tui_win_list[win_type]->width, + base->execution_info->width, + data_height - 1); + base->execution_info->reset (EXEC_INFO_WIN, + src_height, + 3, + 0, + data_height - 1); tui_make_visible (tui_win_list[win_type]); tui_make_visible (base->execution_info); - init_gen_win_info (locator, - LOCATOR_WIN, - 2 /* 1 */ , - tui_term_width (), - 0, - total_height - 1); + locator->reset (LOCATOR_WIN, + 2 /* 1 */ , + tui_term_width (), + 0, + total_height - 1); } base->m_has_locator = true; tui_make_visible (locator); @@ -781,67 +763,50 @@ show_data (enum tui_layout_type new_layout) tui_set_current_layout_to (new_layout); } -/* init_gen_win_info(). - */ -static void -init_gen_win_info (struct tui_gen_win_info *win_info, - enum tui_win_type type, - int height, int width, - int origin_x, int origin_y) +void +tui_gen_win_info::reset (enum tui_win_type win_type, + int height_, int width_, + int origin_x_, int origin_y_) { - int h = height; + int h = height_; + + gdb_assert (type == win_type); - win_info->type = type; - win_info->width = width; - win_info->height = h; + width = width_; + height = h; if (h > 1) { - win_info->viewport_height = h - 1; - if (win_info->type != CMD_WIN) - win_info->viewport_height--; + viewport_height = h - 1; + if (type != CMD_WIN) + viewport_height--; } else - win_info->viewport_height = 1; - win_info->origin.x = origin_x; - win_info->origin.y = origin_y; - - return; -} /* init_gen_win_info */ + viewport_height = 1; + origin.x = origin_x_; + origin.y = origin_y_; +} /* init_and_make_win(). */ -static void * -init_and_make_win (void *opaque_win_info, +static tui_gen_win_info * +init_and_make_win (tui_gen_win_info *win_info, enum tui_win_type win_type, int height, int width, int origin_x, int origin_y, int box_it) { - struct tui_gen_win_info *generic; - - if (opaque_win_info == NULL) + if (win_info == NULL) { if (tui_win_is_auxillary (win_type)) - opaque_win_info = (void *) new tui_gen_win_info (win_type); + win_info = new tui_gen_win_info (win_type); else - opaque_win_info = (void *) tui_alloc_win_info (win_type); + win_info = tui_alloc_win_info (win_type); } - if (tui_win_is_auxillary (win_type)) - generic = (struct tui_gen_win_info *) opaque_win_info; - else - generic = (struct tui_win_info *) opaque_win_info; - init_gen_win_info (generic, win_type, height, width, origin_x, origin_y); - if (!tui_win_is_auxillary (win_type)) - { - if (generic->type == CMD_WIN) - ((struct tui_win_info *) opaque_win_info)->can_highlight = false; - else - ((struct tui_win_info *) opaque_win_info)->can_highlight = true; - } - tui_make_window (generic, box_it); + win_info->reset (win_type, height, width, origin_x, origin_y); + tui_make_window (win_info, box_it); - return opaque_win_info; + return win_info; } @@ -910,39 +875,34 @@ show_source_or_disasm_and_command (enum tui_layout_type layout_type) else *win_info_ptr = make_disasm_window (src_height - 1, 0); locator - = ((struct tui_gen_win_info *) - init_and_make_win (locator, - LOCATOR_WIN, - 2 /* 1 */ , - tui_term_width (), - 0, - src_height - 1, - DONT_BOX_WINDOW)); + = init_and_make_win (locator, + LOCATOR_WIN, + 2 /* 1 */ , + tui_term_width (), + 0, + src_height - 1, + DONT_BOX_WINDOW); base = (tui_source_window_base *) *win_info_ptr; } else { base = (tui_source_window_base *) *win_info_ptr; - init_gen_win_info (locator, - LOCATOR_WIN, - 2 /* 1 */ , - tui_term_width (), - 0, - src_height - 1); + locator->reset (LOCATOR_WIN, + 2 /* 1 */ , + tui_term_width (), + 0, + src_height - 1); base->m_has_locator = true; - init_gen_win_info (*win_info_ptr, - (*win_info_ptr)->type, - src_height - 1, - (*win_info_ptr)->width, - base->execution_info->width, - 0); - init_gen_win_info (base->execution_info, - EXEC_INFO_WIN, - src_height - 1, - 3, - 0, - 0); - base->can_highlight = true; + (*win_info_ptr)->reset ((*win_info_ptr)->type, + src_height - 1, + (*win_info_ptr)->width, + base->execution_info->width, + 0); + base->execution_info->reset (EXEC_INFO_WIN, + src_height - 1, + 3, + 0, + 0); tui_make_visible (*win_info_ptr); tui_make_visible (base->execution_info); } @@ -960,13 +920,11 @@ show_source_or_disasm_and_command (enum tui_layout_type layout_type) } else { - init_gen_win_info (TUI_CMD_WIN, - TUI_CMD_WIN->type, - TUI_CMD_WIN->height, - TUI_CMD_WIN->width, - TUI_CMD_WIN->origin.x, - TUI_CMD_WIN->origin.y); - TUI_CMD_WIN->can_highlight = false; + TUI_CMD_WIN->reset (TUI_CMD_WIN->type, + TUI_CMD_WIN->height, + TUI_CMD_WIN->width, + TUI_CMD_WIN->origin.x, + TUI_CMD_WIN->origin.y); tui_make_visible (TUI_CMD_WIN); } tui_set_current_layout_to (layout_type);