diff options
-rw-r--r-- | src/nvim/decoration_provider.c | 3 | ||||
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 20 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/nvim/decoration_provider.c b/src/nvim/decoration_provider.c index 902e995ad5..fe92f820b4 100644 --- a/src/nvim/decoration_provider.c +++ b/src/nvim/decoration_provider.c @@ -118,6 +118,8 @@ void decor_providers_start(void) ADD_C(args, INTEGER_OBJ((int)display_tick)); bool active = decor_provider_invoke((int)i, "start", p->redraw_start, args, true); 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); ADD_C(args, INTEGER_OBJ((int)display_tick)); decor_provider_invoke((int)i, "end", p->redraw_end, args, true); - kv_A(decor_providers, i).state = kDecorProviderActive; } } decor_check_to_be_deleted(); diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index 307f750175..2f5ef790f1 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -838,6 +838,26 @@ describe('decorations providers', function() | ]]) 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) describe('decoration_providers', function() |