mirror of
https://github.com/britzl/monarch.git
synced 2025-09-28 02:22:20 +02:00
Track when callbacks are invoked so that we can ensure that all screens are shown/hidden before invoking callbacks
This commit is contained in:
39
monarch/utils/callback_tracker.lua
Normal file
39
monarch/utils/callback_tracker.lua
Normal file
@@ -0,0 +1,39 @@
|
||||
local M = {}
|
||||
|
||||
|
||||
function M.create()
|
||||
local instance = {}
|
||||
|
||||
local callback = nil
|
||||
local callback_count = 0
|
||||
|
||||
--- Create a callback function and track when it is done
|
||||
-- @return Callback function
|
||||
function instance.track()
|
||||
callback_count = callback_count + 1
|
||||
return function()
|
||||
callback_count = callback_count - 1
|
||||
if callback_count == 0 and callback then
|
||||
callback()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Call a function when all callbacks have been triggered
|
||||
-- @param cb Function to call when all
|
||||
function instance.when_done(cb)
|
||||
callback = cb
|
||||
if callback_count == 0 then
|
||||
callback()
|
||||
end
|
||||
end
|
||||
|
||||
return instance
|
||||
end
|
||||
|
||||
|
||||
return setmetatable(M, {
|
||||
__call = function(_, ...)
|
||||
return M.create(...)
|
||||
end
|
||||
})
|
Reference in New Issue
Block a user