From: Daniel Kolesa Date: Tue, 3 Mar 2015 16:08:22 +0000 (+0000) Subject: elua: initial better callback system with indirection X-Git-Tag: v1.14.0-alpha1~329 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e55ecf6d4c830dc0a4c1d9612bd4f71e55043929;p=platform%2Fupstream%2Fefl.git elua: initial better callback system with indirection --- 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