On Sun, Nov 8, 2009 at 15:09, Gustavo Sverzut Barbieri <barbi...@profusion.mobi> wrote: > On Sun, Nov 8, 2009 at 11:50 AM, Enlightenment SVN > <no-re...@enlightenment.org> wrote: > > > + if not callable(callback): > + raise TypeError("callback is not callable") > > you should do this check when you register the callback, not when you > call it. Compare: you add one item at most 1 time, but call it > multiple (N) times. Of course!
>> - self.item = elm_list_item_append(list.obj, label, icon_obj, >> end_obj, _list_callback, NULL) >> - self._create_mapping(callback, data) >> + self.cbt = (list, callback, data, self) >> + self.item = elm_list_item_append(list.obj, label, icon_obj, end_obj, >> + _list_callback, <void*>self.cbt) > > I did not look this carefully, but I bet this is wrong, specially: > >> + self.cbt = (list, callback, data, self) > > > what's the use of it? If you append 2 times with different parameters, > just the last one is kept... worse than this, the old value pointer by > elm_list_item_append (C/internal) is the object that will be garbage > collected after you assign the new object and make the old loose its > last reference. > > The best solution here is to create the Python object that reference > Python function and parameters (your cbt), then Py_INCREF it, then set > it as data for C > elm_list_item_{append,prepend,insert_before,intert_after}(), then set > it as data elm_list_item_del_cb_set(), where you'd Py_DECREF. > > Of course we need to make sure we're calling del cb for all paths in > Elm_list... (on object destroy, clear, etc). I've rewritten it, not exactly as you said, but i think it's ok. > Also, we need to review this in whole Elementary... it was complicate > to get right for evas/edje/ecore, but they are correct now... you need > to check them or ask me, if we start to spread minor errors like this > then we'll have hard time tracking these beasts after some time. I'll try to keep that in mind. -- Boris 'billiob' Faure ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel