patch 8.1.0630: "wincmd p" does not work after using an autocmd window

Problem:   "wincmd p" does not work after using an autocmd window.
Solution:   Store "prevwin" in aco_save_T. (Christian Brabandt, closes #3690)
diff --git a/src/fileio.c b/src/fileio.c
index bf46522..fd8fd24 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -9017,6 +9017,7 @@
 
     aco->save_curwin = curwin;
     aco->save_curbuf = curbuf;
+    aco->save_prevwin = prevwin;
     if (win != NULL)
     {
 	/* There is a window for "buf" in the current tab page, make it the
@@ -9127,6 +9128,8 @@
 	else
 	    /* Hmm, original window disappeared.  Just use the first one. */
 	    curwin = firstwin;
+	if (win_valid(aco->save_prevwin))
+	    prevwin = aco->save_prevwin;
 #ifdef FEAT_EVAL
 	vars_clear(&aucmd_win->w_vars->dv_hashtab);  /* free all w: variables */
 	hash_init(&aucmd_win->w_vars->dv_hashtab);   /* re-use the hashtab */
@@ -9177,6 +9180,8 @@
 
 	    curwin = aco->save_curwin;
 	    curbuf = curwin->w_buffer;
+	    if (win_valid(aco->save_prevwin))
+		prevwin = aco->save_prevwin;
 	    /* In case the autocommand move the cursor to a position that that
 	     * not exist in curbuf. */
 	    check_cursor();
diff --git a/src/structs.h b/src/structs.h
index 09a5665..0f37b8f 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -3252,6 +3252,7 @@
     int		use_aucmd_win;	/* using aucmd_win */
     win_T	*save_curwin;	/* saved curwin */
     win_T	*new_curwin;	/* new curwin */
+    win_T	*save_prevwin;	/* saved prevwin */
     bufref_T	new_curbuf;	/* new curbuf */
     char_u	*globaldir;	/* saved value of globaldir */
 } aco_save_T;
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index 6d65e2b..0980493 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -578,4 +578,41 @@
   only
 endfunc
 
+function! Fun_RenewFile()
+  sleep 2
+  silent execute '!echo "1" > tmp.txt'
+  sp
+  wincmd p
+  edit! tmp.txt
+endfunction
+
+func Test_window_prevwin()
+  " Can we make this work on MS-Windows?
+  if !has('unix')
+    return
+  endif
+
+  set hidden autoread
+  call writefile(['2'], 'tmp.txt')
+  new tmp.txt
+  q
+  " Need to wait a bit for the timestamp to be older.
+  call Fun_RenewFile()
+  call assert_equal(2, winnr())
+  wincmd p
+  call assert_equal(1, winnr())
+  wincmd p
+  q
+  call Fun_RenewFile()
+  call assert_equal(2, winnr())
+  wincmd p
+  call assert_equal(1, winnr())
+  wincmd p
+  " reset
+  q
+  call delete('tmp.txt')
+  set hidden&vim autoread&vim
+  delfunc Fun_RenewFile
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 2155834..1b9e3e0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -800,6 +800,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    630,
+/**/
     629,
 /**/
     628,