# HG changeset patch # User Bram Moolenaar # Date 1559317506 -7200 # Node ID 2b00163053cdd1eb5a09c01c34fa586dbdd09192 # Parent 2d5b340e1670a7b47d4d461060e93dbda34ad77d patch 8.1.1433: win_execute() may leave popup window focused commit https://github.com/vim/vim/commit/eea169983654de8a502c2c6521696a4b504abfa3 Author: Bram Moolenaar Date: Fri May 31 17:34:48 2019 +0200 patch 8.1.1433: win_execute() may leave popup window focused Problem: Win_execute() may leave popup window focused, eventually leading to a crash. (Bjorn Linse) Solution: When previous window was closed, go to the first window. diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -105,6 +105,14 @@ func Test_popup_with_syntax_setbufvar() call delete('XtestPopup') endfunc +func Test_win_execute_closing_curwin() + split + let winid = popup_create('some text', {}) + call win_execute(winid, winnr() .. "close") + call assert_equal(1, winnr()) + popupclear +endfunc + func Test_popup_with_wrap() if !CanRunVimInTerminal() return diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -768,6 +768,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1433, +/**/ 1432, /**/ 1431, diff --git a/src/window.c b/src/window.c --- a/src/window.c +++ b/src/window.c @@ -6573,6 +6573,12 @@ restore_win_noblock( curwin = save_curwin; curbuf = curwin->w_buffer; } +#ifdef FEAT_TEXT_PROP + else if (bt_popup(curwin->w_buffer)) + // original window was closed and now we're in a popup window: Go + // to the first valid window. + win_goto(firstwin); +#endif } /*