From afd4e6bd5bf4e06358fe7147b21fc638897c8931 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Mon, 22 Apr 2019 22:10:19 +0200 Subject: [PATCH] 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 Differential Revision: https://phab.enlightenment.org/D8682 --- src/lib/elementary/efl_ui_scroller.c | 21 ++++++++++++++------- src/tests/elementary/spec/generator.py | 2 +- 2 files changed, 15 insertions(+), 8 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); diff --git a/src/tests/elementary/spec/generator.py b/src/tests/elementary/spec/generator.py index 79652a32a5..3a84b01862 100755 --- a/src/tests/elementary/spec/generator.py +++ b/src/tests/elementary/spec/generator.py @@ -6,7 +6,7 @@ tests = [ ["Efl.Content" , "Efl.Ui.Button", "Efl.Ui.Frame", "Efl.Ui.Grid_Default_Item", "Efl.Ui.List_Default_Item", "Efl.Ui.List_Empty_Item", "Efl.Ui.Navigation_Layout", "Efl.Ui.Panel", "Efl.Ui.Progressbar", - "Efl.Ui.Radio", "Efl.Ui.Popup", "Efl.Ui.Tab_Page"] + "Efl.Ui.Radio", "Efl.Ui.Popup", "Efl.Ui.Tab_Page", "Efl.Ui.Scroller"] ] fixture_gen_template = """