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
This commit is contained in:
Tom Tromey 2020-02-22 11:48:26 -07:00
parent 7eed1a8e83
commit eb9c887456
2 changed files with 17 additions and 42 deletions

View File

@ -1,3 +1,7 @@
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)

View File

@ -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;
auto iter = std::find (tui_windows.begin (), tui_windows.end (), cur_win);
gdb_assert (iter != tui_windows.end ());
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++;
}
}
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;
auto iter = std::find (tui_windows.begin (), tui_windows.end (), cur_win);
gdb_assert (iter != tui_windows.end ());
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--;
}
}
return prev;
if (iter == tui_windows.begin ())
return tui_windows.back ();
--iter;
return *iter;
}