rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=5ac9b0a88b8b82d5298ee83efbb7b5e792d2371d
commit 5ac9b0a88b8b82d5298ee83efbb7b5e792d2371d Author: Andrii Kroitor <an.kroi...@samsung.com> Date: Mon May 15 15:02:44 2017 +0300 project_navigator: remove ghost alias items if alias item was deleted by deleting real group, it was still on the list @fix Change-Id: I507e2ff8240e3ddc2248d4065520c27d3b3a762c --- src/bin/ui/project_navigator.c | 68 ++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/src/bin/ui/project_navigator.c b/src/bin/ui/project_navigator.c index 0cfb368..8105a85 100644 --- a/src/bin/ui/project_navigator.c +++ b/src/bin/ui/project_navigator.c @@ -270,7 +270,17 @@ _find_item(Elm_Object_Item *item, const char *name) while (item) { if (elm_genlist_item_type_get(item) != ELM_GENLIST_ITEM_TREE) - item_name = _group_item_label_get(elm_object_item_data_get(item), NULL, NULL); + { + Eina_Strbuf *tmp = eina_strbuf_new(); + Elm_Object_Item *parent = elm_genlist_item_parent_get(item); + if (parent != project_navigator.item_top) + { + eina_strbuf_append(tmp, elm_object_item_data_get(parent)); + } + eina_strbuf_append(tmp, _group_item_label_get(elm_object_item_data_get(item), NULL, NULL)); + item_name = eina_strbuf_string_steal(tmp); + eina_strbuf_free(tmp); + } else item_name = strdup(elm_object_item_data_get(item)); @@ -642,23 +652,11 @@ _folder_del_recursively(Elm_Object_Item *item, const char *folder) static void _folder_del(Elm_Object_Item *item) { - Elm_Object_Item *parent; Eina_Stringshare *folder; folder = elm_object_item_data_get(item); - if (_folder_del_recursively(item, folder)) - { - parent = elm_genlist_item_parent_get(item); - elm_object_item_del(item); - while ((parent != project_navigator.item_top) && - (elm_genlist_item_subitems_count(parent) == 0 )) - { - item = parent; - parent = elm_genlist_item_parent_get(item); - elm_object_item_del(item); - } - } + _folder_del_recursively(item, folder); } static void @@ -668,26 +666,13 @@ _group_del(void *data __UNUSED__, { Eina_Stringshare *group_name; Elm_Object_Item *item, *parent; - Group2 *group; - const Elm_Genlist_Item_Class *itc; - - item = elm_genlist_selected_item_get(project_navigator.genlist); - itc = elm_genlist_item_item_class_get(item); - if (itc != project_navigator.itc_group) return; group_name = (Eina_Stringshare *)event_info; - group = elm_object_item_data_get(item); + item = _find_item(eina_list_data_get(elm_genlist_item_subitems_get(project_navigator.item_top)), group_name); + if (!item) return; - if ((group->common.name == group_name) || !strcmp(group->common.name, group_name)) - { - parent = elm_genlist_item_parent_get(item); - elm_object_item_del(item); - } - else - { - CRIT("Unable to remove group. Income name different from delete."); - return; - } + parent = elm_genlist_item_parent_get(item); + elm_object_item_del(item); while ((parent != project_navigator.item_top) && (elm_genlist_item_subitems_count(parent) == 0 )) @@ -698,6 +683,19 @@ _group_del(void *data __UNUSED__, } } +static Eina_Bool _item_fully_expanded_get(Elm_Object_Item *item) +{ + Eina_Bool ret = true; + const Eina_List *l; + + if (!elm_genlist_item_expanded_get(item)) return false; + + const Eina_List *items = elm_genlist_item_subitems_get(item); + EINA_LIST_FOREACH(items, l, item) + ret &= _item_fully_expanded_get(item); + return ret; +} + static void _folder_del_popup_close_cb(void *data, Evas_Object *obj __UNUSED__, @@ -708,7 +706,11 @@ _folder_del_popup_close_cb(void *data, if (BTN_CANCEL == btn_res) return; + Eina_Bool was_fully_expanded = _item_fully_expanded_get(glit); _folder_del(glit); + // if item was fully expanded it is already deleted by _group_del callback + if (!was_fully_expanded) + elm_object_item_del(glit); elm_object_disabled_set(project_navigator.btn_del, true); } @@ -724,10 +726,6 @@ _group_del_popup_close_cb(void *data, _editor_group_del(group->common.name, true); elm_object_disabled_set(project_navigator.btn_del, true); - - Elm_Object_Item *item; - item = elm_genlist_selected_item_get(project_navigator.genlist); - elm_object_item_del(item); } static void --