fix(unhide): close floating windows first (#25318)

This commit is contained in:
zeertzjq 2023-09-23 14:42:59 +08:00 committed by GitHub
parent c88bb658ce
commit c0a29931e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 3 deletions

View File

@ -3616,8 +3616,11 @@ void ex_buffer_all(exarg_T *eap)
} }
while (true) { while (true) {
tpnext = curtab->tp_next; tpnext = curtab->tp_next;
for (wp = firstwin; wp != NULL; wp = wpnext) { // Try to close floating windows first
wpnext = wp->w_next; for (wp = lastwin->w_floating ? lastwin : firstwin; wp != NULL; wp = wpnext) {
wpnext = wp->w_floating
? wp->w_prev->w_floating ? wp->w_prev : firstwin
: (wp->w_next == NULL || wp->w_next->w_floating) ? NULL : wp->w_next;
if ((wp->w_buffer->b_nwindows > 1 if ((wp->w_buffer->b_nwindows > 1
|| ((cmdmod.cmod_split & WSP_VERT) || ((cmdmod.cmod_split & WSP_VERT)
? wp->w_height + wp->w_hsep_height + wp->w_status_height < Rows - p_ch ? wp->w_height + wp->w_hsep_height + wp->w_status_height < Rows - p_ch
@ -3632,7 +3635,7 @@ void ex_buffer_all(exarg_T *eap)
} }
// Just in case an autocommand does something strange with // Just in case an autocommand does something strange with
// windows: start all over... // windows: start all over...
wpnext = firstwin; wpnext = lastwin->w_floating ? lastwin : firstwin;
tpnext = first_tabpage; tpnext = first_tabpage;
open_wins = 0; open_wins = 0;
} else { } else {

View File

@ -522,6 +522,16 @@ describe('float window', function()
eq(5, meths.get_option_value('scroll', {win=float_win.id})) eq(5, meths.get_option_value('scroll', {win=float_win.id}))
end) end)
it(':unhide works when there are floating windows #17797', function()
local float_opts = {relative = 'editor', row = 1, col = 1, width = 10, height = 10}
local w0 = curwin()
meths.open_win(0, false, float_opts)
meths.open_win(0, false, float_opts)
eq(3, #meths.list_wins())
command('unhide')
eq({ w0 }, meths.list_wins())
end)
describe('with only one tabpage,', function() describe('with only one tabpage,', function()
local float_opts = {relative = 'editor', row = 1, col = 1, width = 1, height = 1} local float_opts = {relative = 'editor', row = 1, col = 1, width = 1, height = 1}
local old_buf, old_win local old_buf, old_win