aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2020-02-22 11:48:26 -0700
committerTom Tromey <tom@tromey.com>2020-02-22 11:48:35 -0700
commiteb9c88745686d46c5100bdf1c2f112d699c7f702 (patch)
tree27d75e2aad66d0cef45365d87945336b23ffb9db
parent7eed1a8e8386e1b93c51768855c32ddae6f088ae (diff)
downloadbinutils-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/ChangeLog4
-rw-r--r--gdb/tui/tui-data.c55
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;
}