forked from enlightenment/efl
elementary: reduce events triggered by Efl.Ui.PositionManager.
Reviewed-by: SangHyeon Jade Lee <sh10233.lee@samsung.com> Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de> Differential Revision: https://phab.enlightenment.org/D10687
This commit is contained in:
parent
d62e2585bb
commit
2b324779c9
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.]]
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue