summaryrefslogtreecommitdiff
path: root/lua/clever_f/feedback_service.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/clever_f/feedback_service.lua')
-rw-r--r--lua/clever_f/feedback_service.lua20
1 files changed, 17 insertions, 3 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua
index 061ed1d..c5c9fc8 100644
--- a/lua/clever_f/feedback_service.lua
+++ b/lua/clever_f/feedback_service.lua
@@ -461,11 +461,15 @@ function FeedbackService:build_persistent(specification)
}
end
-local function remove_target_overlays(record, window)
- local resources = record.transitions:ClearTargetOverlays(window)
+local function release_target_overlays(record, resources)
for _, resource in ipairs(resources) do
record.host:remove_highlight(resource.identity)
end
+end
+
+local function remove_target_overlays(record, window)
+ local resources = record.transitions:ClearTargetOverlays(window)
+ release_target_overlays(record, resources)
return resources
end
@@ -489,10 +493,20 @@ function FeedbackService:cursor_moved_decision()
}
end
+local function release_finalizers(record, resources)
+ for _, resource in ipairs(resources) do
+ record.host:remove_event_registration(resource.identity)
+ end
+end
+
function FeedbackService:full_finalize(window)
local record = service_records[self]
window = window or record.host:read_window()
- return record.transitions:FullFinalization(window)
+ local cleanup = record.transitions:FullFinalization(window)
+ release_finalizers(record, cleanup.finalizers)
+ release_target_overlays(record, cleanup.target_overlays)
+ record.owned_finalizer = nil
+ return cleanup
end
function FeedbackService:handle_finalizer_event(name, payload)