summaryrefslogtreecommitdiffstats
path: root/player/javascript/defaults.js
diff options
context:
space:
mode:
Diffstat (limited to 'player/javascript/defaults.js')
-rw-r--r--player/javascript/defaults.js11
1 files changed, 9 insertions, 2 deletions
diff --git a/player/javascript/defaults.js b/player/javascript/defaults.js
index 9d53f2d7a3..2435390b87 100644
--- a/player/javascript/defaults.js
+++ b/player/javascript/defaults.js
@@ -126,10 +126,17 @@ function dispatch_message(ev) {
var hooks = []; // array of callbacks, id is index+1
function run_hook(ev) {
+ var state = 0; // 0:initial, 1:deferred, 2:continued
+ function do_cont() { return state = 2, mp._hook_continue(ev.hook_id) }
+
+ function err() { return mp.msg.error("hook already continued"), undefined }
+ function usr_defer() { return state == 2 ? err() : (state = 1, true) }
+ function usr_cont() { return state == 2 ? err() : do_cont() }
+
var cb = ev.id > 0 && hooks[ev.id - 1];
if (cb)
- cb();
- mp._hook_continue(ev.hook_id);
+ cb({ defer: usr_defer, cont: usr_cont });
+ return state == 0 ? do_cont() : true;
}
mp.add_hook = function add_hook(name, pri, fn) {