summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-06-15 21:19:08 +0200
committerBram Moolenaar <Bram@vim.org>2020-06-15 21:19:08 +0200
commitab176ce982ac67f7cfcfa1fa885f9117ef8bbafe (patch)
tree1e94db2dba298e4b79093b7ed50af934f9ff6ffe
parentad72350360d1a68d251da62a6e8610950926278c (diff)
patch 8.2.0984: not using previous window when closing a shell popup windowv8.2.0984
Problem: Not using previous window when closing a shell popup window. Solution: Use "prevwin" if it was set. (closes #6267)
-rw-r--r--src/popupwin.c21
-rw-r--r--src/testdir/test_popupwin.vim17
-rw-r--r--src/version.c2
3 files changed, 35 insertions, 5 deletions
diff --git a/src/popupwin.c b/src/popupwin.c
index fbda48bf74..d144be73fe 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -2148,6 +2148,19 @@ invoke_popup_callback(win_T *wp, typval_T *result)
}
/*
+ * Make "prevwin" the current window, unless it's equal to "wp".
+ * Otherwise make "firstwin" the current window.
+ */
+ static void
+back_to_prevwin(win_T *wp)
+{
+ if (win_valid(prevwin) && wp != prevwin)
+ win_enter(prevwin, FALSE);
+ else
+ win_enter(firstwin, FALSE);
+}
+
+/*
* Close popup "wp" and invoke any close callback for it.
*/
static void
@@ -2178,10 +2191,8 @@ popup_close_and_callback(win_T *wp, typval_T *arg)
break;
if (owp != NULL)
win_enter(owp, FALSE);
- else if (win_valid(prevwin) && wp != prevwin)
- win_enter(prevwin, FALSE);
else
- win_enter(firstwin, FALSE);
+ back_to_prevwin(wp);
}
}
#endif
@@ -2583,7 +2594,7 @@ popup_close(int id, int force)
error_for_popup_window();
return FAIL;
}
- win_enter(firstwin, FALSE);
+ back_to_prevwin(wp);
}
if (prev == NULL)
first_popupwin = wp->w_next;
@@ -2620,7 +2631,7 @@ popup_close_tabpage(tabpage_T *tp, int id, int force)
error_for_popup_window();
return FAIL;
}
- win_enter(firstwin, FALSE);
+ back_to_prevwin(wp);
}
if (prev == NULL)
*root = wp->w_next;
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 1e7d5eed10..2188c2c6a9 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -2461,6 +2461,23 @@ func Test_popupwin_terminal_buffer()
call assert_equal(origwin, win_getid())
endfunc
+func Test_popupwin_close_prevwin()
+ CheckFeature terminal
+
+ call assert_equal(1, winnr('$'))
+ split
+ wincmd b
+ call assert_equal(2, winnr())
+ let buf = term_start(&shell, #{hidden: 1})
+ call popup_create(buf, {})
+ call term_wait(buf, 100)
+ call popup_clear(1)
+ call assert_equal(2, winnr())
+
+ quit
+ exe 'bwipe! ' .. buf
+endfunc
+
func Test_popupwin_with_buffer_and_filter()
new Xwithfilter
call setline(1, range(100))
diff --git a/src/version.c b/src/version.c
index 7d7b965f03..91ae5ea1a5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 984,
+/**/
983,
/**/
982,