summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <mail@marcel-hollerbach.de>2019-04-22 21:52:45 +0200
committerCedric BAIL <cedric.bail@free.fr>2019-04-23 12:40:51 -0700
commit7ee0a3e05546489ea2444aaddef414bb8ee137d0 (patch)
tree666444b6228c65ebf43001a5f16f6437f4eb7cd5
parentf9143ec63457bedf08c2bbd237066374341e165b (diff)
downloadefl-7ee0a3e05546489ea2444aaddef414bb8ee137d0.tar.gz
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
-rw-r--r--src/lib/elementary/efl_ui_tab_page.c22
-rwxr-xr-xsrc/tests/elementary/spec/generator.py2
2 files changed, 22 insertions, 2 deletions
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"));
}
diff --git a/src/tests/elementary/spec/generator.py b/src/tests/elementary/spec/generator.py
index 72af7017fa..79652a32a5 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.Radio", "Efl.Ui.Popup", "Efl.Ui.Tab_Page"]
]
fixture_gen_template = """