bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=2b324779c996b38f9514c6e6f29c23b1ac6e2b28

commit 2b324779c996b38f9514c6e6f29c23b1ac6e2b28
Author: Cedric BAIL <cedric.b...@free.fr>
Date:   Fri Nov 15 11:05:36 2019 -0800

    elementary: reduce events triggered by Efl.Ui.PositionManager.
    
    Reviewed-by: SangHyeon Jade Lee <sh10233....@samsung.com>
    Reviewed-by: Marcel Hollerbach <m...@marcel-hollerbach.de>
    Differential Revision: https://phab.enlightenment.org/D10687
---
 src/lib/elementary/efl_ui_collection.c                     |  1 +
 src/lib/elementary/efl_ui_collection_view.c                |  2 ++
 .../elementary/efl_ui_position_manager_data_access_v1.eo   |  1 +
 src/lib/elementary/efl_ui_position_manager_grid.c          |  9 +++++++--
 src/lib/elementary/efl_ui_position_manager_list.c          | 14 ++++++++++++--
 src/tests/elementary/efl_ui_test_position_manager_common.c |  1 +
 6 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/lib/elementary/efl_ui_collection.c 
b/src/lib/elementary/efl_ui_collection.c
index 3e54f79b24..43b1b19521 100644
--- a/src/lib/elementary/efl_ui_collection.c
+++ b/src/lib/elementary/efl_ui_collection.c
@@ -961,6 +961,7 @@ _efl_ui_collection_position_manager_set(Eo *obj, 
Efl_Ui_Collection_Data *pd, Efl
           {
             case 1:
               
efl_ui_position_manager_data_access_v1_data_access_set(pd->pos_man,
+                efl_provider_find(obj, EFL_UI_WIN_CLASS),
                 &pd->obj_accessor, _obj_accessor_get_at, NULL,
                 &pd->size_accessor, _size_accessor_get_at, NULL,
                 eina_list_count(pd->items));
diff --git a/src/lib/elementary/efl_ui_collection_view.c 
b/src/lib/elementary/efl_ui_collection_view.c
index 14122c5771..dcf8f91462 100644
--- a/src/lib/elementary/efl_ui_collection_view.c
+++ b/src/lib/elementary/efl_ui_collection_view.c
@@ -1648,6 +1648,7 @@ _efl_ui_collection_view_position_manager_set(Eo *obj, 
Efl_Ui_Collection_View_Dat
           {
             case 1:
               
efl_ui_position_manager_data_access_v1_data_access_set(pd->manager,
+                efl_provider_find(obj, EFL_UI_WIN_CLASS),
                 efl_ref(obj), _batch_entity_cb, _unref_cb,
                 efl_ref(obj), _batch_size_cb, _unref_cb,
                 count);
@@ -1992,6 +1993,7 @@ _efl_ui_collection_view_model_changed(void *data, const 
Efl_Event *event)
      {
        case 1:
          efl_ui_position_manager_data_access_v1_data_access_set(pd->manager,
+           efl_provider_find(data, EFL_UI_WIN_CLASS),
            efl_ref(data), _batch_entity_cb, _unref_cb,
            efl_ref(data), _batch_size_cb, _unref_cb,
            count);
diff --git a/src/lib/elementary/efl_ui_position_manager_data_access_v1.eo 
b/src/lib/elementary/efl_ui_position_manager_data_access_v1.eo
index ab55c09c38..d7d42c4ad0 100644
--- a/src/lib/elementary/efl_ui_position_manager_data_access_v1.eo
+++ b/src/lib/elementary/efl_ui_position_manager_data_access_v1.eo
@@ -116,6 +116,7 @@ interface @beta Efl.Ui.Position_Manager.Data_Access_V1 {
          set {
          }
          values {
+           canvas: Efl.Ui.Win; [[Will use this object to freeze/thaw canvas 
events.]]
            obj_access : Efl.Ui.Position_Manager.Object_Batch_Callback; 
[[Function callback for canvas objects, even if
                                                                          the 
start_id is valid, the returned objects
                                                                          may 
be $NULL.]]
diff --git a/src/lib/elementary/efl_ui_position_manager_grid.c 
b/src/lib/elementary/efl_ui_position_manager_grid.c
index 7b0ed303f5..949cd66e26 100644
--- a/src/lib/elementary/efl_ui_position_manager_grid.c
+++ b/src/lib/elementary/efl_ui_position_manager_grid.c
@@ -30,6 +30,8 @@ typedef struct {
    Eina_Bool size_cache_dirty;
    Eo *last_group;
    Eina_Future *rebuild_absolut_size;
+   Efl_Ui_Win *window;
+   Evas *canvas;
    Api_Callbacks callbacks;
 } Efl_Ui_Position_Manager_Grid_Data;
 
@@ -769,7 +771,7 @@ 
_efl_ui_position_manager_grid_efl_ui_position_manager_entity_version(Eo *obj EIN
 }
 
 EOLIAN static void
-_efl_ui_position_manager_grid_efl_ui_position_manager_data_access_v1_data_access_set(Eo
 *obj, Efl_Ui_Position_Manager_Grid_Data *pd, void *obj_access_data, 
Efl_Ui_Position_Manager_Object_Batch_Callback obj_access, Eina_Free_Cb 
obj_access_free_cb, void *size_access_data, 
Efl_Ui_Position_Manager_Size_Batch_Callback size_access, Eina_Free_Cb 
size_access_free_cb, int size)
+_efl_ui_position_manager_grid_efl_ui_position_manager_data_access_v1_data_access_set(Eo
 *obj, Efl_Ui_Position_Manager_Grid_Data *pd, Efl_Ui_Win *canvas, void 
*obj_access_data, Efl_Ui_Position_Manager_Object_Batch_Callback obj_access, 
Eina_Free_Cb obj_access_free_cb, void *size_access_data, 
Efl_Ui_Position_Manager_Size_Batch_Callback size_access, Eina_Free_Cb 
size_access_free_cb, int size)
 {
    // Cleanup cache first
    _group_cache_invalidate(obj, pd);
@@ -781,6 +783,9 @@ 
_efl_ui_position_manager_grid_efl_ui_position_manager_data_access_v1_data_access
      pd->callbacks.size.free_cb(pd->callbacks.size.data);
 
    // Set them
+   efl_replace(&pd->window, canvas);
+   efl_replace(&pd->canvas, canvas ? evas_object_evas_get(canvas) : NULL);
+
    pd->callbacks.object.data = obj_access_data;
    pd->callbacks.object.access = obj_access;
    pd->callbacks.object.free_cb = obj_access_free_cb;
@@ -797,7 +802,7 @@ EOLIAN static void
 _efl_ui_position_manager_grid_efl_object_invalidate(Eo *obj,
                                                     
Efl_Ui_Position_Manager_Grid_Data *pd EINA_UNUSED)
 {
-   efl_ui_position_manager_data_access_v1_data_access_set(obj, NULL, NULL, 
NULL, NULL, NULL, NULL, 0);
+   efl_ui_position_manager_data_access_v1_data_access_set(obj, NULL, NULL, 
NULL, NULL, NULL, NULL, NULL, 0);
 
    efl_invalidate(efl_super(obj, EFL_UI_POSITION_MANAGER_GRID_CLASS));
 }
diff --git a/src/lib/elementary/efl_ui_position_manager_list.c 
b/src/lib/elementary/efl_ui_position_manager_list.c
index 34d7e5f073..bd9dd95a08 100644
--- a/src/lib/elementary/efl_ui_position_manager_list.c
+++ b/src/lib/elementary/efl_ui_position_manager_list.c
@@ -25,6 +25,8 @@ typedef struct {
    int maximum_min_size;
    Vis_Segment prev_run;
    Efl_Gfx_Entity *last_group;
+   Efl_Ui_Win *window;
+   Evas *canvas;
    Api_Callbacks callbacks;
 } Efl_Ui_Position_Manager_List_Data;
 
@@ -193,6 +195,8 @@ _position_items(Eo *obj EINA_UNUSED, 
Efl_Ui_Position_Manager_List_Data *pd, Vis_
    else
      geom.x -= (relevant_space_size - cache_access(obj, pd, new.start_id));
 
+   evas_event_freeze(pd->canvas);
+
    for (i = new.start_id; i < new.end_id; ++i)
      {
         Eina_Size2D size;
@@ -291,6 +295,9 @@ _position_items(Eo *obj EINA_UNUSED, 
Efl_Ui_Position_Manager_List_Data *pd, Vis_
 
    efl_gfx_entity_position_set(first_group, first_group_pos);
    efl_gfx_entity_size_set(first_group, first_group_size);
+
+   evas_event_thaw(pd->canvas);
+   evas_event_thaw_eval(pd->canvas);
 }
 
 
@@ -503,7 +510,7 @@ _efl_ui_position_manager_list_efl_object_invalidate(Eo 
*obj, Efl_Ui_Position_Man
    if (pd->rebuild_absolut_size)
      eina_future_cancel(pd->rebuild_absolut_size);
 
-   efl_ui_position_manager_data_access_v1_data_access_set(obj, NULL, NULL, 
NULL, NULL, NULL, NULL, 0);
+   efl_ui_position_manager_data_access_v1_data_access_set(obj, NULL, NULL, 
NULL, NULL, NULL, NULL, NULL, 0);
 
    efl_invalidate(efl_super(obj, MY_CLASS));
 }
@@ -542,7 +549,7 @@ 
_efl_ui_position_manager_list_efl_ui_position_manager_entity_version(Eo *obj EIN
 }
 
 EOLIAN static void
-_efl_ui_position_manager_list_efl_ui_position_manager_data_access_v1_data_access_set(Eo
 *obj, Efl_Ui_Position_Manager_List_Data *pd, void *obj_access_data, 
Efl_Ui_Position_Manager_Object_Batch_Callback obj_access, Eina_Free_Cb 
obj_access_free_cb, void *size_access_data, 
Efl_Ui_Position_Manager_Size_Batch_Callback size_access, Eina_Free_Cb 
size_access_free_cb, int size)
+_efl_ui_position_manager_list_efl_ui_position_manager_data_access_v1_data_access_set(Eo
 *obj, Efl_Ui_Position_Manager_List_Data *pd, Efl_Ui_Win *canvas, void 
*obj_access_data, Efl_Ui_Position_Manager_Object_Batch_Callback obj_access, 
Eina_Free_Cb obj_access_free_cb, void *size_access_data, 
Efl_Ui_Position_Manager_Size_Batch_Callback size_access, Eina_Free_Cb 
size_access_free_cb, int size)
 {
    // Cleanup cache first
    cache_invalidate(obj, pd);
@@ -554,6 +561,9 @@ 
_efl_ui_position_manager_list_efl_ui_position_manager_data_access_v1_data_access
      pd->callbacks.size.free_cb(pd->callbacks.size.data);
 
    // Set them
+   efl_replace(&pd->window, canvas);
+   efl_replace(&pd->canvas, canvas ? evas_object_evas_get(canvas) : NULL);
+
    pd->callbacks.object.data = obj_access_data;
    pd->callbacks.object.access = obj_access;
    pd->callbacks.object.free_cb = obj_access_free_cb;
diff --git a/src/tests/elementary/efl_ui_test_position_manager_common.c 
b/src/tests/elementary/efl_ui_test_position_manager_common.c
index 63e31d472c..ea73d01e4e 100644
--- a/src/tests/elementary/efl_ui_test_position_manager_common.c
+++ b/src/tests/elementary/efl_ui_test_position_manager_common.c
@@ -71,6 +71,7 @@ _initial_setup(void)
    arr_size = eina_inarray_new(sizeof(Eina_Size2D), 10);
 
    efl_ui_position_manager_data_access_v1_data_access_set(position_manager,
+      win,
       NULL, _obj_accessor_get_at, NULL,
       NULL, _size_accessor_get_at, NULL,
       0);

-- 


Reply via email to