diff options
Diffstat (limited to 'src/lib/elementary/efl_ui_list.c')
-rw-r--r-- | src/lib/elementary/efl_ui_list.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/lib/elementary/efl_ui_list.c b/src/lib/elementary/efl_ui_list.c index 653996dda0..37aae08fc4 100644 --- a/src/lib/elementary/efl_ui_list.c +++ b/src/lib/elementary/efl_ui_list.c @@ -201,6 +201,7 @@ _focused_element(void *data EINA_UNUSED, const Efl_Event *event) Efl_Ui_List_Data *pd = data; Eo *focused = event->info; EINA_SAFETY_ON_NULL_RETURN(pd); + printf("item focused\n"); if (!_elm_config->item_select_on_focus_disable) _efl_ui_list_item_select_set(pd, focused, EINA_TRUE); @@ -531,10 +532,11 @@ _child_setup(Efl_Ui_List_Data *pd, Efl_Ui_List_Item* item, Efl_Model *model item->obj = pd->obj; item->model = efl_ref(model); - if(eina_inarray_count(recycle_layouts)) - item->layout = *(void**)eina_inarray_pop(recycle_layouts); - else - item->layout = efl_add(ELM_LAYOUT_CLASS, pd->obj); +// if(eina_inarray_count(recycle_layouts)) +// item->layout = *(void**)eina_inarray_pop(recycle_layouts); +// else +// item->layout = efl_add(ELM_LAYOUT_CLASS, pd->obj); + item->layout = efl_ui_factory_create(pd->factory, item->model, pd->obj); item->future = NULL; item->index = idx + pd->realized.start; item->minw = item->minh = 0; @@ -563,8 +565,9 @@ _child_release(Efl_Ui_List_Data* pd, Efl_Ui_List_Item* item, Eina_Inarray* recyc efl_future_cancel(item->future); efl_unref(item->model); // discard elm_layout to thrash to be able to reuse it - assert(item->layout != NULL); - eina_inarray_push(recycle_layouts, &item->layout); +// assert(item->layout != NULL); +// eina_inarray_push(recycle_layouts, &item->layout); + efl_ui_factory_release(pd->factory, item->layout); item->layout = NULL; if(_horiz(pd->orient)) pd->realized.w -= item->w; @@ -907,7 +910,10 @@ _efl_ui_list_elm_widget_on_focus(Eo *obj, Efl_Ui_List_Data *pd EINA_UNUSED, Elm_ //TODO: with no focused focus first visible element if (!efl_ui_focus_manager_focused(pd->manager)) + { + printf(">>>> no item focused\n"); efl_ui_focus_manager_focus(pd->manager, obj); + } return elm_obj_widget_on_focus(efl_super(obj, MY_CLASS), item); } @@ -1136,6 +1142,7 @@ _efl_ui_list_efl_object_constructor(Eo *obj, Efl_Ui_List_Data *pd) pd->style = eina_stringshare_add(elm_widget_style_get(obj)); + pd->factory = NULL; pd->orient = EFL_ORIENT_DOWN; pd->align.h = 0; pd->align.v = 0; @@ -1154,6 +1161,16 @@ _efl_ui_list_efl_object_destructor(Eo *obj, Efl_Ui_List_Data *pd) } EOLIAN static void +_efl_ui_list_layout_factory_set(Eo *obj EINA_UNUSED, Efl_Ui_List_Data *pd, Efl_Ui_Factory *factory) +{ + //TODO: clean all current layouts?? + if (pd->factory) + efl_unref(pd->factory); + + pd->factory = efl_ref(factory); +} + +EOLIAN static void _efl_ui_list_efl_ui_view_model_set(Eo *obj, Efl_Ui_List_Data *pd, Efl_Model *model) { if (pd->model == model) @@ -1171,6 +1188,10 @@ _efl_ui_list_efl_ui_view_model_set(Eo *obj, Efl_Ui_List_Data *pd, Efl_Model *mod _efl_ui_list_children_free(obj, pd); + + if (!pd->factory) + pd->factory = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, obj); + if (model) { pd->model = model; |