summaryrefslogtreecommitdiffstats
path: root/player/lua/defaults.lua
diff options
context:
space:
mode:
Diffstat (limited to 'player/lua/defaults.lua')
-rw-r--r--player/lua/defaults.lua27
1 files changed, 25 insertions, 2 deletions
diff --git a/player/lua/defaults.lua b/player/lua/defaults.lua
index 72920cea67..95f8952f5d 100644
--- a/player/lua/defaults.lua
+++ b/player/lua/defaults.lua
@@ -547,12 +547,35 @@ end
local hook_table = {}
+local hook_mt = {}
+hook_mt.__index = hook_mt
+
+function hook_mt.cont(t)
+ if t._id == nil then
+ mp.msg.error("hook already continued")
+ else
+ mp.raw_hook_continue(t._id)
+ t._id = nil
+ end
+end
+
+function hook_mt.defer(t)
+ t._defer = true
+end
+
mp.register_event("hook", function(ev)
local fn = hook_table[tonumber(ev.id)]
+ local hookobj = {
+ _id = ev.hook_id,
+ _defer = false,
+ }
+ setmetatable(hookobj, hook_mt)
if fn then
- fn()
+ fn(hookobj)
+ end
+ if (not hookobj._defer) and hookobj._id ~= nil then
+ hookobj:cont()
end
- mp.raw_hook_continue(ev.hook_id)
end)
function mp.add_hook(name, pri, cb)