Re-apply the current layout when resizing
authorTom Tromey <tom@tromey.com>
Thu, 10 Oct 2019 03:18:31 +0000 (21:18 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 11 Dec 2019 22:49:03 +0000 (15:49 -0700)
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-12-11  Tom Tromey  <tom@tromey.com>

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

gdb/testsuite/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

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

Change-Id: I3dc6c02a753d495d9ab5e8213d550a147198ce6f

gdb/ChangeLog
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.tui/empty.exp
gdb/testsuite/gdb.tui/resize.exp
gdb/tui/tui-win.c

index 4c98df34d83a5da2293b4ba5aca5f5c5ad591fca..22cebfb2f7a1b1c92b1cdfba7808c9c260278229 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+       * tui/tui-win.c (tui_resize_all): Remove code, call
+       tui_apply_current_layout.
+
 2019-12-11  Tom Tromey  <tom@tromey.com>
 
        * tui/tui-layout.h (tui_apply_current_layout): Declare.
index 9b7a81ec98657b2679464fc73470d85c70cc2424..cf3fcb7b9b08fbfb9477704dc24bec485f05e299 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+       * gdb.tui/resize.exp: Update.
+       * gdb.tui/empty.exp (layouts): Update.
+
 2019-12-11  Tom Tromey  <tom@tromey.com>
 
        * gdb.tui/regs.exp: Update.
index 861f56437ed9ef5382027bdb90371edfc7f3cd04..d0d827094ebc46f2edb40f11da8bab9dd030a5f6 100644 (file)
@@ -32,28 +32,28 @@ if {![Term::enter_tui]} {
 # 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 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
+    {regs src-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 13} {0 12 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 13}} {{0 0 90 26}}
        {
            {"no asm" "No Assembly Available"}
        }}
-    {regs asm-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
+    {regs asm-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 13} {0 12 90 13}}
        {
            {"no asm" "No Assembly Available"}
            {"no regs" "Register Values Unavailable"}
        }}
-    {split split {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
+    {split split {{0 0 80 6} {0 5 80 8}} {{0 0 90 13} {0 12 90 13}}
        {
            {"no source" "No Source Available"}
            {"no asm" "No Assembly Available"}
        }}
-    {regs split-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
+    {regs split-regs {{0 0 80 6} {0 5 80 8}} {{0 0 90 13} {0 12 90 13}}
        {
            {"no asm" "No Assembly Available"}
            {"no regs" "Register Values Unavailable"}
index 3b885e1198ef1624df8102fd50e80fe906ab214e..c5302799ea50ae6c28e5aed68d642e22720e4e76 100644 (file)
@@ -37,4 +37,4 @@ if {![Term::enter_tui]} {
 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
index 4339b7e967abe38d98ac32a20a58fbcdd9bf2fcb..199f3bafc21f95a246ad23ee883e084e84453691 100644 (file)
@@ -536,13 +536,7 @@ tui_resize_all (void)
   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);
@@ -553,108 +547,12 @@ tui_resize_all (void)
       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.  */