diff options
author | Tom Tromey <tom@tromey.com> | 2019-06-28 14:48:45 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-07-17 12:19:04 -0600 |
commit | b73dd8779c0530e91c6e5067eab4cb7ca3f794d5 (patch) | |
tree | e717d03900daf50b3c3644b10d40b2927bdce635 /gdb | |
parent | ae2b53806d3ce384e349c722b21a7ad246102d5b (diff) | |
download | binutils-gdb-b73dd8779c0530e91c6e5067eab4cb7ca3f794d5.tar.gz |
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 <tom@tromey.com>
* 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) <style_changed>: New method.
<m_observable>: New member.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/tui/tui-data.h | 14 | ||||
-rw-r--r-- | gdb/tui/tui-hooks.c | 14 | ||||
-rw-r--r-- | gdb/tui/tui-source.c | 20 |
4 files changed, 43 insertions, 18 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c7318267a1f..1235b1a382d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,18 @@ 2019-07-17 Tom Tromey <tom@tromey.com> + * 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) <style_changed>: New method. + <m_observable>: New member. + +2019-07-17 Tom Tromey <tom@tromey.com> + * 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 bd22f9eec69..be951b4c840 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 71010530749..84acd3ac2e6 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 e62ee4ea5f9..34cb38b31af 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 (); +} |