forked from enlightenment/efl
evas: Remove group_del override from smart clipped
This commit is contained in:
parent
230b234891
commit
e380dae4bc
|
@ -148,7 +148,6 @@ _edje_object_efl_canvas_group_group_del(Eo *obj, Edje *ed)
|
|||
_edje_block_violate(ed);
|
||||
ed->delete_me = 1;
|
||||
_edje_edjes = eina_inlist_remove(_edje_edjes, EINA_INLIST_GET(ed));
|
||||
evas_object_smart_data_set(obj, NULL);
|
||||
if (_edje_lua_script_only(ed)) _edje_lua_script_only_shutdown(ed);
|
||||
#ifdef HAVE_EPHYSICS
|
||||
/* clear physics world / shutdown ephysics */
|
||||
|
|
|
@ -408,7 +408,6 @@ _evas_box_efl_canvas_group_group_add(Eo *eo_obj, Evas_Object_Box_Data *priv)
|
|||
cso = evas_object_smart_data_get(eo_obj);
|
||||
priv->base = *cso;
|
||||
evas_object_smart_data_set(eo_obj, priv);
|
||||
free(cso);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
|
|
|
@ -49,6 +49,7 @@ struct _Evas_Smart_Data
|
|||
Eina_Bool update_boundingbox_needed : 1;
|
||||
Eina_Bool group_del_called : 1;
|
||||
Eina_Bool unclipped : 1; /* If true, NOT a smart_clipped object */
|
||||
Eina_Bool data_nofree : 1; /* If true, do NOT free the data */
|
||||
};
|
||||
|
||||
typedef struct
|
||||
|
@ -130,7 +131,13 @@ EAPI void
|
|||
evas_object_smart_data_set(Evas_Object *eo_obj, void *data)
|
||||
{
|
||||
EVAS_OBJECT_SMART_GET_OR_RETURN(eo_obj);
|
||||
o->data = data;
|
||||
if (o->data != data)
|
||||
{
|
||||
if (o->data && !o->data_nofree)
|
||||
free(o->data);
|
||||
o->data = data;
|
||||
o->data_nofree = EINA_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
|
@ -517,17 +524,21 @@ evas_object_smart_members_get_direct(const Evas_Object *eo_obj)
|
|||
return o->contained;
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_canvas_group_group_members_all_del_internal(Evas_Smart_Data *o)
|
||||
{;
|
||||
Evas_Object_Protected_Data *memobj;
|
||||
Eina_Inlist *itrn;
|
||||
EINA_INLIST_FOREACH_SAFE(o->contained, itrn, memobj)
|
||||
efl_del(memobj->object);
|
||||
o->group_del_called = EINA_TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
_efl_canvas_group_group_members_all_del(Evas_Object *eo_obj)
|
||||
{
|
||||
Evas_Smart_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
|
||||
Evas_Object_Protected_Data *memobj;
|
||||
Eina_Inlist *itrn;
|
||||
EINA_INLIST_FOREACH_SAFE(o->contained, itrn, memobj)
|
||||
{
|
||||
evas_object_del((Evas_Object *)((Evas_Object_Protected_Data *)memobj->object));
|
||||
}
|
||||
o->group_del_called = EINA_TRUE;
|
||||
_efl_canvas_group_group_members_all_del_internal(o);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -630,6 +641,8 @@ EOLIAN static void
|
|||
_efl_canvas_group_efl_object_destructor(Eo *eo_obj, Evas_Smart_Data *o)
|
||||
{
|
||||
efl_destructor(efl_super(eo_obj, MY_CLASS));
|
||||
if (o->data && !o->data_nofree)
|
||||
free(o->data);
|
||||
if (!o->group_del_called)
|
||||
{
|
||||
ERR("efl_canvas_group_del() was not called on this object: %p (%s)",
|
||||
|
@ -709,8 +722,21 @@ _efl_canvas_group_group_add(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED)
|
|||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_canvas_group_group_del(Eo *eo_obj EINA_UNUSED, Evas_Smart_Data *o EINA_UNUSED)
|
||||
_efl_canvas_group_group_del(Eo *eo_obj EINA_UNUSED, Evas_Smart_Data *o)
|
||||
{
|
||||
if (!o->unclipped)
|
||||
{
|
||||
Evas_Object_Smart_Clipped_Data *cso = o->data;
|
||||
Eo *clipper;
|
||||
|
||||
if (cso && cso->clipper)
|
||||
{
|
||||
clipper = cso->clipper;
|
||||
cso->clipper = NULL;
|
||||
efl_del(clipper);
|
||||
}
|
||||
_efl_canvas_group_group_members_all_del_internal(o);
|
||||
}
|
||||
o->group_del_called = EINA_TRUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ evas_object_smart_clipped_clipper_get(const Evas_Object *eo_obj)
|
|||
}
|
||||
|
||||
static void
|
||||
evas_object_smart_clipped_smart_add(Evas_Object *eo_obj, Evas_Object_Smart_Clipped_Data *cso)
|
||||
evas_object_smart_clipped_init(Evas_Object *eo_obj, Evas_Object_Smart_Clipped_Data *cso)
|
||||
{
|
||||
Evas_Object *clipper;
|
||||
|
||||
|
@ -48,7 +48,7 @@ evas_object_smart_clipped_smart_add_legacy(Evas_Object *eo_obj)
|
|||
Evas_Object_Smart_Clipped_Data *cso;
|
||||
|
||||
cso = calloc(1, sizeof(*cso));
|
||||
evas_object_smart_clipped_smart_add(eo_obj, cso);
|
||||
evas_object_smart_clipped_init(eo_obj, cso);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
|
@ -57,11 +57,11 @@ _efl_canvas_group_clipped_efl_canvas_group_group_add(Eo *eo_obj, void *_pd EINA_
|
|||
Evas_Object_Smart_Clipped_Data *cso;
|
||||
|
||||
cso = evas_object_smart_data_get(eo_obj);
|
||||
evas_object_smart_clipped_smart_add(eo_obj, cso);
|
||||
evas_object_smart_clipped_init(eo_obj, cso);
|
||||
}
|
||||
|
||||
static void
|
||||
evas_object_smart_clipped_smart_del(Evas_Object *eo_obj)
|
||||
evas_object_smart_clipped_smart_del_legacy(Evas_Object *eo_obj)
|
||||
{
|
||||
CSO_DATA_GET_OR_RETURN(eo_obj, cso);
|
||||
|
||||
|
@ -73,19 +73,6 @@ evas_object_smart_clipped_smart_del(Evas_Object *eo_obj)
|
|||
}
|
||||
|
||||
_efl_canvas_group_group_members_all_del(eo_obj);
|
||||
|
||||
/* If it's a legacy smart object, we should free the cso. */
|
||||
if (!efl_isa(eo_obj, MY_CLASS))
|
||||
free(cso);
|
||||
|
||||
evas_object_smart_data_set(eo_obj, NULL);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_canvas_group_clipped_efl_canvas_group_group_del(Eo *eo_obj, void *_pd EINA_UNUSED)
|
||||
{
|
||||
evas_object_smart_clipped_smart_del(eo_obj);
|
||||
// group_del_called was already set to true, no need to call super here.
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -232,7 +219,7 @@ evas_object_smart_clipped_smart_set(Evas_Smart_Class *sc)
|
|||
return;
|
||||
|
||||
sc->add = evas_object_smart_clipped_smart_add_legacy;
|
||||
sc->del = evas_object_smart_clipped_smart_del;
|
||||
sc->del = evas_object_smart_clipped_smart_del_legacy;
|
||||
sc->move = evas_object_smart_clipped_smart_move;
|
||||
sc->show = evas_object_smart_clipped_smart_show;
|
||||
sc->hide = evas_object_smart_clipped_smart_hide;
|
||||
|
@ -261,7 +248,7 @@ evas_object_smart_clipped_class_get(void)
|
|||
/* Internal EO APIs and hidden overrides */
|
||||
|
||||
#define EFL_CANVAS_GROUP_CLIPPED_EXTRA_OPS \
|
||||
EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_canvas_group_clipped)
|
||||
EFL_CANVAS_GROUP_ADD_OPS(efl_canvas_group_clipped)
|
||||
|
||||
#include "canvas/efl_canvas_group_clipped.eo.c"
|
||||
|
||||
|
|
Loading…
Reference in New Issue