patch 7.4.1956
Problem:    When using CTRL-W f and pressing "q" at the ATTENTION dialog the
            newly opened window is not closed.
Solution:   Close the window and go back to the original one. (Norio Takagi,
            Hirohito Higashi)
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index d2e4272..b7f41a7 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -34,4 +34,37 @@
   set ls&vim
 endfunc
 
+function Test_window_cmd_wincmd_gf()
+  let fname = 'test_gf.txt'
+  let swp_fname = '.' . fname . '.swp'
+  call writefile([], fname)
+  call writefile([], swp_fname)
+  function s:swap_exists()
+    let v:swapchoice = s:swap_choice
+  endfunc
+  augroup test_window_cmd_wincmd_gf
+    autocmd!
+    exec "autocmd SwapExists " . fname . " call s:swap_exists()"
+  augroup END
+
+  call setline(1, fname)
+  " (E)dit anyway
+  let s:swap_choice = 'e'
+  wincmd gf
+  call assert_equal(2, tabpagenr())
+  call assert_equal(fname, bufname("%"))
+  quit!
+
+  " (Q)uit
+  let s:swap_choice = 'q'
+  wincmd gf
+  call assert_equal(1, tabpagenr())
+  call assert_notequal(fname, bufname("%"))
+  new | only!
+
+  call delete(fname)
+  call delete(swp_fname)
+  augroup! test_window_cmd_wincmd_gf
+endfunc
+
 " vim: sw=2 et
diff --git a/src/version.c b/src/version.c
index 2df5c36..5e224e8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1956,
+/**/
     1955,
 /**/
     1954,
diff --git a/src/window.c b/src/window.c
index 2dc2554..c3cd7a2 100644
--- a/src/window.c
+++ b/src/window.c
@@ -475,6 +475,8 @@
 		ptr = grab_file_name(Prenum1, &lnum);
 		if (ptr != NULL)
 		{
+		    tabpage_T	*oldtab = curtab;
+		    win_T	*oldwin = curwin;
 # ifdef FEAT_GUI
 		    need_mouse_correct = TRUE;
 # endif
@@ -482,9 +484,15 @@
 		    if (win_split(0, 0) == OK)
 		    {
 			RESET_BINDING(curwin);
-			(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
-							   ECMD_HIDE, NULL);
-			if (nchar == 'F' && lnum >= 0)
+			if (do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
+						   ECMD_HIDE, NULL) == FAIL)
+			{
+			    /* Failed to open the file, close the window
+			     * opened for it. */
+			    win_close(curwin, FALSE);
+			    goto_tabpage_win(oldtab, oldwin);
+			}
+			else if (nchar == 'F' && lnum >= 0)
 			{
 			    curwin->w_cursor.lnum = lnum;
 			    check_cursor_lnum();