From: Tom Tromey Date: Sat, 22 Feb 2020 18:48:26 +0000 (-0700) Subject: Reimplement tui_next_win and tui_prev_win X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=eb9c88745686d46c5100bdf1c2f112d699c7f702;p=binutils-gdb.git 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 --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d0062218a2b..16daac356c5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +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) diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 06bd42ee536..5d42fafccca 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; }