mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-01 09:49:43 +08:00
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.
This commit is contained in:
@ -1,3 +1,16 @@
|
|||||||
|
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>
|
2019-07-17 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* tui/tui-data.c (tui_clear_source_windows_detail): Fix typo.
|
* tui/tui-data.c (tui_clear_source_windows_detail): Fix typo.
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "tui/tui.h" /* For enum tui_win_type. */
|
#include "tui/tui.h" /* For enum tui_win_type. */
|
||||||
#include "gdb_curses.h" /* For WINDOW. */
|
#include "gdb_curses.h" /* For WINDOW. */
|
||||||
|
#include "observable.h"
|
||||||
|
|
||||||
/* This is a point definition. */
|
/* This is a point definition. */
|
||||||
struct tui_point
|
struct tui_point
|
||||||
@ -424,10 +425,8 @@ public:
|
|||||||
|
|
||||||
struct tui_source_window : public tui_source_window_base
|
struct tui_source_window : public tui_source_window_base
|
||||||
{
|
{
|
||||||
tui_source_window ()
|
tui_source_window ();
|
||||||
: tui_source_window_base (SRC_WIN)
|
~tui_source_window ();
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
DISABLE_COPY_AND_ASSIGN (tui_source_window);
|
DISABLE_COPY_AND_ASSIGN (tui_source_window);
|
||||||
|
|
||||||
@ -439,6 +438,13 @@ struct tui_source_window : public tui_source_window_base
|
|||||||
protected:
|
protected:
|
||||||
|
|
||||||
void do_scroll_vertical (int num_to_scroll) override;
|
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. */
|
/* A TUI disassembly window. */
|
||||||
|
@ -204,18 +204,6 @@ tui_normal_stop (struct bpstats *bs, int print_frame)
|
|||||||
tui_refresh_frame_and_register_information (/*registers_too_p=*/1);
|
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
|
/* Token associated with observers registered while TUI hooks are
|
||||||
installed. */
|
installed. */
|
||||||
static const gdb::observers::token tui_observers_token {};
|
static const gdb::observers::token tui_observers_token {};
|
||||||
@ -251,8 +239,6 @@ tui_attach_detach_observers (bool attach)
|
|||||||
tui_normal_stop, attach);
|
tui_normal_stop, attach);
|
||||||
attach_or_detach (gdb::observers::register_changed,
|
attach_or_detach (gdb::observers::register_changed,
|
||||||
tui_register_changed, attach);
|
tui_register_changed, attach);
|
||||||
attach_or_detach (gdb::observers::source_styling_changed,
|
|
||||||
tui_redisplay_source, attach);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Install the TUI specific hooks. */
|
/* Install the TUI specific hooks. */
|
||||||
|
@ -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);
|
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 ();
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user