davemds pushed a commit to branch master.

http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=9b5b526620c80c78b6c3391bc92163aa570b2bd3

commit 9b5b526620c80c78b6c3391bc92163aa570b2bd3
Author: Dave Andreoli <d...@gurumeditation.it>
Date:   Mon Aug 1 17:09:22 2016 +0200

    Ecore.Idlers are no more an Eo object in C :(
    
    #TheWhiteRabbitIsDead
---
 efl/ecore/efl.ecore_idler.pxi | 50 ++++++++++++++++++++++++++++++++++---------
 include/efl.ecore.pxd         |  8 ++++---
 2 files changed, 45 insertions(+), 13 deletions(-)

diff --git a/efl/ecore/efl.ecore_idler.pxi b/efl/ecore/efl.ecore_idler.pxi
index bb3bed6..4373a74 100644
--- a/efl/ecore/efl.ecore_idler.pxi
+++ b/efl/ecore/efl.ecore_idler.pxi
@@ -59,22 +59,38 @@ cdef class Idler(Eo):
         self.func = func
         self.args = args
         self.kargs = kargs
-        self._set_obj(ecore_idler_add(_ecore_task_cb, <void *>self))
+
+        # From efl 1.18 idlers are no more Eo objects in C, thus
+        # we cannot use Eo.obj and _set_obj() anymore :(
+        # self._set_obj(ecore_idler_add(_ecore_task_cb, <void *>self))
+        self.obj2 = ecore_idler_add(_ecore_task_cb, <void *>self)
+        Py_INCREF(self)
 
     def __str__(self):
-        return "%s Idler(func=%s, args=%s, kargs=%s)" % (Eo.__repr__(self),
-               self.func, self.args, self.kargs)
+        return "Idler(obj=%#x, func=%s, args=%s, kargs=%s)" % (
+                      <uintptr_t>self.obj2, self.func, self.args, self.kargs)
 
     def __repr__(self):
-        return "%s Idler(func=%s, args=%s, kargs=%s)" % (Eo.__repr__(self),
-                self.func, self.args, self.kargs)
+        return "Idler(obj=%#x, func=%s, args=%s, kargs=%s)" % (
+                      <uintptr_t>self.obj2, self.func, self.args, self.kargs)
 
     cpdef bint _task_exec(self) except *:
         return self.func(*self.args, **self.kargs)
 
+    def is_deleted(self):
+        """Check if the object has been deleted thus leaving the object 
shallow.
+
+        :return: True if the object has been deleted yet, False otherwise.
+        :rtype: bool
+
+        """
+        return bool(self.obj2 == NULL)
+
     def delete(self):
         """Stop callback emission and free internal resources."""
-        ecore_idler_del(self.obj)
+        ecore_idler_del(self.obj2)
+        self.obj2 = NULL
+        Py_DECREF(self)
 
     def stop(self):
         """Alias for stop()."""
@@ -126,11 +142,18 @@ cdef class IdleEnterer(Idler):
         self.func = func
         self.args = args
         self.kargs = kargs
-        self._set_obj(ecore_idle_enterer_add(_ecore_task_cb, <void *>self))
+
+        # From efl 1.18 idlers are no more Eo objects in C, thus
+        # we cannot use Eo.obj and _set_obj() anymore :(
+        # self._set_obj(ecore_idle_enterer_add(_ecore_task_cb, <void *>self))
+        self.obj2 = ecore_idle_enterer_add(_ecore_task_cb, <void *>self)
+        Py_INCREF(self)
 
     def delete(self):
         """Stop callback emission and free internal resources."""
-        ecore_idle_enterer_del(self.obj)
+        ecore_idle_enterer_del(self.obj2)
+        self.obj2 = NULL
+        Py_DECREF(self)
 
 
 cdef class IdleExiter(Idler):
@@ -173,11 +196,18 @@ cdef class IdleExiter(Idler):
         self.func = func
         self.args = args
         self.kargs = kargs
-        self._set_obj(ecore_idle_exiter_add(_ecore_task_cb, <void *>self))
+        
+        # From efl 1.18 idlers are no more Eo objects in C, thus
+        # we cannot use Eo.obj and _set_obj() anymore :(
+        # self._set_obj(ecore_idle_exiter_add(_ecore_task_cb, <void *>self))
+        self.obj2 = ecore_idle_exiter_add(_ecore_task_cb, <void *>self)
+        Py_INCREF(self)
 
     def delete(self):
         """Stop callback emission and free internal resources."""
-        ecore_idle_exiter_del(self.obj)
+        ecore_idle_exiter_del(self.obj2)
+        self.obj2 = NULL
+        Py_DECREF(self)
 
 
 def idler_add(func, *args, **kargs):
diff --git a/include/efl.ecore.pxd b/include/efl.ecore.pxd
index 3e0003e..c9cad96 100644
--- a/include/efl.ecore.pxd
+++ b/include/efl.ecore.pxd
@@ -109,9 +109,9 @@ cdef extern from "Ecore.h":
     ctypedef cEo Ecore_Timer
     ctypedef struct Ecore_Animator
     ctypedef cEo Ecore_Poller
-    ctypedef cEo Ecore_Idler
-    ctypedef cEo Ecore_Idle_Enterer
-    ctypedef cEo Ecore_Idle_Exiter
+    ctypedef struct Ecore_Idler
+    ctypedef struct Ecore_Idle_Enterer
+    ctypedef struct Ecore_Idle_Exiter
 
     ctypedef struct Ecore_Event_Handler
     ctypedef struct Ecore_Event
@@ -321,6 +321,8 @@ cdef class Poller(Eo):
 cdef class Idler(Eo):
     cdef readonly object func, args, kargs
     cpdef bint _task_exec(self) except *
+    # we cannot use Eo.obj here because idlers are no more eo objects in C
+    cdef Ecore_Idler *obj2
 
 
 cdef class IdleEnterer(Idler):

-- 


Reply via email to