patch 8.1.1347: fractional scroll position not restored after closing window

Problem:    Fractional scroll position not restored after closing window.
Solution:   Do restore fraction if topline is not one.
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index c7be133..b3eecd7 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -745,16 +745,8 @@
 
 func Test_split_noscroll()
   let so_save = &so
-  new
-  only
-
-  " Make sure windows can hold all content after split.
-  for i in range(1, 20)
-    wincmd +
-    redraw!
-  endfor
-
-  call setline (1, range(1, 8))
+  enew
+  call setline(1, range(1, 8))
   normal 100%
   split
 
@@ -769,12 +761,20 @@
   call assert_equal(1, info1.topline)
   call assert_equal(1, info2.topline)
 
-  " Restore original state.
-  for i in range(1, 20)
-    wincmd -
-    redraw!
-  endfor
+  " window that fits all lines by itself, but not when split: closing other
+  " window should restore fraction.
   only!
+  call setline(1, range(1, &lines - 10))
+  exe &lines / 4
+  let winid1 = win_getid()
+  let info1 = getwininfo(winid1)[0]
+  call assert_equal(1, info1.topline)
+  new
+  redraw
+  close
+  let info1 = getwininfo(winid1)[0]
+  call assert_equal(1, info1.topline)
+
   bwipe!
   let &so = so_save
 endfunc
diff --git a/src/version.c b/src/version.c
index fc1a5d5..6166c15 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1347,
+/**/
     1346,
 /**/
     1345,
diff --git a/src/window.c b/src/window.c
index f031989..fd732f2 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5830,10 +5830,11 @@
     // Don't change w_topline in any of these cases:
     // - window height is 0
     // - 'scrollbind' is set and this isn't the current window
-    // - window height is sufficient to display the whole buffer
+    // - window height is sufficient to display the whole buffer and first line
+    //   is visible.
     if (height > 0
         && (!wp->w_p_scb || wp == curwin)
-        && (height < wp->w_buffer->b_ml.ml_line_count))
+        && (height < wp->w_buffer->b_ml.ml_line_count || wp->w_topline > 1))
     {
 	/*
 	 * Find a value for w_topline that shows the cursor at the same