patch 9.0.0701: with 'smoothscroll' cursor position not adjusted in long line

Problem:    With 'smoothscroll' the cursor position s not adjusted in a long
            line.
Solution:   Move the cursor further up or down in the line.
diff --git a/src/move.c b/src/move.c
index 139ee17..613791e 100644
--- a/src/move.c
+++ b/src/move.c
@@ -1602,6 +1602,27 @@
 #endif
 	coladvance(curwin->w_curswant);
     }
+
+    if (curwin->w_cursor.lnum == curwin->w_topline && do_sms)
+    {
+	// make sure the cursor is in the visible text
+	validate_virtcol();
+	int col = curwin->w_virtcol - curwin->w_skipcol;
+	int row = 0;
+	if (col >= width1)
+	{
+	    col -= width1;
+	    ++row;
+	}
+	if (col > width2)
+	{
+	    row += col / width2;
+	    col = col % width2;
+	}
+	if (row >= curwin->w_height)
+	    coladvance(curwin->w_virtcol
+				      - (row - curwin->w_height + 1) * width2);
+    }
 }
 
 /*
@@ -1651,8 +1672,7 @@
 		    // for a closed fold: go to the last line in the fold
 		    (void)hasFolding(lnum, NULL, &lnum);
 # endif
-		if (lnum == curwin->w_topline
-					&& curwin->w_p_wrap && curwin->w_p_sms)
+		if (lnum == curwin->w_topline && do_sms)
 		{
 		    // 'smoothscroll': increase "w_skipcol" until it goes over
 		    // the end of the line, then advance to the next line.
@@ -1725,6 +1745,24 @@
 	      ~(VALID_WROW|VALID_WCOL|VALID_CHEIGHT|VALID_CROW|VALID_VIRTCOL);
 	coladvance(curwin->w_curswant);
     }
+    if (curwin->w_cursor.lnum == curwin->w_topline
+					    && do_sms && curwin->w_skipcol > 0)
+    {
+	// make sure the cursor is in a visible part of the line
+	validate_virtcol();
+	if (curwin->w_virtcol < curwin->w_skipcol + 3)
+	{
+	    int	    width1 = curwin->w_width - curwin_col_off();
+	    int	    width2 = width1 + curwin_col_off2();
+	    colnr_T col = curwin->w_virtcol;
+
+	    if (col < width1)
+		col += width1;
+	    while (col < curwin->w_skipcol + 3)
+		col += width2;
+	    coladvance(col);
+	}
+    }
 }
 
 #ifdef FEAT_DIFF