zmike pushed a commit to branch efl-1.22. http://git.enlightenment.org/core/efl.git/commit/?id=cffe1ad99d6579e65dabc1a8289cff7f9f2c15d3
commit cffe1ad99d6579e65dabc1a8289cff7f9f2c15d3 Author: Marcel Hollerbach <[email protected]> Date: Mon Apr 22 21:52:45 2019 +0200 efl_ui_tab_page: implement content_set / unset correctly This patchset ensures that the following features are supported: - content-widget deletion on set content - content-widget validation on set calls - invalid cases return false - event emission Reviewed-by: Cedric BAIL <[email protected]> Differential Revision: https://phab.enlightenment.org/D8681 --- src/lib/elementary/efl_ui_tab_page.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_tab_page.c b/src/lib/elementary/efl_ui_tab_page.c index a0bd26ef70..cb17b98bcf 100644 --- a/src/lib/elementary/efl_ui_tab_page.c +++ b/src/lib/elementary/efl_ui_tab_page.c @@ -11,24 +11,44 @@ #define MY_CLASS EFL_UI_TAB_PAGE_CLASS +static void +_invalidate_cb(void *data, const Efl_Event *ev EINA_UNUSED) +{ + efl_content_unset(data); +} + EOLIAN static Eina_Bool _efl_ui_tab_page_efl_content_content_set(Eo *obj, Efl_Ui_Tab_Page_Data *sd, Eo *content) { if (sd->content) { efl_content_unset(efl_part(obj, "efl.content")); + efl_event_callback_del(sd->content, EFL_EVENT_INVALIDATE, _invalidate_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_add(sd->content, EFL_EVENT_INVALIDATE, _invalidate_cb, obj); + efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, content); + efl_content_set(efl_part(obj, "efl.content"), sd->content); return EINA_TRUE; } EOLIAN static Efl_Gfx_Entity* -_efl_ui_tab_page_efl_content_content_unset(Eo *obj, Efl_Ui_Tab_Page_Data *pd EINA_UNUSED) +_efl_ui_tab_page_efl_content_content_unset(Eo *obj, Efl_Ui_Tab_Page_Data *pd) { + efl_event_callback_del(pd->content, EFL_EVENT_INVALIDATE, _invalidate_cb, obj); + pd->content = NULL; + efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, NULL); return efl_content_unset(efl_part(obj, "efl.content")); } --
