From: Tom Tromey Date: Fri, 28 Jun 2019 20:48:45 +0000 (-0600) Subject: Make source windows be self-updating X-Git-Tag: binutils-2_33~532 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b73dd8779c0530e91c6e5067eab4cb7ca3f794d5;p=external%2Fbinutils.git Make source windows be self-updating This changes the TUI source window to register itself on the source_styling_changed observable, and removes a bit of code from tui-hooks.c. This reduces the number of uses of the TUI_SRC_WIN global. gdb/ChangeLog 2019-07-17 Tom Tromey * tui/tui-source.c (tui_source_window): New constructor. Add observer. (~tui_source_window): New destructor. (tui_source_window::style_changed): New method. * tui/tui-hooks.c (tui_redisplay_source): Remove. (tui_attach_detach_observers): Update. * tui/tui-data.h (struct tui_source_window): Make constructor not inline. Add destructor. (struct tui_source_window) : New method. : New member. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c731826..1235b1a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,18 @@ 2019-07-17 Tom Tromey + * tui/tui-source.c (tui_source_window): New constructor. Add + observer. + (~tui_source_window): New destructor. + (tui_source_window::style_changed): New method. + * tui/tui-hooks.c (tui_redisplay_source): Remove. + (tui_attach_detach_observers): Update. + * tui/tui-data.h (struct tui_source_window): Make constructor not + inline. Add destructor. + (struct tui_source_window) : New method. + : New member. + +2019-07-17 Tom Tromey + * tui/tui-data.c (tui_clear_source_windows_detail): Fix typo. * tui/tui-win.c (tui_resize_all): Fix typo. diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index bd22f9e..be951b4 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -24,6 +24,7 @@ #include "tui/tui.h" /* For enum tui_win_type. */ #include "gdb_curses.h" /* For WINDOW. */ +#include "observable.h" /* This is a point definition. */ struct tui_point @@ -424,10 +425,8 @@ public: struct tui_source_window : public tui_source_window_base { - tui_source_window () - : tui_source_window_base (SRC_WIN) - { - } + tui_source_window (); + ~tui_source_window (); DISABLE_COPY_AND_ASSIGN (tui_source_window); @@ -439,6 +438,13 @@ struct tui_source_window : public tui_source_window_base protected: void do_scroll_vertical (int num_to_scroll) override; + +private: + + void style_changed (); + + /* A token used to register and unregister an observer. */ + gdb::observers::token m_observable; }; /* A TUI disassembly window. */ diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c index 7101053..84acd3a 100644 --- a/gdb/tui/tui-hooks.c +++ b/gdb/tui/tui-hooks.c @@ -204,18 +204,6 @@ tui_normal_stop (struct bpstats *bs, int print_frame) tui_refresh_frame_and_register_information (/*registers_too_p=*/1); } -/* Observer for source_cache_cleared. */ - -static void -tui_redisplay_source () -{ - if (tui_is_window_visible (SRC_WIN)) - { - /* Force redisplay. */ - TUI_SRC_WIN->refill (); - } -} - /* Token associated with observers registered while TUI hooks are installed. */ static const gdb::observers::token tui_observers_token {}; @@ -251,8 +239,6 @@ tui_attach_detach_observers (bool attach) tui_normal_stop, attach); attach_or_detach (gdb::observers::register_changed, tui_register_changed, attach); - attach_or_detach (gdb::observers::source_styling_changed, - tui_redisplay_source, attach); } /* Install the TUI specific hooks. */ diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index e62ee4e..34cb38b 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -325,3 +325,23 @@ tui_source_window::do_scroll_vertical (int num_to_scroll) print_source_lines (s, l.u.line_no, l.u.line_no + 1, 0); } } + +tui_source_window::tui_source_window () + : tui_source_window_base (SRC_WIN) +{ + gdb::observers::source_styling_changed.attach + (std::bind (&tui_source_window::style_changed, this), + m_observable); +} + +tui_source_window::~tui_source_window () +{ + gdb::observers::source_styling_changed.detach (m_observable); +} + +void +tui_source_window::style_changed () +{ + if (tui_active && is_visible) + refill (); +}