efl_ui_panel: redo content handling

before the events where not emitted correctly. Additionally input values
like 0x1 have been accepted as valid.

Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D8636
This commit is contained in:
Marcel Hollerbach 2019-04-17 17:43:21 +02:00
parent bb6c7c6782
commit 4ce2a29c93
1 changed files with 21 additions and 17 deletions

View File

@ -711,24 +711,36 @@ _efl_ui_panel_efl_ui_widget_widget_input_event_handler(Eo *obj, Efl_Ui_Panel_Dat
return _panel_efl_ui_widget_widget_input_event_handler(obj, pd, eo_event, src);
}
static void
_invalidate_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
efl_content_set(data, NULL);
}
static Eina_Bool
_efl_ui_panel_efl_content_content_set(Eo *obj, Efl_Ui_Panel_Data *sd, Efl_Gfx_Entity *content)
{
if (sd->content == content) return EINA_TRUE;
if (sd->content)
evas_object_box_remove_all(sd->bx, EINA_TRUE);
sd->content = content;
if (content)
{
efl_event_callback_del(sd->content, EFL_EVENT_INVALIDATE, _invalidate_cb, obj);
if (!efl_invalidated_get(sd->content) && !efl_invalidating_get(sd->content))
efl_del(sd->content);
sd->content = NULL;
}
if (content && !elm_widget_sub_object_add(obj, content)) return EINA_FALSE;
sd->content = content;
if (sd->content)
{
efl_event_callback_add(sd->content, EFL_EVENT_INVALIDATE, _invalidate_cb, obj);
evas_object_box_append(sd->bx, sd->content);
evas_object_show(sd->content);
if (sd->scrollable)
elm_widget_sub_object_add(sd->scr_ly, sd->content);
else
elm_widget_sub_object_add(obj, sd->content);
}
efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, content);
if (efl_finalized_get(obj))
if (efl_alive_get(obj))
elm_layout_sizing_eval(obj);
return EINA_TRUE;
@ -741,18 +753,10 @@ _efl_ui_panel_efl_content_content_get(const Eo *obj EINA_UNUSED, Efl_Ui_Panel_Da
}
static Efl_Gfx_Entity*
_efl_ui_panel_efl_content_content_unset(Eo *obj EINA_UNUSED, Efl_Ui_Panel_Data *sd)
_efl_ui_panel_efl_content_content_unset(Eo *obj EINA_UNUSED, Efl_Ui_Panel_Data *sd EINA_UNUSED)
{
Efl_Gfx_Entity *ret = NULL;
if (!sd->content) return NULL;
ret = sd->content;
evas_object_box_remove_all(sd->bx, EINA_FALSE);
if (sd->scrollable)
_elm_widget_sub_object_redirect_to_top(sd->scr_ly, sd->content);
sd->content = NULL;
efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, NULL);
Efl_Gfx_Entity *ret = efl_content_get(obj);
efl_content_set(obj, NULL);
return ret;
}