diff options
author | Tom Tromey <tom@tromey.com> | 2020-02-22 11:48:26 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2020-02-22 11:48:35 -0700 |
commit | eb9c88745686d46c5100bdf1c2f112d699c7f702 (patch) | |
tree | 27d75e2aad66d0cef45365d87945336b23ffb9db | |
parent | 7eed1a8e8386e1b93c51768855c32ddae6f088ae (diff) | |
download | binutils-eb9c88745686d46c5100bdf1c2f112d699c7f702.zip binutils-eb9c88745686d46c5100bdf1c2f112d699c7f702.tar.gz binutils-eb9c88745686d46c5100bdf1c2f112d699c7f702.tar.bz2 |
Reimplement tui_next_win and tui_prev_win
This reimplements tui_next_win and tui_prev_win. Now they account for
the possibility of windows not on tui_win_list.
gdb/ChangeLog
2020-02-22 Tom Tromey <tom@tromey.com>
* tui/tui-data.c (tui_next_win, tui_prev_win): Reimplement.
Change-Id: Ifcd402f76fe0a16e0fe9275a185d550279c01660
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/tui/tui-data.c | 55 |
2 files changed, 17 insertions, 42 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d006221..16daac3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 2020-02-22 Tom Tromey <tom@tromey.com> + * tui/tui-data.c (tui_next_win, tui_prev_win): Reimplement. + +2020-02-22 Tom Tromey <tom@tromey.com> + * tui/tui-winsource.h (struct tui_source_window_iterator) <inner_iterator>: New etytypedef. <tui_source_window_iterator>: Take "end" parameter. diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 06bd42e..5d42faf 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -26,6 +26,7 @@ #include "tui/tui-wingeneral.h" #include "tui/tui-winsource.h" #include "gdb_curses.h" +#include <algorithm> struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS]; @@ -103,28 +104,13 @@ tui_set_term_width_to (int w) struct tui_win_info * tui_next_win (struct tui_win_info *cur_win) { - int type = cur_win->type; - struct tui_win_info *next_win = NULL; - - if (cur_win->type == CMD_WIN) - type = SRC_WIN; - else - type = cur_win->type + 1; - while (type != cur_win->type && (next_win == NULL)) - { - if (tui_win_list[type] - && tui_win_list[type]->is_visible ()) - next_win = tui_win_list[type]; - else - { - if (type == CMD_WIN) - type = SRC_WIN; - else - type++; - } - } + auto iter = std::find (tui_windows.begin (), tui_windows.end (), cur_win); + gdb_assert (iter != tui_windows.end ()); - return next_win; + ++iter; + if (iter == tui_windows.end ()) + return tui_windows[0]; + return *iter; } @@ -133,28 +119,13 @@ tui_next_win (struct tui_win_info *cur_win) struct tui_win_info * tui_prev_win (struct tui_win_info *cur_win) { - int type = cur_win->type; - struct tui_win_info *prev = NULL; - - if (cur_win->type == SRC_WIN) - type = CMD_WIN; - else - type = cur_win->type - 1; - while (type != cur_win->type && (prev == NULL)) - { - if (tui_win_list[type] - && tui_win_list[type]->is_visible ()) - prev = tui_win_list[type]; - else - { - if (type == SRC_WIN) - type = CMD_WIN; - else - type--; - } - } + auto iter = std::find (tui_windows.begin (), tui_windows.end (), cur_win); + gdb_assert (iter != tui_windows.end ()); - return prev; + if (iter == tui_windows.begin ()) + return tui_windows.back (); + --iter; + return *iter; } |