zmike pushed a commit to branch efl-1.22. http://git.enlightenment.org/core/efl.git/commit/?id=0e99b33c39d871276638c5ef51721fe98e1fedcf
commit 0e99b33c39d871276638c5ef51721fe98e1fedcf Author: Marcel Hollerbach <[email protected]> Date: Mon Apr 22 22:10:19 2019 +0200 efl_ui_scroller: fix Efl.Content implementation this commit ensures the following: - Delete content when new content is set - Content set input validation - Correct parent setting Reviewed-by: Cedric BAIL <[email protected]> Differential Revision: https://phab.enlightenment.org/D8682 --- src/lib/elementary/efl_ui_scroller.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/lib/elementary/efl_ui_scroller.c b/src/lib/elementary/efl_ui_scroller.c index 0fef382346..50113c12b1 100644 --- a/src/lib/elementary/efl_ui_scroller.c +++ b/src/lib/elementary/efl_ui_scroller.c @@ -152,11 +152,7 @@ static void _efl_ui_scroller_content_del_cb(void *data, const Efl_Event *event EINA_UNUSED) { - EFL_UI_SCROLLER_DATA_GET_OR_RETURN(data, sd); - - sd->content = NULL; - if (!sd->smanager) return; - efl_ui_scrollbar_bar_visibility_update(sd->smanager); + efl_content_unset(data); } EOLIAN static Eina_Bool @@ -167,14 +163,23 @@ _efl_ui_scroller_efl_content_content_set(Eo *obj, if (sd->content) { efl_content_set(sd->pan_obj, NULL); - efl_event_callback_del(sd->content, EFL_EVENT_DEL, + efl_event_callback_del(sd->content, EFL_EVENT_INVALIDATE, _efl_ui_scroller_content_del_cb, obj); + efl_del(sd->content); + sd->content = NULL; + } + + if (content && !efl_ui_widget_sub_object_add(obj, content)) + { + efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, NULL); + return EINA_FALSE; } sd->content = content; + efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, sd->content); if (!content) return EINA_TRUE; - efl_event_callback_add(sd->content, EFL_EVENT_DEL, + efl_event_callback_add(sd->content, EFL_EVENT_INVALIDATE, _efl_ui_scroller_content_del_cb, obj); efl_content_set(sd->pan_obj, content); @@ -195,7 +200,9 @@ _efl_ui_scroller_efl_content_content_unset(Eo *obj EINA_UNUSED, Efl_Ui_Scroller_ { Efl_Gfx_Entity *old_content = pd->content; + efl_event_callback_del(pd->content, EFL_EVENT_INVALIDATE, _efl_ui_scroller_content_del_cb, obj); pd->content = NULL; + efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, NULL); if (pd->smanager) { efl_ui_scrollbar_bar_visibility_update(pd->smanager); --
