patch 8.2.3754: undesired changing of the indent of the first formatted line

Problem:    Undesired changing of the indent of the first formatted line.
Solution:   Do not indent the first formatted line.
diff --git a/src/testdir/test_indent.vim b/src/testdir/test_indent.vim
index a01b066..f96da69 100644
--- a/src/testdir/test_indent.vim
+++ b/src/testdir/test_indent.vim
@@ -172,7 +172,8 @@
         \ 'metus lectus ultrices odio, sed elementum mi ante at arcu.', '', '\begin{center}', '',
         \ 'Proin nec risus consequat nunc dapibus consectetur. Mauris lacinia est a augue',
         \ 'tristique accumsan. Morbi pretium, felis molestie eleifend condimentum, arcu',
-        \ 'ipsum congue nisl, quis euismod purus libero in ante. Donec id semper purus.',
+        \ 'ipsum congue nisl, quis euismod purus libero in ante.', '',
+        \ 'Donec id semper purus.',
         \ 'Suspendisse eget aliquam nunc. Maecenas fringilla mauris vitae maximus',
         \ 'condimentum. Cras a quam in mi dictum eleifend at a lorem. Sed convallis',
         \ 'ante a commodo facilisis. Nam suscipit vulputate odio, vel dapibus nisl',
@@ -181,10 +182,10 @@
   1d_
   call cursor(5, 1)
   ka
-  call cursor(15, 1)
+  call cursor(14, 1)
   kb
   norm! 'agqap
-  norm! 'bgqap
+  norm! 'bgqG
   let expected = [ '\documentclass{article}', '', '\begin{document}', '',
         \ 'Lorem ipsum dolor sit amet, consectetur adipiscing',
         \ 'elit. Fusce ut enim non libero efficitur aliquet.',
@@ -201,9 +202,10 @@
         \ '  consectetur. Mauris lacinia est a augue',
         \ '  tristique accumsan. Morbi pretium, felis',
         \ '  molestie eleifend condimentum, arcu ipsum congue',
-        \ '  nisl, quis euismod purus libero in ante. Donec',
-        \ '  id semper purus.  Suspendisse eget aliquam nunc.',
-        \ '  Maecenas fringilla mauris vitae maximus',
+        \ '  nisl, quis euismod purus libero in ante.',
+        \ '',
+        \ '  Donec id semper purus.  Suspendisse eget aliquam',
+        \ '  nunc. Maecenas fringilla mauris vitae maximus',
         \ '  condimentum. Cras a quam in mi dictum eleifend',
         \ '  at a lorem. Sed convallis ante a commodo',
         \ '  facilisis. Nam suscipit vulputate odio, vel',
@@ -217,4 +219,28 @@
   delfunction GetTeXIndent 
 endfu
 
+func Test_formatting_keeps_first_line_indent()
+  let lines =<< trim END
+      foo()
+      {
+          int x;         // manually positioned
+                         // more text that will be formatted
+                         // but not reindented
+  END
+  new
+  call setline(1, lines)
+  setlocal sw=4 cindent tw=45 et
+  normal! 4Ggqj
+  let expected =<< trim END
+      foo()
+      {
+          int x;         // manually positioned
+                         // more text that will be
+                         // formatted but not
+                         // reindented
+  END
+  call assert_equal(expected, getline(1, '$'))
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/textformat.c b/src/textformat.c
index 246f06f..fb2ca95 100644
--- a/src/textformat.c
+++ b/src/textformat.c
@@ -954,6 +954,7 @@
     int		smd_save;
     long	count;
     int		need_set_indent = TRUE;	// set indent of next paragraph
+    linenr_T	first_line = curwin->w_cursor.lnum;
     int		force_format = FALSE;
     int		old_State = State;
 
@@ -1073,8 +1074,13 @@
 		{
 		    int		indent = 0; // amount of indent needed
 
-		    // replace indent in first line with minimal number of
-		    // tabs and spaces, according to current options
+		    // Replace indent in first line of a paragraph with minimal
+		    // number of tabs and spaces, according to current options.
+		    // For the very first formatted line keep the current
+		    // indent.
+		    if (curwin->w_cursor.lnum == first_line)
+			indent = get_indent();
+		    else
 # ifdef FEAT_LISP
 		    if (curbuf->b_p_lisp)
 			indent = get_lisp_indent();
diff --git a/src/version.c b/src/version.c
index aff25cf..d0ccf16 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3754,
+/**/
     3753,
 /**/
     3752,