patch 9.1.1513: resizing Vim window causes unexpected internal window width

Problem:  resizing Vim window causes unexpected internal window width
          (chdiza, after v9.1.1465)
Solution: move the column calculation around (Hirohito Higashi)

fixes: #17657
fixes: #17595
closes: #17668

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/window.c b/src/window.c
index 3d2528f..484fdf8 100644
--- a/src/window.c
+++ b/src/window.c
@@ -3461,9 +3461,9 @@
 	}
 	free_tp = TRUE;
 	redraw_tabline = TRUE;
+	shell_new_columns();
 	if (h != tabline_height())
 	    shell_new_rows();
-	shell_new_columns();
     }
 
     // Free the memory used for the window.
@@ -6160,6 +6160,8 @@
 /*
  * Called from win_new_shellsize() after Rows changed.
  * This only does the current tab page, others must be done when made active.
+ * Note: When called together with shell_new_columns(), call shell_new_columns()
+ * first to avoid this function updating firstwin->w_wincol first.
  */
     void
 shell_new_rows(void)
@@ -6204,8 +6206,10 @@
     if (firstwin == NULL)	// not initialized yet
 	return;
 
+#if defined(FEAT_TABPANEL)
     int save_wincol = firstwin->w_wincol;
     int save_fr_width = topframe->fr_width;
+#endif
     int w = COLUMNS_WITHOUT_TPL();
 
     // First try setting the widths of windows with 'winfixwidth'.  If that
@@ -6216,9 +6220,13 @@
 
     win_comp_pos();		// recompute w_winrow and w_wincol
 
-    if (p_ea && (firstwin->w_wincol != save_wincol
-		|| topframe->fr_width != save_fr_width))
+#if defined(FEAT_TABPANEL)
+    if (p_ea && firstwin->w_wincol + topframe->fr_width
+	    == save_wincol + save_fr_width &&
+	    (firstwin->w_wincol != save_wincol ||
+	     topframe->fr_width != save_fr_width))
 	win_equal(curwin, FALSE, 0);
+#endif
     if (!skip_win_fix_scroll)
 	win_fix_scroll(TRUE);