q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=e55ecf6d4c830dc0a4c1d9612bd4f71e55043929
commit e55ecf6d4c830dc0a4c1d9612bd4f71e55043929 Author: Daniel Kolesa <d.kol...@samsung.com> Date: Tue Mar 3 16:08:22 2015 +0000 elua: initial better callback system with indirection --- src/bindings/luajit/eo.lua | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/bindings/luajit/eo.lua b/src/bindings/luajit/eo.lua index dec4ec9..856de56 100644 --- a/src/bindings/luajit/eo.lua +++ b/src/bindings/luajit/eo.lua @@ -147,6 +147,13 @@ eo_event_del = ffi.cast("Eo_Event_Cb", function(data, obj, desc, einfo) end) eo_event_cb = ffi.cast("Eo_Event_Cb", function(data, obj, desc, einfo) + local addr = eo_obj_addr_get(obj) + local cbs = callbacks[addr] + assert(cbs) + local cidx = tonumber(ffi.cast("intptr_t", cbs)) + local fun = cbs[cidx] + assert(fun) + return fun() ~= false end) local connect = function(self, ename, func, priority) @@ -156,11 +163,17 @@ local connect = function(self, ename, func, priority) end local cl = eo_classes["Eo_Base"] M.__do_start(self, cl) + -- add the callback to the respective array + local addr = eo_obj_addr_get(self) + local cbs = callbacks[addr] + if not cbs then + cbs = {} + callbacks[addr] = cbs + end + local cidx = #cbs + 1 + cbs[cidx] = func eo.eo_event_callback_priority_add(ev, priority or 0, - function(data, obj, desc, einfo) - return func(obj, einfo) ~= false - end, - nil) + eo_event_cb, ffi.cast("void *", cidx)) M.__do_end() end --