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 <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D8681
This commit is contained in:
Marcel Hollerbach 2019-04-22 21:52:45 +02:00 committed by Cedric BAIL
parent f9143ec634
commit 7ee0a3e055
2 changed files with 22 additions and 2 deletions

View File

@ -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"));
}

View File

@ -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.Radio", "Efl.Ui.Popup", "Efl.Ui.Tab_Page"]
]
fixture_gen_template = """