aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/window.c8
-rw-r--r--test/functional/ui/float_spec.lua113
2 files changed, 117 insertions, 4 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c
index f9a0839702..c25322c162 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -2313,10 +2313,10 @@ int win_close(win_T *win, bool free_buf)
if (!win->w_floating) {
wp = frame2win(win_altframe(win, NULL));
} else {
- if (win_valid(prevwin)) {
+ if (win_valid(prevwin) && prevwin != win) {
wp = prevwin;
} else {
- wp = curtab->tp_firstwin;
+ wp = firstwin;
}
}
@@ -2595,10 +2595,10 @@ win_free_mem (
wp = winframe_remove(win, dirp, tp);
xfree(frp);
} else {
- if (win_valid(prevwin)) {
+ if (win_valid(prevwin) && prevwin != win) {
wp = prevwin;
} else {
- wp = curtab->tp_firstwin;
+ wp = firstwin;
}
}
win_free(win, tp);
diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua
index 4477573cff..79b1da5a48 100644
--- a/test/functional/ui/float_spec.lua
+++ b/test/functional/ui/float_spec.lua
@@ -2681,6 +2681,119 @@ describe('floating windows', function()
eq(exited, true)
end)
+ it(':quit two floats in a row', function()
+ -- enter first float
+ feed('<c-w><c-w>')
+ -- enter second float
+ meths.open_win(0, true, {relative='editor', width=20, height=2, row=4, col=8})
+ if multigrid then
+ screen:expect{grid=[[
+ ## grid 1
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ |
+ ## grid 2
+ x |
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ ## grid 3
+ {1:y }|
+ {2:~ }|
+ ## grid 4
+ {1:^y }|
+ {2:~ }|
+ ]], float_pos={
+ [3] = {{id = 1001}, "NW", 1, 2, 5, true},
+ [4] = {{id = 1002}, "NW", 1, 4, 8, true}
+ }}
+ else
+ screen:expect([[
+ x |
+ {0:~ }|
+ {0:~ }{1:y }{0: }|
+ {0:~ }{2:~ }{0: }|
+ {0:~ }{1:^y }{0: }|
+ {0:~ }{2:~ }{0: }|
+ |
+ ]])
+ end
+
+ feed(':quit<cr>')
+ if multigrid then
+ screen:expect{grid=[[
+ ## grid 1
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ {5:[No Name] [+] }|
+ :quit |
+ ## grid 2
+ x |
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ ## grid 3
+ {1:^y }|
+ {2:~ }|
+ ]], float_pos={
+ [3] = {{id = 1001}, "NW", 1, 2, 5, true},
+ }}
+ else
+ screen:expect([[
+ x |
+ {0:~ }|
+ {0:~ }{1:^y }{0: }|
+ {0:~ }{2:~ }{0: }|
+ {0:~ }|
+ {5:[No Name] [+] }|
+ :quit |
+ ]])
+ end
+
+ feed(':quit<cr>')
+ if multigrid then
+ screen:expect([[
+ ## grid 1
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ [2:----------------------------------------]|
+ :quit |
+ ## grid 2
+ ^x |
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ ]])
+ else
+ screen:expect([[
+ ^x |
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ :quit |
+ ]])
+ end
+
+ eq(2, eval('1+1'))
+ end)
+
it("o (:only) non-float", function()
feed("<c-w>o")
if multigrid then