zmike pushed a commit to branch efl-1.22.

http://git.enlightenment.org/core/efl.git/commit/?id=8388308f4c269af66b9835e0655da2920257048d

commit 8388308f4c269af66b9835e0655da2920257048d
Author: Marcel Hollerbach <[email protected]>
Date:   Wed Apr 17 17:43:21 2019 +0200

    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 <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D8636
---
 src/lib/elementary/efl_ui_panel.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/src/lib/elementary/efl_ui_panel.c 
b/src/lib/elementary/efl_ui_panel.c
index 84aa6f08d9..bfa7a9391d 100644
--- a/src/lib/elementary/efl_ui_panel.c
+++ b/src/lib/elementary/efl_ui_panel.c
@@ -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);
+     {
+        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 (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;
 }
 

-- 


Reply via email to