diff options
author | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2018-08-07 13:25:34 +0900 |
---|---|---|
committer | SangHyeon Jade Lee <sh10233.lee@samsung.com> | 2018-08-07 13:25:34 +0900 |
commit | f36880088b9a9dd14bac478aa1a514c3d9bdb361 (patch) | |
tree | 88be4a24475ad747949c7f21166bc20854a65f0b | |
parent | c54b7a4ab344eea057209dbe580c5918391ee4b6 (diff) | |
download | efl-f36880088b9a9dd14bac478aa1a514c3d9bdb361.tar.gz |
elm_genlist: fix item registration by correct realization
Summary:
there was a case when a block could be realized while a item that is
realized was brought from one block to the this new one. The block now
is simply realized using api instead of just setting the flag, this sets
the correct focus registrations. While fixing this the error of double
regiration of items came up, this is also fixed by unregistration and
reregistration in the correct block.
fix T7247
Reviewers: zmike, SanghyeonLee, YOhoho
Reviewed By: zmike
Subscribers: Hermet, cedric, #committers
Tags: #efl
Maniphest Tasks: T7247
Differential Revision: https://phab.enlightenment.org/D6737
-rw-r--r-- | src/lib/elementary/elm_genlist.c | 27 | ||||
-rw-r--r-- | src/lib/elementary/elm_widget_item_static_focus.c | 5 |
2 files changed, 29 insertions, 3 deletions
diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c index d5d2eec871..8ee19ae005 100644 --- a/src/lib/elementary/elm_genlist.c +++ b/src/lib/elementary/elm_genlist.c @@ -2542,6 +2542,8 @@ _item_block_realize(Item_Block *itb) if (!itb->adapter) { itb->adapter = efl_add(EFL_UI_FOCUS_COMPOSITION_ADAPTER_CLASS, itb->sd->obj); + efl_ui_focus_composition_adapter_focus_manager_parent_set(itb->adapter, itb->sd->obj); + efl_ui_focus_composition_adapter_focus_manager_object_set(itb->adapter, itb->sd->obj); efl_ui_focus_manager_calc_register_logical(itb->sd->obj, itb->adapter, itb->sd->obj, NULL); _flush_block_order(itb->sd); } @@ -3578,9 +3580,13 @@ _item_block_merge(Item_Block *left, EINA_LIST_FOREACH(right->items, l, it2) { + if (right->realized) + efl_ui_focus_manager_calc_unregister(right->sd->obj, EO_OBJ(it2)); it2->item->block = left; left->count++; left->changed = EINA_TRUE; + if (left->realized) + efl_ui_focus_manager_calc_register_logical(right->sd->obj, EO_OBJ(it2), left->adapter, NULL); } left->items = eina_list_merge(left->items, right->items); } @@ -4576,8 +4582,10 @@ newblock: itb->items = eina_list_remove_list (itb->items, itb->items); itb->count--; + efl_ui_focus_manager_calc_unregister(itb->sd->obj, EO_OBJ(it2)); itbp->items = eina_list_append(itbp->items, it2); + _update_block_registration(itbp, it2); it2->item->block = itbp; itbp->count++; if (!it2->hide) @@ -4587,7 +4595,10 @@ newblock: itbp->vis_count++; } - if (it2->realized) itbp->realized = EINA_TRUE; + if (it2->realized) + { + _item_block_realize(itbp); + } } done = EINA_TRUE; @@ -4609,8 +4620,10 @@ newblock: it2 = eina_list_data_get(l); itb->items = eina_list_remove_list(itb->items, l); itb->count--; + efl_ui_focus_manager_calc_unregister(itb->sd->obj, EO_OBJ(it2)); itbn->items = eina_list_prepend(itbn->items, it2); + _update_block_registration(itbn, it2); it2->item->block = itbn; itbn->count++; if (!it2->hide) @@ -4621,7 +4634,10 @@ newblock: itbn->vis_count++; } - if (it2->realized) itbn->realized = EINA_TRUE; + if (it2->realized) + { + _item_block_realize(itbn); + } } done = EINA_TRUE; @@ -4646,8 +4662,10 @@ newblock: it2 = l->data; itb->items = eina_list_remove_list(itb->items, l); itb->count--; + efl_ui_focus_manager_calc_unregister(itb->sd->obj, EO_OBJ(it2)); itb2->items = eina_list_prepend(itb2->items, it2); + _update_block_registration(itb2, it2); it2->item->block = itb2; itb2->count++; if (!it2->hide) @@ -4658,7 +4676,10 @@ newblock: itb2->h += it2->item->h; } - if (it2->realized) itb2->realized = EINA_TRUE; + if (it2->realized) + { + _item_block_realize(itb2); + } } itb2->num = itb->num + itb->vis_count; diff --git a/src/lib/elementary/elm_widget_item_static_focus.c b/src/lib/elementary/elm_widget_item_static_focus.c index 4a90d5f822..4c859f4d83 100644 --- a/src/lib/elementary/elm_widget_item_static_focus.c +++ b/src/lib/elementary/elm_widget_item_static_focus.c @@ -98,6 +98,11 @@ _elm_widget_item_static_focus_efl_ui_focus_object_prepare_logical_none_recursive { next_widget = NULL; } + //check if this is the item block representation of genlist + else if (efl_isa(next_widget, EFL_UI_FOCUS_COMPOSITION_ADAPTER_CLASS) && efl_ui_focus_object_focus_parent_get(next_widget) == wpd->widget) + { + next_widget = NULL; + } logical_child = next_widget; } |