diff options
author | wm4 <wm4@nowhere> | 2014-02-14 13:48:08 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-02-14 14:01:27 +0100 |
commit | 414c4f93225652fe62541cf6fe37873776670544 (patch) | |
tree | 6319481a26d76aeb7d1ea4cd3de708637d408283 /player | |
parent | 99e38aee9aa52c9a06772d2a6bd5e5bdf17ebc79 (diff) | |
download | mpv-414c4f93225652fe62541cf6fe37873776670544.tar.bz2 mpv-414c4f93225652fe62541cf6fe37873776670544.tar.xz |
lua: make register_event() not overwrite previous event handler
Instead, chain them.
Note that there's no logic to prevent the other event handlers to be run
from an event handler (like it's popular in GUI toolkits), because I
think that's not very useful for this purpose.
Diffstat (limited to 'player')
-rw-r--r-- | player/lua/defaults.lua | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/player/lua/defaults.lua b/player/lua/defaults.lua index 1ab1c4264a..8efa8d6315 100644 --- a/player/lua/defaults.lua +++ b/player/lua/defaults.lua @@ -135,7 +135,12 @@ mp.keep_running = true local event_handlers = {} function mp.register_event(name, cb) - event_handlers[name] = cb + local list = event_handlers[name] + if not list then + list = {} + event_handlers[name] = list + end + list[#list + 1] = cb return mp.request_event(name, true) end @@ -180,9 +185,11 @@ _G.mp_event_loop = function() mp.suspend() more_events = (e.event ~= "none") if more_events then - local handler = event_handlers[e.event] - if handler then - handler(e) + local handlers = event_handlers[e.event] + if handlers then + for _, handler in ipairs(handlers) do + handler(e) + end end end end |