elm: Fix efl_part inheritance

So, I was storing a single "sd" pointer (class private data)
but using it in two different places, ie. as if it were two
different classes. Crashes happened, complaints were heard.

See T3714.
This commit is contained in:
Jean-Philippe Andre 2016-05-30 12:28:18 +09:00
parent 945932e1b1
commit 3092e08a83
5 changed files with 14 additions and 22 deletions

View File

@ -845,10 +845,10 @@ _elm_hover_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED
/* Efl.Part begin */
ELM_PART_IMPLEMENT(elm_hover, ELM_HOVER, Elm_Hover_Data, Elm_Part_Data)
ELM_PART_IMPLEMENT_CONTENT_SET(elm_hover, ELM_HOVER, Elm_Hover_Data, Elm_Part_Data)
ELM_PART_IMPLEMENT_CONTENT_GET(elm_hover, ELM_HOVER, Elm_Hover_Data, Elm_Part_Data)
ELM_PART_IMPLEMENT_CONTENT_UNSET(elm_hover, ELM_HOVER, Elm_Hover_Data, Elm_Part_Data)
ELM_PART_OVERRIDE(elm_hover, ELM_HOVER, ELM_LAYOUT, Elm_Hover_Data, Elm_Part_Data)
ELM_PART_OVERRIDE_CONTENT_SET(elm_hover, ELM_HOVER, ELM_LAYOUT, Elm_Hover_Data, Elm_Part_Data)
ELM_PART_OVERRIDE_CONTENT_GET(elm_hover, ELM_HOVER, ELM_LAYOUT, Elm_Hover_Data, Elm_Part_Data)
ELM_PART_OVERRIDE_CONTENT_UNSET(elm_hover, ELM_HOVER, ELM_LAYOUT, Elm_Hover_Data, Elm_Part_Data)
#include "elm_hover_internal_part.eo.c"
/* Efl.Part end */

View File

@ -1,8 +1,7 @@
class Elm.Hover.Internal.Part (Eo.Base, Efl.Container)
class Elm.Hover.Internal.Part (Elm.Layout.Internal.Part)
{
data: Elm_Part_Data;
data: null;
implements {
Eo.Base.destructor;
Efl.Container.content.set;
Efl.Container.content.get;
Efl.Container.content_unset;

View File

@ -103,7 +103,8 @@ static EOLIAN Eina_Bool \
_ ## type ## _internal_part_efl_container_content_set(Eo *obj, void *_pd EINA_UNUSED, Efl_Gfx *content) \
{ \
partdata *pd = eo_data_scope_get(obj, SUPER ## _INTERNAL_PART_CLASS); \
ELM_PART_RETURN_VAL(_ ## type ## _content_set(pd->obj, pd->sd, pd->part, content)); \
typedata *sd = eo_data_scope_get(pd->obj, TYPE ## _CLASS); \
ELM_PART_RETURN_VAL(_ ## type ## _content_set(pd->obj, sd, pd->part, content)); \
}
#define ELM_PART_OVERRIDE_CONTENT_GET(type, TYPE, SUPER, typedata, partdata) \
@ -111,7 +112,8 @@ static EOLIAN Efl_Gfx * \
_ ## type ## _internal_part_efl_container_content_get(Eo *obj, void *_pd EINA_UNUSED) \
{ \
partdata *pd = eo_data_scope_get(obj, SUPER ## _INTERNAL_PART_CLASS); \
ELM_PART_RETURN_VAL(_ ## type ## _content_get(pd->obj, pd->sd, pd->part)); \
typedata *sd = eo_data_scope_get(pd->obj, TYPE ## _CLASS); \
ELM_PART_RETURN_VAL(_ ## type ## _content_get(pd->obj, sd, pd->part)); \
}
#define ELM_PART_OVERRIDE_CONTENT_UNSET(type, TYPE, SUPER, typedata, partdata) \
@ -119,7 +121,8 @@ static EOLIAN Efl_Gfx * \
_ ## type ## _internal_part_efl_container_content_unset(Eo *obj, void *_pd EINA_UNUSED) \
{ \
partdata *pd = eo_data_scope_get(obj, SUPER ## _INTERNAL_PART_CLASS); \
ELM_PART_RETURN_VAL(_ ## type ## _content_unset(pd->obj, pd->sd, pd->part)); \
typedata *sd = eo_data_scope_get(pd->obj, TYPE ## _CLASS); \
ELM_PART_RETURN_VAL(_ ## type ## _content_unset(pd->obj, sd, pd->part)); \
}
#endif

View File

@ -1414,19 +1414,10 @@ _elm_scroller_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNU
/* Efl.Part begin */
/* FIXME: Should be OVERRIDE, but... it doesn't work (buggy scrollers in
* elm_test). Why? No idea! */
#if 0
ELM_PART_OVERRIDE(elm_scroller, ELM_SCROLLER, ELM_LAYOUT, Elm_Scroller_Data, Elm_Part_Data)
ELM_PART_OVERRIDE_CONTENT_SET(elm_scroller, ELM_SCROLLER, ELM_LAYOUT, Elm_Scroller_Data, Elm_Part_Data)
ELM_PART_OVERRIDE_CONTENT_GET(elm_scroller, ELM_SCROLLER, ELM_LAYOUT, Elm_Scroller_Data, Elm_Part_Data)
ELM_PART_OVERRIDE_CONTENT_UNSET(elm_scroller, ELM_SCROLLER, ELM_LAYOUT, Elm_Scroller_Data, Elm_Part_Data)
#else
ELM_PART_IMPLEMENT(elm_scroller, ELM_SCROLLER, Elm_Scroller_Data, Elm_Part_Data)
ELM_PART_IMPLEMENT_CONTENT_SET(elm_scroller, ELM_SCROLLER, Elm_Scroller_Data, Elm_Part_Data)
ELM_PART_IMPLEMENT_CONTENT_GET(elm_scroller, ELM_SCROLLER, Elm_Scroller_Data, Elm_Part_Data)
ELM_PART_IMPLEMENT_CONTENT_UNSET(elm_scroller, ELM_SCROLLER, Elm_Scroller_Data, Elm_Part_Data)
#endif
#include "elm_scroller_internal_part.eo.c"
/* Efl.Part end */

View File

@ -1,8 +1,7 @@
class Elm.Scroller.Internal.Part (Eo.Base, Efl.Container) // FIXME: (Elm.Layout.Internal.Part)
class Elm.Scroller.Internal.Part (Elm.Layout.Internal.Part)
{
data: Elm_Part_Data; // FIXME: null;
data: null;
implements {
Eo.Base.destructor; // FIXME: remove
Efl.Container.content.set;
Efl.Container.content.get;
Efl.Container.content_unset;