forked from enlightenment/efl
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:
parent
945932e1b1
commit
3092e08a83
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue