elm_gengrid: speed up update order calls

update order can be quite expensive, so this here tries to skip it as
often as possible.

ref T7384

Reviewed-by: SangHyeon Jade Lee <sh10233.lee@samsung.com>
Differential Revision: https://phab.enlightenment.org/D8367
This commit is contained in:
Marcel Hollerbach 2019-03-15 14:12:04 +01:00
parent f1678d06c2
commit 04122ec311
3 changed files with 7 additions and 7 deletions

View File

@ -1268,6 +1268,7 @@ _elm_gengrid_item_unrealize(Elm_Gen_Item *it,
{ {
ELM_GENGRID_DATA_GET_FROM_ITEM(it, sd); ELM_GENGRID_DATA_GET_FROM_ITEM(it, sd);
efl_ui_focus_manager_calc_unregister(sd->obj, EO_OBJ(it)); efl_ui_focus_manager_calc_unregister(sd->obj, EO_OBJ(it));
sd->order_dirty = EINA_TRUE;
} }
evas_event_thaw(evas_object_evas_get(WIDGET(it))); evas_event_thaw(evas_object_evas_get(WIDGET(it)));
@ -1601,6 +1602,7 @@ _item_realize(Elm_Gen_Item *it)
if (!it->realized) if (!it->realized)
{ {
efl_ui_focus_manager_calc_register_logical(sd->obj, EO_OBJ(it), sd->obj, NULL); efl_ui_focus_manager_calc_register_logical(sd->obj, EO_OBJ(it), sd->obj, NULL);
sd->order_dirty = EINA_TRUE;
} }
if ((it->realized) || if ((it->realized) ||
@ -4037,9 +4039,7 @@ _elm_gengrid_item_new(Elm_Gengrid_Data *sd,
(!strcmp(it->itc->item_style, "group_index")); (!strcmp(it->itc->item_style, "group_index"));
sd->item_count++; sd->item_count++;
efl_ui_focus_composition_dirty(sd->obj); return it;
return it;
} }
EOLIAN static void EOLIAN static void
@ -5824,6 +5824,9 @@ _elm_gengrid_efl_ui_focus_object_setup_order(Eo *obj, Elm_Gengrid_Data *pd)
Elm_Gen_Item *item; Elm_Gen_Item *item;
Eina_List *order = NULL; Eina_List *order = NULL;
if (!pd->order_dirty) return;
pd->order_dirty = EINA_FALSE;
EINA_INLIST_FOREACH(pd->items, item) EINA_INLIST_FOREACH(pd->items, item)
{ {
if (item->base->disabled) if (item->base->disabled)

View File

@ -154,6 +154,7 @@ struct _Elm_Gengrid_Data
Eina_Bool scr_minw; Eina_Bool scr_minw;
Eina_Bool scr_minh; Eina_Bool scr_minh;
Eina_Bool order_dirty; /* boolean flag indicating if there needs to be an update to the focus_order of the widget.*/
}; };
struct Elm_Gen_Item_Type struct Elm_Gen_Item_Type

View File

@ -54,10 +54,6 @@ _grid_realized_cb(void *data, const Efl_Event *ev)
if (!elm_object_item_disabled_get(data) && !is_group) if (!elm_object_item_disabled_get(data) && !is_group)
{ {
Elm_Widget_Item_Data *wpd = efl_data_scope_get(data, ELM_WIDGET_ITEM_CLASS);
//first prepare the container
efl_ui_focus_object_setup_order(wpd->widget);
efl_ui_focus_object_setup_order(data); efl_ui_focus_object_setup_order(data);
} }
} }