bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=23851808bba0a7204aea00f4ea396886a01789da

commit 23851808bba0a7204aea00f4ea396886a01789da
Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Oct 23 10:27:04 2019 -0400

    elm/genlist: defer recalc when applying a name filter
    
    this may be called successively during the same mainloop iteration,
    so it's important to defer this as much as possible
    
    Reviewed-by: Cedric BAIL <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D10524
---
 src/lib/elementary/elm_genlist.c        | 9 +++++++--
 src/lib/elementary/elm_widget_genlist.h | 1 +
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c
index f54040ac8c..61e91ed046 100644
--- a/src/lib/elementary/elm_genlist.c
+++ b/src/lib/elementary/elm_genlist.c
@@ -788,6 +788,7 @@ _calc_job(void *data)
    Evas_Coord minw = -1, minh = 0, y = 0, ow = 0, vw = 0;
    Evas *e;
 
+   sd->need_calc = EINA_FALSE;
    evas_object_geometry_get(sd->pan_obj, NULL, NULL, &ow, &sd->h);
    if (sd->mode == ELM_LIST_COMPRESS)
       elm_interface_scrollable_content_viewport_geometry_get
@@ -944,12 +945,14 @@ _elm_genlist_efl_canvas_group_group_calculate(Eo *obj, 
Elm_Genlist_Data *sd)
                {
                   itb->must_recalc = EINA_TRUE;
                }
-             _calc_job(sd);
+             sd->need_calc = EINA_TRUE;
           }
         minw = vmw;
         minh = vmh;
      }
    else
+     sd->need_calc = EINA_TRUE;
+   if (sd->need_calc)
      _calc_job(sd);
 
    if (sd->scr_minw)
@@ -7896,6 +7899,7 @@ _item_filtered_get(Elm_Gen_Item *it)
         if (it->item->block)
           it->item->block->changed = EINA_TRUE;
         efl_canvas_group_change(sd->obj);
+        sd->need_calc = EINA_TRUE;
    }
    if (!it->hide) return EINA_TRUE;
    return EINA_FALSE;
@@ -7995,6 +7999,8 @@ _elm_genlist_filter_set(Eo *obj EINA_UNUSED, 
Elm_Genlist_Data *sd, void *filter_
                     sd->filter_queue = eina_list_append(sd->filter_queue, it);
                }
             itb->changed = EINA_TRUE;
+            evas_object_smart_changed(obj);
+            sd->need_calc = EINA_TRUE;
          }
        else
          {
@@ -8006,7 +8012,6 @@ _elm_genlist_filter_set(Eo *obj EINA_UNUSED, 
Elm_Genlist_Data *sd, void *filter_
               }
          }
      }
-   _calc_job(sd);
 
    sd->queue_filter_enterer = ecore_idle_enterer_add(_item_filter_enterer,
                                                      sd->obj);
diff --git a/src/lib/elementary/elm_widget_genlist.h 
b/src/lib/elementary/elm_widget_genlist.h
index b7ce598390..94b3b8465f 100644
--- a/src/lib/elementary/elm_widget_genlist.h
+++ b/src/lib/elementary/elm_widget_genlist.h
@@ -205,6 +205,7 @@ struct _Elm_Genlist_Data
 
    Eina_Bool                             tree_effect_animator : 1;
    Eina_Bool                             pin_item_top : 1;
+   Eina_Bool                             need_calc : 1; /* _calc_job() must be 
called in group_calc */
 };
 
 typedef struct _Item_Block Item_Block;

-- 


Reply via email to