patch 9.0.0455: a few problems with 'splitscroll'

Problem:    A few problems with 'splitscroll'.
Solution:   Fix 'splitscroll' problems. (Luuk van Baal, closes #11117)
diff --git a/src/window.c b/src/window.c
index cbe01f0..49f57b5 100644
--- a/src/window.c
+++ b/src/window.c
@@ -3923,6 +3923,7 @@
 win_init_size(void)
 {
     firstwin->w_height = ROWS_AVAIL;
+    firstwin->w_prev_height = ROWS_AVAIL;
     topframe->fr_height = ROWS_AVAIL;
     firstwin->w_width = Columns;
     topframe->fr_width = Columns;
@@ -4069,6 +4070,7 @@
 
 	win_init_size();
 	firstwin->w_winrow = tabline_height();
+	firstwin->w_prev_winrow = firstwin->w_winrow;
 	win_comp_scroll(curwin);
 
 	newtp->tp_topframe = topframe;
@@ -6372,10 +6374,8 @@
 	    {
 		lnum = wp->w_cursor.lnum;
 		wp->w_cursor.lnum = MIN(wp->w_buffer->b_ml.ml_line_count,
-			wp->w_botline - 1 + (wp->w_prev_height
-			    ? (wp->w_winrow - wp->w_prev_winrow)
-					   + (wp->w_height - wp->w_prev_height)
-			    : -WINBAR_HEIGHT(wp)));
+			wp->w_botline - 1 + (wp->w_winrow - wp->w_prev_winrow)
+					  + (wp->w_height - wp->w_prev_height));
 		// Bring the new cursor position to the bottom of the screen.
 		wp->w_fraction = FRACTION_MULT;
 		scroll_to_fraction(wp, wp->w_prev_height);
@@ -6802,6 +6802,9 @@
 	    comp_col();
 	    redraw_all_later(UPD_SOME_VALID);
 	}
+	// Set prev_height when difference is due to 'laststatus'.
+	if (abs(wp->w_height - wp->w_prev_height) == 1)
+	    wp->w_prev_height = wp->w_height;
     }
     else if (fr->fr_layout == FR_ROW)
     {
@@ -7091,6 +7094,8 @@
 	win_comp_pos();
 	if (wp != NULL && close_curwin)
 	    win_goto(wp);
+	if (!p_spsc)
+	    win_fix_scroll(FALSE);
 	redraw_all_later(UPD_NOT_VALID);
     }
     clear_snapshot(curtab, idx);