From ab176ce982ac67f7cfcfa1fa885f9117ef8bbafe Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 15 Jun 2020 21:19:08 +0200 Subject: [PATCH] patch 8.2.0984: not using previous window when closing a shell popup window Problem: Not using previous window when closing a shell popup window. Solution: Use "prevwin" if it was set. (closes #6267) --- src/popupwin.c | 21 ++++++++++++++++----- src/testdir/test_popupwin.vim | 17 +++++++++++++++++ src/version.c | 2 ++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/popupwin.c b/src/popupwin.c index fbda48bf7..d144be73f 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -2147,6 +2147,19 @@ invoke_popup_callback(win_T *wp, typval_T *result) clear_tv(&rettv); } +/* + * 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. */ @@ -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 1e7d5eed1..2188c2c6a 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 7d7b965f0..91ae5ea1a 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 984, /**/ 983, /**/ -- 2.50.1