# HG changeset patch # User Matthew Wild # Date 1337381582 -3600 # Node ID 98ff89ab5d1db8cd2fe98e6df88f6284eaf02e9d # Parent 6c8074f47ca48c6320e869211f5261e82d638148 moduleapi, modulemanager: Re-structure module.event_handlers so that the same handler can harmlessly handle multiple events (thanks Zash) diff -r 6c8074f47ca4 -r 98ff89ab5d1d core/moduleapi.lua --- a/core/moduleapi.lua Fri May 18 04:24:33 2012 +0100 +++ b/core/moduleapi.lua Fri May 18 23:53:02 2012 +0100 @@ -70,7 +70,12 @@ end function api:hook_object_event(object, event, handler, priority) - self.event_handlers[handler] = { name = event, priority = priority, object = object }; + local handlers = self.event_handlers[event]; + if not handlers then + handlers = {}; + self.event_handlers[event] = handlers; + end + handlers[event] = { handler = handler, priority = priority, object = object }; return object.add_handler(event, handler, priority); end diff -r 6c8074f47ca4 -r 98ff89ab5d1d core/modulemanager.lua --- a/core/modulemanager.lua Fri May 18 04:24:33 2012 +0100 +++ b/core/modulemanager.lua Fri May 18 23:53:02 2012 +0100 @@ -91,8 +91,8 @@ end end - for handler, event in pairs(mod.module.event_handlers) do - event.object.remove_handler(event.name, handler); + for event, data in pairs(mod.module.event_handlers) do + data.object.remove_handler(event, data.handler); end if mod.module.items then -- remove items