diff options
Diffstat (limited to 'gdb/tui')
-rw-r--r-- | gdb/tui/tui-data.c | 34 | ||||
-rw-r--r-- | gdb/tui/tui-data.h | 6 | ||||
-rw-r--r-- | gdb/tui/tui-stack.h | 5 |
3 files changed, 37 insertions, 8 deletions
diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 8f7d257..d475d03 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -113,9 +113,18 @@ tui_next_win (struct tui_win_info *cur_win) auto iter = std::find (tui_windows.begin (), tui_windows.end (), cur_win); gdb_assert (iter != tui_windows.end ()); - ++iter; - if (iter == tui_windows.end ()) - return tui_windows[0]; + gdb_assert (cur_win->can_focus ()); + /* This won't loop forever since we can't have just an un-focusable + window. */ + while (true) + { + ++iter; + if (iter == tui_windows.end ()) + iter = tui_windows.begin (); + if ((*iter)->can_focus ()) + break; + } + return *iter; } @@ -125,12 +134,21 @@ tui_next_win (struct tui_win_info *cur_win) struct tui_win_info * tui_prev_win (struct tui_win_info *cur_win) { - auto iter = std::find (tui_windows.begin (), tui_windows.end (), cur_win); - gdb_assert (iter != tui_windows.end ()); + auto iter = std::find (tui_windows.rbegin (), tui_windows.rend (), cur_win); + gdb_assert (iter != tui_windows.rend ()); + + gdb_assert (cur_win->can_focus ()); + /* This won't loop forever since we can't have just an un-focusable + window. */ + while (true) + { + ++iter; + if (iter == tui_windows.rend ()) + iter = tui_windows.rbegin (); + if ((*iter)->can_focus ()) + break; + } - if (iter == tui_windows.begin ()) - return tui_windows.back (); - --iter; return *iter; } diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index 5e7a122..d61bfc7 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -99,6 +99,12 @@ public: return handle != nullptr; } + /* Return true if this window can accept the focus. */ + virtual bool can_focus () const + { + return true; + } + /* Disable output until the next call to doupdate. */ void no_refresh () { diff --git a/gdb/tui/tui-stack.h b/gdb/tui/tui-stack.h index 9ff57b1..0e5916f 100644 --- a/gdb/tui/tui-stack.h +++ b/gdb/tui/tui-stack.h @@ -52,6 +52,11 @@ struct tui_locator_window : public tui_win_info return false; } + bool can_focus () const override + { + return false; + } + void rerender () override; /* Update the locator, with the provided arguments. |