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
 

-- 


Reply via email to