From eb9c88745686d46c5100bdf1c2f112d699c7f702 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 22 Feb 2020 11:48:26 -0700 Subject: 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 * tui/tui-data.c (tui_next_win, tui_prev_win): Reimplement. Change-Id: Ifcd402f76fe0a16e0fe9275a185d550279c01660 --- gdb/ChangeLog | 4 ++++ 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 + * tui/tui-data.c (tui_next_win, tui_prev_win): Reimplement. + +2020-02-22 Tom Tromey + * tui/tui-winsource.h (struct tui_source_window_iterator) : New etytypedef. : 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 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; } -- cgit v1.1