patch 9.1.0526: Unwanted cursor movement with pagescroll at start of buffer

Problem:  Cursor is moved to bottom of window trying to pagescroll when
          already at the start of the buffer (Asheq Imran, after v9.1.0357)
Solution: Don't move cursor when buffer content did not move.
          (Luuk van Baal)

closes: #15139

Signed-off-by: Luuk van Baal <luukvbaal@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/move.c b/src/move.c
index 71654dd..f2780e5 100644
--- a/src/move.c
+++ b/src/move.c
@@ -3281,10 +3281,13 @@
 				MAX(1, p_window - 2) : get_scroll_overlap(dir));
 	nochange = scroll_with_sms(dir, count, &count);
 
-	// Place cursor at top or bottom of window.
-	validate_botline();
-	curwin->w_cursor.lnum = (dir == FORWARD ? curwin->w_topline
+	if (!nochange)
+	{
+	    // Place cursor at top or bottom of window.
+	    validate_botline();
+	    curwin->w_cursor.lnum = (dir == FORWARD ? curwin->w_topline
 						    : curwin->w_botline - 1);
+	}
     }
 
     if (get_scrolloff_value() > 0)
diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim
index 83594d2..398bf29 100644
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -4257,6 +4257,9 @@
   call assert_equal(18, line('.'))
   exe "norm! \<C-B>\<C-F>"
   call assert_equal(9, line('.'))
+  " Not when already at the start of the buffer.
+  exe "norm! ggj\<C-B>"
+  call assert_equal(2, line('.'))
   bwipe!
 endfunc
 
diff --git a/src/version.c b/src/version.c
index 66ed6a6..462b094 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    526,
+/**/
     525,
 /**/
     524,