felipealmeida pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=10d10dfa5dffa774b95a9daaf25daa6d201a5bdf

commit 10d10dfa5dffa774b95a9daaf25daa6d201a5bdf
Author: Larry Jr <[email protected]>
Date:   Mon Jan 22 17:52:51 2018 -0200

    elementary: efl_ui_list model_set update values fixed
---
 src/lib/elementary/efl_ui_list_precise_layouter.c | 23 +++++++++++++----------
 src/lib/elementary/efl_ui_list_segarray.c         |  2 ++
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/lib/elementary/efl_ui_list_precise_layouter.c 
b/src/lib/elementary/efl_ui_list_precise_layouter.c
index 774eb857ab..7c4d0f564f 100644
--- a/src/lib/elementary/efl_ui_list_precise_layouter.c
+++ b/src/lib/elementary/efl_ui_list_precise_layouter.c
@@ -40,12 +40,10 @@ typedef struct _Efl_Ui_List_Precise_Layouter_Callback_Data
   Efl_Ui_List_LayoutItem* item;
 } Efl_Ui_List_Precise_Layouter_Callback_Data;
 
-
 #include "efl_ui_list_precise_layouter.eo.h"
 
-
 static void _efl_ui_list_relayout_layout_do(Efl_Ui_List_Precise_Layouter_Data 
*);
-static void _initilize(Eo *, Efl_Ui_List_Precise_Layouter_Data*, 
Efl_Ui_List_Model*, Efl_Ui_List_SegArray*);
+static Eina_Bool _initilize(Eo *, Efl_Ui_List_Precise_Layouter_Data*, 
Efl_Ui_List_Model*, Efl_Ui_List_SegArray*);
 static void _finalize(Eo *, Efl_Ui_List_Precise_Layouter_Data*);
 static void _node_realize(Efl_Ui_List_Precise_Layouter_Data*, 
Efl_Ui_List_SegArray_Node*);
 static void _node_unrealize(Efl_Ui_List_Precise_Layouter_Data*, 
Efl_Ui_List_SegArray_Node*);
@@ -183,7 +181,6 @@ _count_then(void * data, Efl_Event const* event)
    Efl_Ui_List_Precise_Layouter_Data *pd = data;
    EINA_SAFETY_ON_NULL_RETURN(pd);
    pd->count_future = NULL;
-
    pd->count_total = *(int*)((Efl_Future_Event_Success*)event->info)->value;
 
    if (pd->modeler && (pd->count_total != 
efl_ui_list_segarray_count(pd->segarray)))
@@ -303,11 +300,14 @@ _child_removed_cb(void *data, const Efl_Event *event)
    evas_object_smart_changed(pd->modeler);
 }
 
-static void
+static Eina_Bool
 _initilize(Eo *obj EINA_UNUSED, Efl_Ui_List_Precise_Layouter_Data *pd, 
Efl_Ui_List_Model *modeler, Efl_Ui_List_SegArray *segarray)
 {
    if(pd->initialized)
-     return;
+     return EINA_TRUE;
+
+   if(!pd->model)
+     return EINA_FALSE;
 
    pd->recalc = EINA_TRUE;
    pd->initialized = EINA_TRUE;
@@ -316,13 +316,14 @@ _initilize(Eo *obj EINA_UNUSED, 
Efl_Ui_List_Precise_Layouter_Data *pd, Efl_Ui_Li
    pd->segarray = segarray;
 
    evas_object_event_callback_add(modeler, EVAS_CALLBACK_RESIZE, 
_on_modeler_resize, pd);
-//   efl_event_callback_add(pd->model, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, 
_count_changed, pd);
    efl_event_callback_add(pd->model, EFL_MODEL_EVENT_CHILD_ADDED, 
_child_added_cb, pd);
    efl_event_callback_add(pd->model, EFL_MODEL_EVENT_CHILD_REMOVED, 
_child_removed_cb, pd);
    efl_ui_list_model_load_range_set(modeler, 0, 0); // load all
 
    pd->min.w = 0;
    pd->min.h = 0;
+
+   return EINA_TRUE;
 }
 
 static void
@@ -334,7 +335,6 @@ _finalize(Eo *obj EINA_UNUSED, 
Efl_Ui_List_Precise_Layouter_Data *pd)
    evas_object_event_callback_del_full(pd->modeler, EVAS_CALLBACK_RESIZE, 
_on_modeler_resize, pd);
    efl_event_callback_del(pd->model, EFL_MODEL_EVENT_CHILD_ADDED, 
_child_added_cb, pd);
    efl_event_callback_del(pd->model, EFL_MODEL_EVENT_CHILD_REMOVED, 
_child_removed_cb, pd);
-//   efl_event_callback_del(pd->model, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, 
_count_changed, pd);
 
    Eina_Accessor *nodes = efl_ui_list_segarray_node_accessor_get(pd->segarray);
    EINA_ACCESSOR_FOREACH(nodes, i, node)
@@ -364,6 +364,7 @@ _node_realize(Efl_Ui_List_Precise_Layouter_Data *pd, 
Efl_Ui_List_SegArray_Node *
    Efl_Ui_List_Precise_Layouter_Node_Data *nodedata = node->layout_data;
    int i;
 
+   EINA_SAFETY_ON_NULL_RETURN(nodedata);
    if (nodedata->realized)
      return;
 
@@ -393,6 +394,7 @@ _node_unrealize(Efl_Ui_List_Precise_Layouter_Data *pd, 
Efl_Ui_List_SegArray_Node
    Efl_Ui_List_Precise_Layouter_Node_Data *nodedata = node->layout_data;
    int i;
 
+   EINA_SAFETY_ON_NULL_RETURN(nodedata);
    if (!nodedata->realized)
      return;
 
@@ -673,11 +675,12 @@ 
_efl_ui_list_precise_layouter_efl_ui_list_relayout_layout_do
   (Eo *obj EINA_UNUSED, Efl_Ui_List_Precise_Layouter_Data *pd
    , Efl_Ui_List_Model *modeler, int first, Efl_Ui_List_SegArray *segarray)
 {
-   _initilize(obj, pd, modeler, segarray);
+   if (!_initilize(obj, pd, modeler, segarray))
+     return;
 
    pd->first = first;
 
-   if (pd->recalc)
+   if (pd->recalc && efl_ui_list_segarray_count(segarray) > 0)
      {
         // cache size of new items
         pd->calc_progress = 0;
diff --git a/src/lib/elementary/efl_ui_list_segarray.c 
b/src/lib/elementary/efl_ui_list_segarray.c
index 058315430e..4cc7dc9ba3 100644
--- a/src/lib/elementary/efl_ui_list_segarray.c
+++ b/src/lib/elementary/efl_ui_list_segarray.c
@@ -93,6 +93,8 @@ void efl_ui_list_segarray_flush(Efl_Ui_List_SegArray* 
segarray)
 {
    eina_rbtree_delete(EINA_RBTREE_GET(segarray->root), 
EINA_RBTREE_FREE_CB(_free_node), NULL);
    segarray->root = NULL;
+   segarray->node_count = 0;
+   segarray->count = 0;
 }
 
 static Efl_Ui_List_Item* _create_item_partial(Efl_Model* model)

-- 


Reply via email to