From ab0e1f1a4507f91536b583c57a492cb9d3aaf6f2 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 13 Jul 2019 16:47:31 -0600 Subject: [PATCH] Change tui_make_window to be a method I combined several small changes into one patch here. I believe I started by noticing that the "title" is not needed by tui_gen_win_info and could be self-managing (i.e. std::string). Moving this revealed that "can_box" is also a property of tui_win_info and not tui_gen_win_info; and this in turn caused the changes to tui_make_window and box_win. 2019-08-20 Tom Tromey * tui/tui-wingeneral.h (tui_make_window): Don't declare. * tui/tui-wingeneral.c (box_win): Change type of win_info. (box_win): Update. (tui_gen_win_info::make_window): Rename from tui_make_window. (tui_win_info::make_window): New method. (tui_gen_win_info::make_visible): Update. * tui/tui-source.c (tui_source_window::set_contents): Update. * tui/tui-regs.c (tui_data_window::show_register_group): Update. (tui_data_window::display_registers_from): Update. * tui/tui-layout.c (tui_gen_win_info::resize): Update. * tui/tui-data.h (struct tui_gen_win_info) : Declare. : Remove. : Remove. (struct tui_win_info) <make_window>: Declare. <can_box>: Now virtual. <title>: New member. * tui/tui-data.c (~tui_gen_win_info): Don't free title. * tui/tui-command.c (tui_cmd_window::resize): Update. --- gdb/ChangeLog | 22 ++++++++++++++++++++++ gdb/tui/tui-command.c | 2 +- gdb/tui/tui-data.c | 1 - gdb/tui/tui-data.h | 17 ++++++++--------- gdb/tui/tui-layout.c | 2 +- gdb/tui/tui-regs.c | 5 ++--- gdb/tui/tui-source.c | 3 +-- gdb/tui/tui-wingeneral.c | 31 ++++++++++++++----------------- gdb/tui/tui-wingeneral.h | 1 - 9 files changed, 49 insertions(+), 35 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 91e0e908226..e65b84d2515 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,25 @@ +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (tui_make_window): Don't declare. + * tui/tui-wingeneral.c (box_win): Change type of win_info. + (box_win): Update. + (tui_gen_win_info::make_window): Rename from tui_make_window. + (tui_win_info::make_window): New method. + (tui_gen_win_info::make_visible): Update. + * tui/tui-source.c (tui_source_window::set_contents): Update. + * tui/tui-regs.c (tui_data_window::show_register_group): Update. + (tui_data_window::display_registers_from): Update. + * tui/tui-layout.c (tui_gen_win_info::resize): Update. + * tui/tui-data.h (struct tui_gen_win_info) <make_window>: + Declare. + <can_box>: Remove. + <title>: Remove. + (struct tui_win_info) <make_window>: Declare. + <can_box>: Now virtual. + <title>: New member. + * tui/tui-data.c (~tui_gen_win_info): Don't free title. + * tui/tui-command.c (tui_cmd_window::resize): Update. + 2019-08-20 Tom Tromey <tom@tromey.com> * tui/tui-regs.h (struct tui_data_window) <display_regs>: Remove. diff --git a/gdb/tui/tui-command.c b/gdb/tui/tui-command.c index f2040a75417..62595808cd8 100644 --- a/gdb/tui/tui-command.c +++ b/gdb/tui/tui-command.c @@ -54,7 +54,7 @@ tui_cmd_window::resize (int height_, int width_, int origin_x, int origin_y) origin.y = origin_y; if (handle == nullptr) - tui_make_window (this); + make_window (); else { /* Another reason we don't call the base class method here is diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 9b80aca028e..c11aa43340c 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -243,7 +243,6 @@ tui_win_info::tui_win_info (enum tui_win_type type) tui_gen_win_info::~tui_gen_win_info () { tui_delete_win (handle); - xfree (title); } void diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index 0432a53750f..a5ff5e2260e 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -52,6 +52,8 @@ protected: { } + virtual void make_window (); + public: virtual ~tui_gen_win_info (); @@ -73,12 +75,6 @@ public: virtual void resize (int height, int width, int origin_x, int origin_y); - /* Return true if this can be boxed. */ - virtual bool can_box () const - { - return false; - } - /* Return true if this window is visible. */ bool is_visible () const { @@ -97,8 +93,6 @@ public: struct tui_point origin = {0, 0}; /* Viewport height. */ int viewport_height = 0; - /* Window title to display. */ - char *title = nullptr; }; /* Constant definitions. */ @@ -173,6 +167,8 @@ protected: void rerender () override; + void make_window () override; + public: ~tui_win_info () override @@ -213,13 +209,16 @@ public: return true; } - bool can_box () const override + virtual bool can_box () const { return true; } void check_and_display_highlight_if_needed (); + /* Window title to display. */ + std::string title; + /* Can this window ever be highlighted? */ bool can_highlight = true; diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c index 08b18e5efa1..01d50e437e5 100644 --- a/gdb/tui/tui-layout.c +++ b/gdb/tui/tui-layout.c @@ -602,7 +602,7 @@ tui_gen_win_info::resize (int height_, int width_, } if (handle == nullptr) - tui_make_window (this); + make_window (); rerender (); } diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c index f46894075d6..71037d41047 100644 --- a/gdb/tui/tui-regs.c +++ b/gdb/tui/tui-regs.c @@ -185,8 +185,7 @@ tui_data_window::show_register_group (struct reggroup *group, int regnum, pos; /* Make a new title showing which group we display. */ - xfree (title); - title = xstrprintf ("Register group: %s", reggroup_name (group)); + title = string_printf ("Register group: %s", reggroup_name (group)); /* See how many registers must be displayed. */ nr_regs = 0; @@ -302,7 +301,7 @@ tui_data_window::display_registers_from (int start_element_no) data_item_win->width = item_win_width; data_item_win->origin.x = (item_win_width * j) + 1; data_item_win->origin.y = cur_y; - tui_make_window (data_item_win); + data_item_win->make_visible (true); scrollok (data_item_win->handle, FALSE); } touchwin (data_item_win->handle); diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index 07de328bb04..906006a4225 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -153,8 +153,7 @@ tui_source_window::set_contents (struct gdbarch *arch, = tui_locator_win_info_ptr (); const char *s_filename = symtab_to_filename_for_display (s); - xfree (title); - title = xstrdup (s_filename); + title = s_filename; xfree (fullname); fullname = xstrdup (symtab_to_fullname (s)); diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c index 4e565bdc653..5fa4cfd9eee 100644 --- a/gdb/tui/tui-wingeneral.c +++ b/gdb/tui/tui-wingeneral.c @@ -55,7 +55,7 @@ tui_delete_win (WINDOW *window) /* Draw a border arround the window. */ static void -box_win (struct tui_gen_win_info *win_info, +box_win (struct tui_win_info *win_info, int highlight_flag) { if (win_info && win_info->handle) @@ -78,8 +78,8 @@ box_win (struct tui_gen_win_info *win_info, #else box (win, tui_border_vline, tui_border_hline); #endif - if (win_info->title) - mvwaddstr (win, 0, 3, win_info->title); + if (!win_info->title.empty ()) + mvwaddstr (win, 0, 3, win_info->title.c_str ()); wattroff (win, attrs); } } @@ -126,23 +126,20 @@ tui_win_info::check_and_display_highlight_if_needed () void -tui_make_window (struct tui_gen_win_info *win_info) +tui_gen_win_info::make_window () { - WINDOW *handle; - - handle = newwin (win_info->height, - win_info->width, - win_info->origin.y, - win_info->origin.x); - win_info->handle = handle; + handle = newwin (height, width, origin.y, origin.x); if (handle != NULL) - { - if (win_info->can_box ()) - box_win (win_info, NO_HILITE); - scrollok (handle, TRUE); - } + scrollok (handle, TRUE); } +void +tui_win_info::make_window () +{ + tui_gen_win_info::make_window (); + if (handle != NULL && can_box ()) + box_win (this, NO_HILITE); +} /* We can't really make windows visible, or invisible. So we have to delete the entire window when making it visible, and create it @@ -154,7 +151,7 @@ tui_gen_win_info::make_visible (bool visible) return; if (visible) - tui_make_window (this); + make_window (); else { tui_delete_win (handle); diff --git a/gdb/tui/tui-wingeneral.h b/gdb/tui/tui-wingeneral.h index 6a9de4c9b1c..53d72327b94 100644 --- a/gdb/tui/tui-wingeneral.h +++ b/gdb/tui/tui-wingeneral.h @@ -31,7 +31,6 @@ struct tui_gen_win_info; extern void tui_make_all_invisible (void); extern void tui_unhighlight_win (struct tui_win_info *); -extern void tui_make_window (struct tui_gen_win_info *); extern void tui_highlight_win (struct tui_win_info *); extern void tui_refresh_all (); extern void tui_delete_win (WINDOW *window); -- 2.30.2