rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=31848fef09fac081df8a9dd9136327f98b95d510

commit 31848fef09fac081df8a9dd9136327f98b95d510
Author: Vyacheslav Reutskiy <[email protected]>
Date:   Fri Feb 10 08:54:38 2017 +0200

    project_navigator: rework group delete for work with names like '/////'
    
    @fix
    
    Change-Id: Ib0a6dc880302d247d0e5697970a58033d6322bd6
---
 src/bin/ui/project_navigator.c | 115 ++++++++++++++++++++---------------------
 1 file changed, 56 insertions(+), 59 deletions(-)

diff --git a/src/bin/ui/project_navigator.c b/src/bin/ui/project_navigator.c
index aad888e..55ccbaf 100644
--- a/src/bin/ui/project_navigator.c
+++ b/src/bin/ui/project_navigator.c
@@ -577,36 +577,52 @@ _folder_check(const char *prefix, Eina_Bool del)
 }
 
 static void
-_folder_del(const char *prefix)
+_folder_del(Elm_Object_Item *item)
 {
-   Eina_List *folders = NULL, *groups = NULL;
+   Elm_Object_Item *itm, *parent;
+   const Eina_List *items;
+   Eina_List *l;
    Eina_Stringshare *tmp, *msg;
    Group2 *group;
+   const Elm_Genlist_Item_Class *itc;
 
-   widget_tree_items_get(ap.project->RM.groups, prefix, &folders, &groups);
-   EINA_LIST_FREE(folders, tmp)
+   items = elm_genlist_item_subitems_get(item);
+   EINA_LIST_FOREACH((Eina_List *)items, l, itm)
      {
-       _folder_del(tmp);
-     }
-   EINA_LIST_FREE(groups, group)
-     {
-        tmp = eina_stringshare_add(group->common.name);
-        if (!editor_group_del(ap.project->global_object, tmp, true))
+        itc = elm_genlist_item_item_class_get(itm);
+        if (itc == project_navigator.itc_folder)
+          {
+             // recursion for del folder
+             _folder_del(itm);
+          }
+        else if (itc == project_navigator.itc_group)
           {
-             msg = eina_stringshare_printf(_("Can't delete layout \"%s\". "
-                                             "Please close a tab with given 
group."),
-                                           group->common.name);
-             TODO("Check if it's correct to ignore error");
-             popup_add(_("Error"), msg, BTN_OK, NULL, NULL);
-             eina_stringshare_del(msg);
+             group = elm_object_item_data_get(itm);
+             tmp = eina_stringshare_add(group->common.name);
+             if (!editor_group_del(ap.project->global_object, tmp, false))
+               {
+                  msg = eina_stringshare_printf(_("Can't delete layout \"%s\". 
"
+                                                  "Please close a tab with 
given group."),
+                                                group->common.name);
+                  TODO("Check if it's correct to ignore error");
+                  popup_add(_("Error"), msg, BTN_OK, NULL, NULL);
+                  eina_stringshare_del(msg);
+               }
+             eina_stringshare_del(tmp);
           }
+        elm_object_item_del(itm);
+     }
+
+   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);
      }
-}
 
-static int
-group_cmp(Resource2 *res1, const char *name)
-{
-   return strncmp(res1->common.name, name, strlen(name));
 }
 
 static void
@@ -615,50 +631,31 @@ _group_del(void *data __UNUSED__,
            void *event_info)
 {
    Eina_Stringshare *group_name;
-   Elm_Object_Item *item;
-   char **arr;
-   unsigned int depth, i;
-   Eina_List *stack = NULL, *l;
-   Eina_Strbuf *buf;
+   Elm_Object_Item *item, *parent;
+   Group2 *group;
 
-   buf = eina_strbuf_new();
    group_name = (Eina_Stringshare *)event_info;
-   item = elm_genlist_first_item_get(project_navigator.genlist);
-   arr = eina_str_split_full(group_name, "/", 0, &depth);
-   for (i = 0; i < depth; i++)
+
+   item = elm_genlist_selected_item_get(project_navigator.genlist);
+   group = elm_object_item_data_get(item);
+   if ((group->common.name == group_name) || !strcmp(group->common.name, 
group_name))
      {
-        item = _find_item(item, arr[i]);
-        eina_strbuf_append_printf(buf, "%s", arr[i]);
-        if (!item) break;
-        if (i != depth - 1)
-          {
-             eina_strbuf_append(buf, "/");
-          }
-        else
-          {
-             if (elm_genlist_item_type_get(item) == ELM_GENLIST_ITEM_TREE)
-               item = _find_item(elm_genlist_item_next_get(item), arr[i]);
-             stack = eina_list_append(stack, item);
-             break;
-          }
-        if (!elm_genlist_item_expanded_get(item) &&
-            NULL != eina_list_search_sorted_list(ap.project->RM.groups, 
(Eina_Compare_Cb)group_cmp, eina_strbuf_string_get(buf)))
-          {
-             stack = eina_list_append(stack, item);
-             break;
-          }
-        stack = eina_list_append(stack, item);
-        item = eina_list_data_get(elm_genlist_item_subitems_get(item));
+        parent = elm_genlist_item_parent_get(item);
+        elm_object_item_del(item);
      }
-   EINA_LIST_REVERSE_FOREACH(stack, l, item)
+   else
      {
-        if (elm_genlist_item_subitems_count(item) == 0)
-          elm_object_item_del(item);
+        CRIT("Unable to remove group. Income name different from delete.");
+        return;
      }
 
-   eina_strbuf_free(buf);
-   free(arr[0]);
-   free(arr);
+   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);
+     }
 }
 
 static void
@@ -671,7 +668,7 @@ _folder_del_popup_close_cb(void *data,
 
    if (BTN_CANCEL == btn_res) return;
 
-   _folder_del(elm_object_item_data_get(glit));
+   _folder_del(glit);
    elm_object_disabled_set(project_navigator.btn_del, true);
 }
 

-- 


Reply via email to