Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH] Don't let TUI focus on locator
@ 2020-09-23 18:59 Tom Tromey
  2020-09-23 19:10 ` Simon Marchi
  0 siblings, 1 reply; 7+ messages in thread
From: Tom Tromey @ 2020-09-23 18:59 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

PR tui/26638 notes that the C-x o binding can put the focus on the
locator window.  However, this is not useful and did not happen
historically.  This patch changes the TUI to skip this window when
switching focus.

gdb/ChangeLog
2020-09-23  Tom Tromey  <tromey@adacore.com>

	PR tui/26638:
	* tui/tui-data.c (tui_next_win): Exclude the locator.
	(tui_prev_win): Rewrite.
---
 gdb/ChangeLog      |  6 ++++++
 gdb/tui/tui-data.c | 35 +++++++++++++++++++++++++++--------
 2 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c
index 8f7d257e945..0d2b2219439 100644
--- a/gdb/tui/tui-data.c
+++ b/gdb/tui/tui-data.c
@@ -23,6 +23,7 @@
 #include "symtab.h"
 #include "tui/tui.h"
 #include "tui/tui-data.h"
+#include "tui/tui-stack.h"
 #include "tui/tui-win.h"
 #include "tui/tui-wingeneral.h"
 #include "tui/tui-winsource.h"
@@ -113,9 +114,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 != tui_locator_win_info_ptr ());
+  /* This won't loop forever since we can't have just a locator
+     window.  */
+  while (true)
+    {
+      ++iter;
+      if (iter == tui_windows.end ())
+	iter = tui_windows.begin ();
+      if (*iter != tui_locator_win_info_ptr ())
+	break;
+    }
+
   return *iter;
 }
 
@@ -125,12 +135,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 != tui_locator_win_info_ptr ());
+  /* This won't loop forever since we can't have just a locator
+     window.  */
+  while (true)
+    {
+      ++iter;
+      if (iter == tui_windows.rend ())
+	iter = tui_windows.rbegin ();
+      if (*iter != tui_locator_win_info_ptr ())
+	break;
+    }
 
-  if (iter == tui_windows.begin ())
-    return tui_windows.back ();
-  --iter;
   return *iter;
 }
 
-- 
2.26.2


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-09-24 19:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-23 18:59 [PATCH] Don't let TUI focus on locator Tom Tromey
2020-09-23 19:10 ` Simon Marchi
2020-09-23 19:50   ` Tom Tromey
2020-09-23 19:57     ` Simon Marchi
2020-09-24 18:27       ` Tom Tromey
2020-09-24 18:33         ` Simon Marchi
2020-09-24 19:02           ` Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox