mirror of
https://github.com/neovim/neovim
synced 2025-07-16 17:21:49 +00:00
fix(decor): enable decoration provider in on_start #33337
Problem: An on_win-disabled decoration provider is left disabled for
the on_buf callback during the next redraw (if the provider
does not subscribe to on_end).
Solution: Move re-activation of the provider from after the on_end
callback to before the on_start callback.
(cherry picked from commit ca16b54c86
)
This commit is contained in:
committed by
github-actions[bot]
parent
4c1121bd33
commit
6e51d39696
@ -118,6 +118,8 @@ void decor_providers_start(void)
|
|||||||
ADD_C(args, INTEGER_OBJ((int)display_tick));
|
ADD_C(args, INTEGER_OBJ((int)display_tick));
|
||||||
bool active = decor_provider_invoke((int)i, "start", p->redraw_start, args, true);
|
bool active = decor_provider_invoke((int)i, "start", p->redraw_start, args, true);
|
||||||
kv_A(decor_providers, i).state = active ? kDecorProviderActive : kDecorProviderRedrawDisabled;
|
kv_A(decor_providers, i).state = active ? kDecorProviderActive : kDecorProviderRedrawDisabled;
|
||||||
|
} else if (p->state != kDecorProviderDisabled) {
|
||||||
|
kv_A(decor_providers, i).state = kDecorProviderActive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -220,7 +222,6 @@ void decor_providers_invoke_end(void)
|
|||||||
MAXSIZE_TEMP_ARRAY(args, 1);
|
MAXSIZE_TEMP_ARRAY(args, 1);
|
||||||
ADD_C(args, INTEGER_OBJ((int)display_tick));
|
ADD_C(args, INTEGER_OBJ((int)display_tick));
|
||||||
decor_provider_invoke((int)i, "end", p->redraw_end, args, true);
|
decor_provider_invoke((int)i, "end", p->redraw_end, args, true);
|
||||||
kv_A(decor_providers, i).state = kDecorProviderActive;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
decor_check_to_be_deleted();
|
decor_check_to_be_deleted();
|
||||||
|
@ -838,6 +838,26 @@ describe('decorations providers', function()
|
|||||||
|
|
|
|
||||||
]])
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('decor provider is enabled again for next redraw after on_win disabled it', function()
|
||||||
|
exec_lua(function()
|
||||||
|
vim.api.nvim_set_decoration_provider(vim.api.nvim_create_namespace(''), {
|
||||||
|
on_win = function()
|
||||||
|
return false
|
||||||
|
end,
|
||||||
|
on_buf = function()
|
||||||
|
_G.did_buf = (_G.did_buf or 0) + 1
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
api.nvim_buf_set_lines(0, 0, -1, false, { 'foo' })
|
||||||
|
screen:expect([[
|
||||||
|
^foo |
|
||||||
|
{1:~ }|*6
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
eq(1, exec_lua('return _G.did_buf'))
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('decoration_providers', function()
|
describe('decoration_providers', function()
|
||||||
|
Reference in New Issue
Block a user