mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
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)
This commit is contained in:
@@ -2147,6 +2147,19 @@ invoke_popup_callback(win_T *wp, typval_T *result)
|
|||||||
clear_tv(&rettv);
|
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.
|
* 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;
|
break;
|
||||||
if (owp != NULL)
|
if (owp != NULL)
|
||||||
win_enter(owp, FALSE);
|
win_enter(owp, FALSE);
|
||||||
else if (win_valid(prevwin) && wp != prevwin)
|
|
||||||
win_enter(prevwin, FALSE);
|
|
||||||
else
|
else
|
||||||
win_enter(firstwin, FALSE);
|
back_to_prevwin(wp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -2583,7 +2594,7 @@ popup_close(int id, int force)
|
|||||||
error_for_popup_window();
|
error_for_popup_window();
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
win_enter(firstwin, FALSE);
|
back_to_prevwin(wp);
|
||||||
}
|
}
|
||||||
if (prev == NULL)
|
if (prev == NULL)
|
||||||
first_popupwin = wp->w_next;
|
first_popupwin = wp->w_next;
|
||||||
@@ -2620,7 +2631,7 @@ popup_close_tabpage(tabpage_T *tp, int id, int force)
|
|||||||
error_for_popup_window();
|
error_for_popup_window();
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
win_enter(firstwin, FALSE);
|
back_to_prevwin(wp);
|
||||||
}
|
}
|
||||||
if (prev == NULL)
|
if (prev == NULL)
|
||||||
*root = wp->w_next;
|
*root = wp->w_next;
|
||||||
|
@@ -2461,6 +2461,23 @@ func Test_popupwin_terminal_buffer()
|
|||||||
call assert_equal(origwin, win_getid())
|
call assert_equal(origwin, win_getid())
|
||||||
endfunc
|
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()
|
func Test_popupwin_with_buffer_and_filter()
|
||||||
new Xwithfilter
|
new Xwithfilter
|
||||||
call setline(1, range(100))
|
call setline(1, range(100))
|
||||||
|
@@ -754,6 +754,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
984,
|
||||||
/**/
|
/**/
|
||||||
983,
|
983,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user