On Tue, 05 Feb 2013 11:22:37 +0000 Tom Hacohen <[email protected]> wrote:
> On 05/02/13 09:50, Davide Andreoli wrote:
> > Hi,
> > I'm reposting this as I don't get any reply...maybe Tom missed it ;)
>
> I did miss your previous mail, good you've reposted it.
I remember replying to that original one, not sure if others did.
Might be worthwhile tracking it down.
I'll mark this to be read later, I'm busy tonight.
> >
> >
> >
> > After some more Eo tests I have this example:
> >
> >
> > void my_win_del(void *data, Evas_Object *obj, void *event_info)
> > {
> > elm_exit();
> > }
> >
> > EAPI_MAIN int
> > elm_main(int argc, char **argv)
> > {
> > Evas_Object *win, *r;
> >
> > win = eo_add_custom(ELM_OBJ_WIN_CLASS, NULL,
> > elm_obj_win_constructor("main", ELM_WIN_BASIC));
> > // eo_unref(win);
> >
> > elm_win_title_set(win, "Elementary Tests");
> > evas_object_smart_callback_add(win, "delete,request",
> > my_win_del, NULL); evas_object_resize(win, 320, 320);
> > evas_object_show(win);
> >
> > r = eo_add(EVAS_OBJ_RECTANGLE_CLASS,
> > evas_object_evas_get(win)); // eo_unref(r);
> > evas_object_resize(r, 100, 100);
> > evas_object_show(r);
> >
> > eo_del(r);
> >
> > elm_run();
> > elm_shutdown();
> >
> > return 0;
> > }
> > ELM_MAIN()
>
> No, spank. eo_del means your delete the object, you don't want that.
> It should be:
> void my_win_del(void *data, Evas_Object *obj, void *event_info)
>
> {
>
> elm_exit();
>
> }
>
>
>
> EAPI_MAIN int
>
> elm_main(int argc, char **argv)
>
> {
>
> Evas_Object *win, *r;
>
>
>
> win = eo_add_custom(ELM_OBJ_WIN_CLASS, NULL,
>
> elm_obj_win_constructor("main", ELM_WIN_BASIC));
>
>
>
> elm_win_title_set(win, "Elementary Tests");
>
> evas_object_smart_callback_add(win, "delete,request",
> my_win_del, NULL);
> evas_object_resize(win, 320, 320);
>
> evas_object_show(win);
>
>
>
> r = eo_add(EVAS_OBJ_RECTANGLE_CLASS, win);
>
> evas_object_resize(r, 100, 100);
>
> evas_object_show(r);
>
> eo_unref(r);
> r = NULL; // optional but recommended.
>
>
>
> elm_run();
>
>
>
> eo_unref(win);
>
> elm_shutdown();
>
>
>
> return 0;
>
> }
>
> ELM_MAIN()
>
> Or at pastebin:
> http://pastebin.com/5ktWadGE
>
> Please take a look at the changes to the:
> r = eo_add(EVAS_OBJ_RECTANGLE_CLASS, win);
> line.
>
> It's just ref counting, ref when you hold a reference, unref when you
> are done with it. The parent holds a ref to it's children, so you can
> unref once you don't really need the reference, you do eo_del in
> order to unref and detach from the parent (i.e, killing the object)
> >
> >
> > Problems:
> > - with the 2 eo_unref() calls commented out the app freeze (without
> > any warnings) on
> > elm_shutdown(). Probably because not all objs has been deleted.
> > - with the 2 eo_unref() calls DEcommented the shutdown is ok but
> > then the oe_del(r) is
> > causing the warning:
> > ERR<9335>:eo lib/eo/eo.c:1306 _eo_unref() Object 0x1452fe0 already
> > deleted. ERR<9335>:eo lib/eo/eo.c:1306 _eo_unref() Object 0x1452fe0
> > already deleted.
> >
> > Thoughts:
> > - doing the unref() just after the eo_add() does not have any sense
> > to me.
>
> The only reasoning you should apply to using unref is: do I want the
> ref? The parent refs the child anyway, so if you don't need the ref,
> you need to unref (after you really stopped manipulating the object!).
> > - deleting the win using eo_del() seems not to delete the child objs
>
> It does, as long as you unref your references to them, otherwise,
> they are retained as long as you keep your refs. That's how
> ref-counting works.
>
> > - forcing the user to delete ALL the created object before the
> > shutdown is an hard
> > requirement; can work with simple examples but not in real life
> > applications.
>
> It's not deleting, it's just a matter of controlling your refs. It's
> like claiming asking a user to call free on every allocation is an
> hard requirement.
>
> > - using the new api or the old one cause different behavior :/
>
> No it does not. APIs were added that behave differently than the old
> APIs and they behave differently, if they would have behaved the
> same, there would have been no point in creating the new API.
>
> --
> Tom.
>
>
> ------------------------------------------------------------------------------
> Free Next-Gen Firewall Hardware Offer
> Buy your Sophos next-gen firewall before the end March 2013
> and get the hardware for free! Learn more.
> http://p.sf.net/sfu/sophos-d2d-feb
> _______________________________________________
> enlightenment-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
--
A big old stinking pile of genius that no one wants
coz there are too many silver coated monkeys in the world.
signature.asc
Description: PGP signature
------------------------------------------------------------------------------ Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
