[review] Re-apply the current layout when resizing

Message ID gerrit.1572212661000.I3dc6c02a753d495d9ab5e8213d550a147198ce6f@gnutoolchain-gerrit.osci.io
State New, archived
Headers

Commit Message

Simon Marchi (Code Review) Oct. 27, 2019, 9:44 p.m. UTC
  Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/369
......................................................................

Re-apply the current layout when resizing

The TUI has separate code for each possible layout to handle the case
where the terminal window is resized.  With the new layout code, this
can all be replaced with a call to tui_apply_current_layout, which
simply re-applies the current layout.

This results in some small differences in behavior when resizing, so
some tests are updated.

gdb/ChangeLog
2019-10-27  Tom Tromey  <tom@tromey.com>

	* tui/tui-win.c (tui_resize_all): Remove code, call
	tui_apply_current_layout.

gdb/testsuite/ChangeLog
2019-10-27  Tom Tromey  <tom@tromey.com>

	* gdb.tui/resize.exp: Update.
	* gdb.tui/empty.exp (layouts): Update.

Change-Id: I3dc6c02a753d495d9ab5e8213d550a147198ce6f
---
M gdb/ChangeLog
M gdb/testsuite/ChangeLog
M gdb/testsuite/gdb.tui/empty.exp
M gdb/testsuite/gdb.tui/resize.exp
M gdb/tui/tui-win.c
5 files changed, 19 insertions(+), 111 deletions(-)
  

Comments

Simon Marchi (Code Review) Nov. 26, 2019, 11:54 p.m. UTC | #1
Andrew Burgess has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/369
......................................................................


Patch Set 4: Code-Review+2

Always nice when lots of code is deleted and the functionality stays basically the same :)

LGTM.
  

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0aa6334..06db797 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@ 
 2019-10-27  Tom Tromey  <tom@tromey.com>
 
+	* tui/tui-win.c (tui_resize_all): Remove code, call
+	tui_apply_current_layout.
+
+2019-10-27  Tom Tromey  <tom@tromey.com>
+
 	* tui/tui-layout.h (tui_apply_current_layout): Declare.
 	* tui/tui-layout.c (standard_layouts, applied_layout): New
 	globals.
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 7eb8121..238432d 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,10 @@ 
 2019-10-27  Tom Tromey  <tom@tromey.com>
 
+	* gdb.tui/resize.exp: Update.
+	* gdb.tui/empty.exp (layouts): Update.
+
+2019-10-27  Tom Tromey  <tom@tromey.com>
+
 	* gdb.tui/regs.exp: Update.
 	* gdb.tui/basic.exp: Update.
 
diff --git a/gdb/testsuite/gdb.tui/empty.exp b/gdb/testsuite/gdb.tui/empty.exp
index b6ee350..8df607c 100644
--- a/gdb/testsuite/gdb.tui/empty.exp
+++ b/gdb/testsuite/gdb.tui/empty.exp
@@ -32,28 +32,28 @@ 
 # 4. List of boxes in 90x40 mode
 # 5. List of test name and text for the empty window
 set layouts {
-    {src src {{0 0 80 15}} {{0 0 90 23}}
+    {src src {{0 0 80 15}} {{0 0 90 26}}
 	{{"no source" "No Source Available"}}}
-    {regs src-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
+    {regs src-regs {{0 0 80 8} {0 8 80 8}} {{0 0 90 13} {0 13 90 13}}
 	{
 	    {"no source" "No Source Available"}
 	    {"no regs" "Register Values Unavailable"}
 	}}
-    {asm asm {{0 0 80 15}} {{0 0 90 23}}
+    {asm asm {{0 0 80 15}} {{0 0 90 26}}
 	{
 	    {"no asm" "No Assembly Available"}
 	}}
-    {regs asm-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
+    {regs asm-regs {{0 0 80 8} {0 8 80 8}} {{0 0 90 13} {0 13 90 13}}
 	{
 	    {"no asm" "No Assembly Available"}
 	    {"no regs" "Register Values Unavailable"}
 	}}
-    {split split {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
+    {split split {{0 0 80 7} {0 7 80 7}} {{0 0 90 13} {0 13 90 13}}
 	{
 	    {"no source" "No Source Available"}
 	    {"no asm" "No Assembly Available"}
 	}}
-    {regs split-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
+    {regs split-regs {{0 0 80 7} {0 7 80 7}} {{0 0 90 13} {0 13 90 13}}
 	{
 	    {"no asm" "No Assembly Available"}
 	    {"no regs" "Register Values Unavailable"}
diff --git a/gdb/testsuite/gdb.tui/resize.exp b/gdb/testsuite/gdb.tui/resize.exp
index 3b885e1..c530279 100644
--- a/gdb/testsuite/gdb.tui/resize.exp
+++ b/gdb/testsuite/gdb.tui/resize.exp
@@ -37,4 +37,4 @@ 
 Term::check_contents "source at startup" ">|21 *return 0"
 
 Term::resize 40 90
-Term::check_box "source box after resize" 0 0 90 23
+Term::check_box "source box after resize" 0 0 90 26
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index a215ee3..aeb271a 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -533,13 +533,7 @@ 
   height_diff = screenheight - tui_term_height ();
   if (height_diff || width_diff)
     {
-      enum tui_layout_type cur_layout = tui_current_layout ();
       struct tui_win_info *win_with_focus = tui_win_with_focus ();
-      struct tui_win_info *first_win;
-      struct tui_win_info *second_win;
-      tui_source_window_base *src_win;
-      struct tui_locator_window *locator = tui_locator_win_info_ptr ();
-      int new_height, split_diff, cmd_split_diff, num_wins_displayed = 2;
 
 #ifdef HAVE_RESIZE_TERM
       resize_term (screenheight, screenwidth);
@@ -550,108 +544,12 @@ 
       tui_update_gdb_sizes ();
       tui_set_term_height_to (screenheight);
       tui_set_term_width_to (screenwidth);
-      if (cur_layout == SRC_DISASSEM_COMMAND 
-	  || cur_layout == SRC_DATA_COMMAND
-	  || cur_layout == DISASSEM_DATA_COMMAND)
-	num_wins_displayed++;
-      split_diff = height_diff / num_wins_displayed;
-      cmd_split_diff = split_diff;
-      if (height_diff % num_wins_displayed)
-	{
-	  if (height_diff < 0)
-	    cmd_split_diff--;
-	  else
-           cmd_split_diff++;
-       }
-      /* Now adjust each window.  */
+
       /* erase + clearok are used instead of a straightforward clear as
          AIX 5.3 does not define clear.  */
       erase ();
       clearok (curscr, TRUE);
-      switch (cur_layout)
-       {
-	case SRC_COMMAND:
-	case DISASSEM_COMMAND:
-	  src_win = *(tui_source_windows ().begin ());
-	  /* Check for invalid heights.  */
-	  if (height_diff == 0)
-	    new_height = src_win->height;
-	  else if ((src_win->height + split_diff) >=
-		   (screenheight - MIN_CMD_WIN_HEIGHT - 1))
-	    new_height = screenheight - MIN_CMD_WIN_HEIGHT - 1;
-	  else if ((src_win->height + split_diff) <= 0)
-	    new_height = MIN_WIN_HEIGHT;
-	  else
-	    new_height = src_win->height + split_diff;
-
-	  src_win->resize (new_height, screenwidth, 0, 0);
-
-	  locator->resize (1, screenwidth, 0, new_height);
-
-	  new_height = screenheight - (new_height + 1);
-	  TUI_CMD_WIN->resize (new_height, screenwidth,
-			       0, locator->y + 1);
-	  break;
-	default:
-	  if (cur_layout == SRC_DISASSEM_COMMAND)
-	    {
-	      src_win = TUI_SRC_WIN;
-	      first_win = src_win;
-	      second_win = TUI_DISASM_WIN;
-	    }
-	  else
-	    {
-	      first_win = TUI_DATA_WIN;
-	      src_win = *(tui_source_windows ().begin ());
-	      second_win = src_win;
-	    }
-	  /* Change the first window's height/width.  */
-	  /* Check for invalid heights.  */
-	  if (height_diff == 0)
-	    new_height = first_win->height;
-	  else if ((first_win->height +
-		    second_win->height + (split_diff * 2)) >=
-		   (screenheight - MIN_CMD_WIN_HEIGHT - 1))
-	    new_height = (screenheight - MIN_CMD_WIN_HEIGHT - 1) / 2;
-	  else if ((first_win->height + split_diff) <= 0)
-	    new_height = MIN_WIN_HEIGHT;
-	  else
-	    new_height = first_win->height + split_diff;
-
-	  first_win->resize (new_height, screenwidth, 0, 0);
-
-	  /* Change the second window's height/width.  */
-	  /* Check for invalid heights.  */
-	  if (height_diff == 0)
-	    new_height = second_win->height;
-	  else if ((first_win->height +
-		    second_win->height + (split_diff * 2)) >=
-		   (screenheight - MIN_CMD_WIN_HEIGHT - 1))
-	    {
-	      new_height = screenheight - MIN_CMD_WIN_HEIGHT - 1;
-	      if (new_height % 2)
-		new_height = (new_height / 2) + 1;
-	      else
-		new_height /= 2;
-	    }
-	  else if ((second_win->height + split_diff) <= 0)
-	    new_height = MIN_WIN_HEIGHT;
-	  else
-	    new_height = second_win->height + split_diff;
-
-	  second_win->resize (new_height, screenwidth,
-			      0, first_win->height - 1);
-
-	  locator->resize (1, screenwidth,
-			   0, second_win->y + new_height);
-
-	  /* Change the command window's height/width.  */
-	  new_height = screenheight - (locator->y + 1);
-	  TUI_CMD_WIN->resize (new_height, screenwidth,
-			       0, locator->y + 1);
-	  break;
-	}
-
+      tui_apply_current_layout ();
       tui_delete_invisible_windows ();
       /* Turn keypad back on, unless focus is in the command
 	 window.  */