zmike pushed a commit to branch efl-1.22.

http://git.enlightenment.org/core/efl.git/commit/?id=46612245547ba222dcc0f9c313b1a4829c557386

commit 46612245547ba222dcc0f9c313b1a4829c557386
Author: Mike Blumenkrantz <zm...@samsung.com>
Date:   Wed May 29 09:30:37 2019 -0400

    elm/genlist: unify all creation of calc jobs, skip if genlist is dead
    
    Summary:
    there is no need to recalculate any genlist attributes if the genlist is
    dead
    
    @fix
    
    Depends on D8992
    
    Reviewers: cedric, bu5hm4n
    
    Reviewed By: cedric, bu5hm4n
    
    Subscribers: bu5hm4n, cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D8993
---
 src/lib/elementary/elm_genlist.c | 59 ++++++++++++++++++----------------------
 1 file changed, 26 insertions(+), 33 deletions(-)

diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c
index aaa78b89a4..d74466dc58 100644
--- a/src/lib/elementary/elm_genlist.c
+++ b/src/lib/elementary/elm_genlist.c
@@ -184,6 +184,14 @@ static const Elm_Action key_actions[] = {
    {NULL, NULL}
 };
 
+static inline void
+_add_calc_job(Elm_Genlist_Data *sd)
+{
+   ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
+   if (!efl_alive_get(sd->obj)) return;
+   sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+}
+
 static void
 _size_cache_free(void *data)
 {
@@ -321,14 +329,13 @@ _elm_genlist_pan_efl_gfx_entity_size_set(Eo *obj, 
Elm_Genlist_Pan_Data *psd, Ein
      }
    sd->pan_changed = EINA_TRUE;
    evas_object_smart_changed(obj);
-   ecore_job_del(sd->calc_job);
    // if the width changed we may have to resize content if scrollbar went
    // away or appeared to queue a job to deal with it. it should settle in
    // the end to a steady-state
    if (old.w != size.w)
-     sd->calc_job = ecore_job_add(_calc_job, psd->wobj);
+     _add_calc_job(sd);
    else
-     sd->calc_job = NULL;
+     ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
 
 super:
    efl_gfx_entity_size_set(efl_super(obj, MY_PAN_CLASS), size);
@@ -779,8 +786,7 @@ _must_recalc_idler(void *data)
 {
    ELM_GENLIST_DATA_GET(data, sd);
 
-   ecore_job_del(sd->calc_job);
-   sd->calc_job = ecore_job_add(_calc_job, data);
+   _add_calc_job(sd);
    sd->must_recalc_idler = NULL;
    return ECORE_CALLBACK_CANCEL;
 }
@@ -953,8 +959,7 @@ _elm_genlist_elm_layout_sizing_eval(Eo *obj, 
Elm_Genlist_Data *sd)
                {
                   itb->must_recalc = EINA_TRUE;
                }
-             ecore_job_del(sd->calc_job);
-             sd->calc_job = ecore_job_add(_calc_job, obj);
+             _add_calc_job(sd);
           }
         minw = vmw;
         minh = vmh;
@@ -3561,8 +3566,8 @@ _elm_genlist_efl_ui_widget_theme_apply(Eo *obj, 
Elm_Genlist_Data *sd)
 
         itb->changed = EINA_TRUE;
      }
-   ecore_job_del(sd->calc_job);
-   sd->calc_job = ecore_job_add(_calc_job, obj);
+   if (sd->obj)
+     _add_calc_job(sd);
    elm_layout_sizing_eval(obj);
    evas_event_thaw(e);
    evas_event_thaw_eval(e);
@@ -3684,8 +3689,7 @@ _item_block_del(Elm_Gen_Item *it)
    itb->items = eina_list_remove(itb->items, it);
    itb->count--;
    itb->changed = EINA_TRUE;
-   ecore_job_del(sd->calc_job);
-   sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+   _add_calc_job(sd);
    if (itb->count < 1)
      {
         Item_Block *itbn;
@@ -3833,8 +3837,7 @@ _elm_genlist_item_del_serious(Elm_Gen_Item *it)
      sd->group_items = eina_list_remove(sd->group_items, it);
 
    ELM_SAFE_FREE(sd->state, eina_inlist_sorted_state_free);
-   ecore_job_del(sd->calc_job);
-   sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+   _add_calc_job(sd);
 
    ELM_SAFE_FREE(it->item, free);
 }
@@ -4036,8 +4039,7 @@ _item_mouse_move_cb(void *data,
              else
                _item_position(it, VIEW(it), it->item->scrl_x, y_pos);
 
-             ecore_job_del(sd->calc_job);
-             sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+             _add_calc_job(sd);
           }
         return;
      }
@@ -4641,8 +4643,7 @@ newblock:
    itb->count++;
    itb->changed = EINA_TRUE;
    it->item->block = itb;
-   ecore_job_del(itb->sd->calc_job);
-   itb->sd->calc_job = ecore_job_add(_calc_job, itb->sd->obj);
+   _add_calc_job(itb->sd);
 
    if (itb->count > itb->sd->max_items_per_block)
      {
@@ -4884,8 +4885,7 @@ _item_idle_enterer(void *data)
    if (wakeup)
      {
         // wake up mainloop
-        ecore_job_del(sd->calc_job);
-        sd->calc_job = ecore_job_add(_calc_job, data);
+        _add_calc_job(sd);
      }
    if (ok == ECORE_CALLBACK_CANCEL) sd->queue_idle_enterer = NULL;
 
@@ -5130,8 +5130,7 @@ _item_mouse_up_cb(void *data,
           }
         else
           {
-             ecore_job_del(sd->calc_job);
-             sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+             _add_calc_job(sd);
           }
         edje_object_signal_emit(VIEW(it), SIGNAL_REORDER_DISABLED, "elm");
         if (_elm_config->atspi_mode)
@@ -5521,8 +5520,7 @@ _update_job(void *data)
      }
    if (position)
      {
-        ecore_job_del(sd->calc_job);
-        sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+        _add_calc_job(sd);
      }
    evas_event_thaw(e);
    evas_event_thaw_eval(e);
@@ -7277,8 +7275,7 @@ _elm_genlist_item_coordinates_calc(Elm_Gen_Item *it,
         sd->scroll_to_type = type;
         it->item->show_me = EINA_TRUE;
 
-        ecore_job_del(sd->calc_job);
-        sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+        _add_calc_job(sd);
 
         return EINA_FALSE;
      }
@@ -7887,8 +7884,7 @@ _item_filtered_get(Elm_Gen_Item *it)
         _filter_item_internal(it);
         if (it->item->block)
           it->item->block->changed = EINA_TRUE;
-        ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
-        sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+        _add_calc_job(sd);
    }
    if (!it->hide) return EINA_TRUE;
    return EINA_FALSE;
@@ -7947,8 +7943,7 @@ _item_filter_enterer(void *data)
    if (wakeup)
      {
         // wake up mainloop
-        ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
-        sd->calc_job = ecore_job_add(_calc_job, data);
+        _add_calc_job(sd);
      }
    if (ok == ECORE_CALLBACK_CANCEL)
      {
@@ -8254,8 +8249,7 @@ _elm_genlist_decorate_mode_set(Eo *obj, Elm_Genlist_Data 
*sd, Eina_Bool decorate
           }
      }
 
-   ecore_job_del(sd->calc_job);
-   sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+   _add_calc_job(sd);
 }
 
 EOLIAN static void
@@ -8401,8 +8395,7 @@ _flip_job(void *data)
 
    it->flipped = EINA_TRUE;
    it->item->nocache = EINA_TRUE;
-   ecore_job_del(sd->calc_job);
-   sd->calc_job = ecore_job_add(_calc_job, sd->obj);
+   _add_calc_job(sd);
 }
 
 EOLIAN static void

-- 


Reply via email to