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:
|
case 1:
|
||||||
efl_ui_position_manager_data_access_v1_data_access_set(pd->pos_man,
|
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->obj_accessor, _obj_accessor_get_at, NULL,
|
||||||
&pd->size_accessor, _size_accessor_get_at, NULL,
|
&pd->size_accessor, _size_accessor_get_at, NULL,
|
||||||
eina_list_count(pd->items));
|
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:
|
case 1:
|
||||||
efl_ui_position_manager_data_access_v1_data_access_set(pd->manager,
|
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_entity_cb, _unref_cb,
|
||||||
efl_ref(obj), _batch_size_cb, _unref_cb,
|
efl_ref(obj), _batch_size_cb, _unref_cb,
|
||||||
count);
|
count);
|
||||||
|
@ -1992,6 +1993,7 @@ _efl_ui_collection_view_model_changed(void *data, const Efl_Event *event)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
efl_ui_position_manager_data_access_v1_data_access_set(pd->manager,
|
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_entity_cb, _unref_cb,
|
||||||
efl_ref(data), _batch_size_cb, _unref_cb,
|
efl_ref(data), _batch_size_cb, _unref_cb,
|
||||||
count);
|
count);
|
||||||
|
|
|
@ -116,6 +116,7 @@ interface @beta Efl.Ui.Position_Manager.Data_Access_V1 {
|
||||||
set {
|
set {
|
||||||
}
|
}
|
||||||
values {
|
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
|
obj_access : Efl.Ui.Position_Manager.Object_Batch_Callback; [[Function callback for canvas objects, even if
|
||||||
the start_id is valid, the returned objects
|
the start_id is valid, the returned objects
|
||||||
may be $NULL.]]
|
may be $NULL.]]
|
||||||
|
|
|
@ -30,6 +30,8 @@ typedef struct {
|
||||||
Eina_Bool size_cache_dirty;
|
Eina_Bool size_cache_dirty;
|
||||||
Eo *last_group;
|
Eo *last_group;
|
||||||
Eina_Future *rebuild_absolut_size;
|
Eina_Future *rebuild_absolut_size;
|
||||||
|
Efl_Ui_Win *window;
|
||||||
|
Evas *canvas;
|
||||||
Api_Callbacks callbacks;
|
Api_Callbacks callbacks;
|
||||||
} Efl_Ui_Position_Manager_Grid_Data;
|
} 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
|
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
|
// Cleanup cache first
|
||||||
_group_cache_invalidate(obj, pd);
|
_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);
|
pd->callbacks.size.free_cb(pd->callbacks.size.data);
|
||||||
|
|
||||||
// Set them
|
// 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.data = obj_access_data;
|
||||||
pd->callbacks.object.access = obj_access;
|
pd->callbacks.object.access = obj_access;
|
||||||
pd->callbacks.object.free_cb = obj_access_free_cb;
|
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_efl_object_invalidate(Eo *obj,
|
||||||
Efl_Ui_Position_Manager_Grid_Data *pd EINA_UNUSED)
|
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));
|
efl_invalidate(efl_super(obj, EFL_UI_POSITION_MANAGER_GRID_CLASS));
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,8 @@ typedef struct {
|
||||||
int maximum_min_size;
|
int maximum_min_size;
|
||||||
Vis_Segment prev_run;
|
Vis_Segment prev_run;
|
||||||
Efl_Gfx_Entity *last_group;
|
Efl_Gfx_Entity *last_group;
|
||||||
|
Efl_Ui_Win *window;
|
||||||
|
Evas *canvas;
|
||||||
Api_Callbacks callbacks;
|
Api_Callbacks callbacks;
|
||||||
} Efl_Ui_Position_Manager_List_Data;
|
} 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
|
else
|
||||||
geom.x -= (relevant_space_size - cache_access(obj, pd, new.start_id));
|
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)
|
for (i = new.start_id; i < new.end_id; ++i)
|
||||||
{
|
{
|
||||||
Eina_Size2D size;
|
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_position_set(first_group, first_group_pos);
|
||||||
efl_gfx_entity_size_set(first_group, first_group_size);
|
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)
|
if (pd->rebuild_absolut_size)
|
||||||
eina_future_cancel(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));
|
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
|
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
|
// Cleanup cache first
|
||||||
cache_invalidate(obj, pd);
|
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);
|
pd->callbacks.size.free_cb(pd->callbacks.size.data);
|
||||||
|
|
||||||
// Set them
|
// 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.data = obj_access_data;
|
||||||
pd->callbacks.object.access = obj_access;
|
pd->callbacks.object.access = obj_access;
|
||||||
pd->callbacks.object.free_cb = obj_access_free_cb;
|
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);
|
arr_size = eina_inarray_new(sizeof(Eina_Size2D), 10);
|
||||||
|
|
||||||
efl_ui_position_manager_data_access_v1_data_access_set(position_manager,
|
efl_ui_position_manager_data_access_v1_data_access_set(position_manager,
|
||||||
|
win,
|
||||||
NULL, _obj_accessor_get_at, NULL,
|
NULL, _obj_accessor_get_at, NULL,
|
||||||
NULL, _size_accessor_get_at, NULL,
|
NULL, _size_accessor_get_at, NULL,
|
||||||
0);
|
0);
|
||||||
|
|
Loading…
Reference in New Issue