From 5fcee43a960f0735c53a7c24823b2e4bc1460b9f Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 17 Jun 2019 21:11:56 -0600 Subject: [PATCH] Introduce tui_win_info::make_visible_with_new_height This changes make_visible_with_new_height to be a method on tui_win_info, letting us remove a spot that checks the window type. gdb/ChangeLog 2019-06-25 Tom Tromey * tui/tui-win.c (tui_source_window_base::update_tab_width): Call make_visible_with_new_height method. (tui_win_info::make_visible_with_new_height): New method. (tui_source_window_base::do_make_visible_with_new_height) (tui_data_window::do_make_visible_with_new_height) (tui_cmd_window::do_make_visible_with_new_height): New methods. (make_visible_with_new_height): Remove. (tui_resize_all, tui_adjust_win_heights): Use make_visible_with_new_height method. * tui/tui-data.h (struct tui_win_info) : New methods. (struct tui_source_window_base, struct tui_data_window) (struct tui_cmd_window) : New methods. --- gdb/ChangeLog | 18 ++++++ gdb/tui/tui-data.h | 11 ++++ gdb/tui/tui-win.c | 154 ++++++++++++++++++++++----------------------- 3 files changed, 105 insertions(+), 78 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4f7d82bcdef..bd8af641dc7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,21 @@ +2019-06-25 Tom Tromey + + * tui/tui-win.c (tui_source_window_base::update_tab_width): Call + make_visible_with_new_height method. + (tui_win_info::make_visible_with_new_height): New method. + (tui_source_window_base::do_make_visible_with_new_height) + (tui_data_window::do_make_visible_with_new_height) + (tui_cmd_window::do_make_visible_with_new_height): New methods. + (make_visible_with_new_height): Remove. + (tui_resize_all, tui_adjust_win_heights): Use + make_visible_with_new_height method. + * tui/tui-data.h (struct tui_win_info) + : + New methods. + (struct tui_source_window_base, struct tui_data_window) + (struct tui_cmd_window) : New + methods. + 2019-06-25 Tom Tromey * tui/tui-win.c (tui_source_window_base::update_tab_width): New diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index 7030e84d902..02bda6af45c 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -273,6 +273,10 @@ protected: left_scroll and right_scroll. */ virtual void do_scroll_horizontal (int num_to_scroll) = 0; + /* Called after make_visible_with_new_height sets the new height. + Should update the window. */ + virtual void do_make_visible_with_new_height () = 0; + public: ~tui_win_info () override @@ -311,6 +315,9 @@ public: { } + /* Make the window visible after the height has been changed. */ + void make_visible_with_new_height (); + /* Set whether this window is highglighted. */ void set_highlight (bool highlight) { @@ -343,6 +350,7 @@ protected: DISABLE_COPY_AND_ASSIGN (tui_source_window_base); void do_scroll_horizontal (int num_to_scroll) override; + void do_make_visible_with_new_height () override; public: @@ -465,6 +473,7 @@ protected: void do_scroll_horizontal (int num_to_scroll) override { } + void do_make_visible_with_new_height () override; }; struct tui_cmd_window : public tui_win_info @@ -505,6 +514,8 @@ protected: void do_scroll_horizontal (int num_to_scroll) override { } + + void do_make_visible_with_new_height () override; }; extern int tui_win_is_auxillary (enum tui_win_type win_type); diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c index d67f42eaa77..5ba683620f9 100644 --- a/gdb/tui/tui-win.c +++ b/gdb/tui/tui-win.c @@ -55,7 +55,6 @@ /******************************* ** Static Local Decls ********************************/ -static void make_visible_with_new_height (struct tui_win_info *); static void make_invisible_and_set_new_height (struct tui_win_info *, int); static enum tui_status tui_adjust_win_heights (struct tui_win_info *, @@ -616,8 +615,8 @@ tui_resize_all (void) TUI_CMD_WIN->width += width_diff; new_height = screenheight - TUI_CMD_WIN->origin.y; make_invisible_and_set_new_height (TUI_CMD_WIN, new_height); - make_visible_with_new_height (first_win); - make_visible_with_new_height (TUI_CMD_WIN); + first_win->make_visible_with_new_height (); + TUI_CMD_WIN->make_visible_with_new_height (); if (first_win->content_size <= 0) tui_erase_source_content (first_win, EMPTY_SOURCE_PROMPT); break; @@ -678,9 +677,9 @@ tui_resize_all (void) make_invisible_and_set_new_height (TUI_CMD_WIN, TUI_CMD_WIN->height + cmd_split_diff); - make_visible_with_new_height (first_win); - make_visible_with_new_height (second_win); - make_visible_with_new_height (TUI_CMD_WIN); + first_win->make_visible_with_new_height (); + second_win->make_visible_with_new_height (); + TUI_CMD_WIN->make_visible_with_new_height (); if (first_win->content_size <= 0) tui_erase_source_content (first_win, EMPTY_SOURCE_PROMPT); if (second_win->content_size <= 0) @@ -933,7 +932,7 @@ tui_source_window_base::update_tab_width () and redisplay of the window's contents, which will take the new tab width into account. */ make_invisible_and_set_new_height (this, height); - make_visible_with_new_height (this); + make_visible_with_new_height (); } /* After the tab width is set, call this to update the relevant @@ -1126,8 +1125,8 @@ tui_adjust_win_heights (struct tui_win_info *primary_win_info, make_invisible_and_set_new_height (win_info, win_info->height + diff); TUI_CMD_WIN->origin.y = locator->origin.y + 1; - make_visible_with_new_height (win_info); - make_visible_with_new_height (primary_win_info); + win_info->make_visible_with_new_height (); + primary_win_info->make_visible_with_new_height (); if (src_win_info->content_size <= 0) tui_erase_source_content (src_win_info, EMPTY_SOURCE_PROMPT); } @@ -1228,9 +1227,9 @@ tui_adjust_win_heights (struct tui_win_info *primary_win_info, make_invisible_and_set_new_height (TUI_CMD_WIN, TUI_CMD_WIN->height + diff); } - make_visible_with_new_height (TUI_CMD_WIN); - make_visible_with_new_height (second_win); - make_visible_with_new_height (first_win); + TUI_CMD_WIN->make_visible_with_new_height (); + second_win->make_visible_with_new_height (); + first_win->make_visible_with_new_height (); if (first_win->content_size <= 0) tui_erase_source_content (first_win, EMPTY_SOURCE_PROMPT); if (second_win->content_size <= 0) @@ -1301,82 +1300,81 @@ make_invisible_and_set_new_height (struct tui_win_info *win_info, } -/* Function to make the windows with new heights visible. This means - re-creating the windows' content since the window had to be - destroyed to be made invisible. */ -static void -make_visible_with_new_height (struct tui_win_info *win_info) +/* See tui-data.h. */ + +void +tui_win_info::make_visible_with_new_height () { - struct symtab *s; + make_visible (true); + tui_check_and_display_highlight_if_needed (this); + do_make_visible_with_new_height (); +} + +/* See tui-data.h. */ - tui_make_visible (win_info); - tui_check_and_display_highlight_if_needed (win_info); - tui_source_window_base *base; - switch (win_info->type) +void +tui_source_window_base::do_make_visible_with_new_height () +{ + tui_free_win_content (execution_info); + tui_make_visible (execution_info); + if (content != NULL) { - case SRC_WIN: - case DISASSEM_WIN: - base = (tui_source_window_base *) win_info; - tui_free_win_content (base->execution_info); - tui_make_visible (base->execution_info); - if (win_info->content != NULL) - { - struct gdbarch *gdbarch = base->gdbarch; - struct tui_line_or_address line_or_addr; - struct symtab_and_line cursal - = get_current_source_symtab_and_line (); - - line_or_addr = base->start_line_or_addr; - tui_free_win_content (win_info); - tui_update_source_window (base, gdbarch, - cursal.symtab, line_or_addr, TRUE); - } - else if (deprecated_safe_get_selected_frame () != NULL) + struct tui_line_or_address line_or_addr; + struct symtab_and_line cursal + = get_current_source_symtab_and_line (); + + line_or_addr = start_line_or_addr; + tui_free_win_content (this); + tui_update_source_window (this, gdbarch, + cursal.symtab, line_or_addr, TRUE); + } + else if (deprecated_safe_get_selected_frame () != NULL) + { + struct tui_line_or_address line; + struct symtab_and_line cursal + = get_current_source_symtab_and_line (); + struct frame_info *frame = deprecated_safe_get_selected_frame (); + struct gdbarch *gdbarch = get_frame_arch (frame); + + struct symtab *s = find_pc_line_symtab (get_frame_pc (frame)); + if (type == SRC_WIN) { - struct tui_line_or_address line; - struct symtab_and_line cursal - = get_current_source_symtab_and_line (); - struct frame_info *frame = deprecated_safe_get_selected_frame (); - struct gdbarch *gdbarch = get_frame_arch (frame); - - s = find_pc_line_symtab (get_frame_pc (frame)); - if (win_info->type == SRC_WIN) - { - line.loa = LOA_LINE; - line.u.line_no = cursal.line; - } - else - { - line.loa = LOA_ADDRESS; - find_line_pc (s, cursal.line, &line.u.addr); - } - tui_update_source_window (base, gdbarch, s, line, TRUE); + line.loa = LOA_LINE; + line.u.line_no = cursal.line; } - if (win_info->has_locator ()) + else { - tui_make_visible (tui_locator_win_info_ptr ()); - tui_show_locator_content (); + line.loa = LOA_ADDRESS; + find_line_pc (s, cursal.line, &line.u.addr); } - break; - case DATA_WIN: - tui_display_all_data (); - break; - case CMD_WIN: -#ifdef HAVE_WRESIZE - wresize (TUI_CMD_WIN->handle, - TUI_CMD_WIN->height, - TUI_CMD_WIN->width); -#endif - mvwin (TUI_CMD_WIN->handle, - TUI_CMD_WIN->origin.y, - TUI_CMD_WIN->origin.x); - wmove (win_info->handle, 0, 0); - break; - default: - break; + tui_update_source_window (this, gdbarch, s, line, TRUE); + } + if (has_locator ()) + { + tui_make_visible (tui_locator_win_info_ptr ()); + tui_show_locator_content (); } } +/* See tui-data.h. */ + +void +tui_data_window::do_make_visible_with_new_height () +{ + tui_display_all_data (); +} + +/* See tui-data.h. */ + +void +tui_cmd_window::do_make_visible_with_new_height () +{ +#ifdef HAVE_WRESIZE + wresize (handle, height, width); +#endif + mvwin (handle, origin.y, origin.x); + wmove (handle, 0, 0); +} /* See tui-data.h. */ -- 2.30.2