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.lua24
1 files changed, 20 insertions, 4 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua
index 2b100a4..084b30a 100644
--- a/lua/clever_f/feedback_service.lua
+++ b/lua/clever_f/feedback_service.lua
@@ -23,6 +23,7 @@ local OVERLAY_PRIORITIES = {
local service_records = setmetatable({}, { __mode = "k" })
local cursor_lease_records = setmetatable({}, { __mode = "k" })
+local temporary_release_records = setmetatable({}, { __mode = "k" })
local FEATURE_GROUPS = {
"CleverFCursor",
@@ -186,8 +187,8 @@ function CursorPresentationLease:release()
if not record.active then
return false
end
- record.host:restore_cursor_presentation(record.identity)
record.active = false
+ record.host:restore_cursor_presentation(record.identity)
return true
end
@@ -242,12 +243,14 @@ function FeedbackService:create_direct_markers(positions, window)
priority = M.overlay_priority("CleverFDirect"),
})
record.transitions:AddTemporaryOverlay(identity, window, "CleverFDirect")
- return {
+ local resource = {
identity = identity,
window = window,
group = "CleverFDirect",
positions = positions,
}
+ temporary_release_records[resource] = false
+ return resource
end
function FeedbackService:create_cursor_marker(position, window)
@@ -264,21 +267,34 @@ function FeedbackService:create_cursor_marker(position, window)
priority = M.overlay_priority("CleverFCursor"),
})
record.transitions:AddTemporaryOverlay(identity, window, "CleverFCursor")
- return {
+ local resource = {
identity = identity,
window = window,
group = "CleverFCursor",
position = position,
}
+ temporary_release_records[resource] = false
+ return resource
end
function FeedbackService:remove_temporary_overlay(resource)
if type(resource) ~= "table" or resource.identity == nil then
fail("temporary overlay resource must identify its highlight", 2)
end
+ if temporary_release_records[resource] == true then
+ return false
+ end
+ temporary_release_records[resource] = true
local record = service_records[self]
- local removed = record.host:remove_highlight(resource.identity)
+ local ok, removed = pcall(
+ record.host.remove_highlight,
+ record.host,
+ resource.identity
+ )
record.transitions:RemoveTemporaryOverlay(resource.identity, resource.window)
+ if not ok then
+ error(removed, 0)
+ end
return removed
end