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

-- 


Reply via email to