zmike pushed a commit to branch efl-1.22.

http://git.enlightenment.org/core/efl.git/commit/?id=0e99b33c39d871276638c5ef51721fe98e1fedcf

commit 0e99b33c39d871276638c5ef51721fe98e1fedcf
Author: Marcel Hollerbach <[email protected]>
Date:   Mon Apr 22 22:10:19 2019 +0200

    efl_ui_scroller: fix Efl.Content implementation
    
    this commit ensures the following:
    - Delete content when new content is set
    - Content set input validation
    - Correct parent setting
    
    Reviewed-by: Cedric BAIL <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D8682
---
 src/lib/elementary/efl_ui_scroller.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/lib/elementary/efl_ui_scroller.c 
b/src/lib/elementary/efl_ui_scroller.c
index 0fef382346..50113c12b1 100644
--- a/src/lib/elementary/efl_ui_scroller.c
+++ b/src/lib/elementary/efl_ui_scroller.c
@@ -152,11 +152,7 @@ static void
 _efl_ui_scroller_content_del_cb(void *data,
                                 const Efl_Event *event EINA_UNUSED)
 {
-   EFL_UI_SCROLLER_DATA_GET_OR_RETURN(data, sd);
-
-   sd->content = NULL;
-   if (!sd->smanager) return;
-   efl_ui_scrollbar_bar_visibility_update(sd->smanager);
+   efl_content_unset(data);
 }
 
 EOLIAN static Eina_Bool
@@ -167,14 +163,23 @@ _efl_ui_scroller_efl_content_content_set(Eo *obj,
    if (sd->content)
      {
         efl_content_set(sd->pan_obj, NULL);
-        efl_event_callback_del(sd->content, EFL_EVENT_DEL,
+        efl_event_callback_del(sd->content, EFL_EVENT_INVALIDATE,
                                _efl_ui_scroller_content_del_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_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, 
sd->content);
    if (!content) return EINA_TRUE;
 
-   efl_event_callback_add(sd->content, EFL_EVENT_DEL,
+   efl_event_callback_add(sd->content, EFL_EVENT_INVALIDATE,
                           _efl_ui_scroller_content_del_cb, obj);
 
    efl_content_set(sd->pan_obj, content);
@@ -195,7 +200,9 @@ _efl_ui_scroller_efl_content_content_unset(Eo *obj 
EINA_UNUSED, Efl_Ui_Scroller_
 {
    Efl_Gfx_Entity *old_content = pd->content;
 
+   efl_event_callback_del(pd->content, EFL_EVENT_INVALIDATE, 
_efl_ui_scroller_content_del_cb, obj);
    pd->content = NULL;
+   efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, NULL);
    if (pd->smanager)
      {
         efl_ui_scrollbar_bar_visibility_update(pd->smanager);

-- 


Reply via email to