rimmed pushed a commit to branch eflete-1.18.

http://git.enlightenment.org/tools/eflete.git/commit/?id=56672ef2877b1cc80600f2040687d8cee2513c45

commit 56672ef2877b1cc80600f2040687d8cee2513c45
Author: Vyacheslav Reutskiy <v.reuts...@samsung.com>
Date:   Fri Feb 10 08:54:38 2017 +0200

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

diff --git a/src/bin/ui/project_navigator.c b/src/bin/ui/project_navigator.c
index 93594ce..d02ba7b 100644
--- a/src/bin/ui/project_navigator.c
+++ b/src/bin/ui/project_navigator.c
@@ -530,55 +530,51 @@ _btn_add_group_cb(void *data __UNUSED__,
 }
 
 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;
-   Group *group, *alias;
-
-   widget_tree_items_get(ap.project->groups, prefix, &folders, &groups);
-   EINA_LIST_FREE(folders, tmp)
-     {
-       _folder_del(tmp);
-     }
+   Group *group;
+   const Elm_Genlist_Item_Class *itc;
 
-   EINA_LIST_FREE(groups, group)
+   items = elm_genlist_item_subitems_get(item);
+   EINA_LIST_FOREACH((Eina_List *)items, l, itm)
      {
-        if (group->main_group) continue;
-        EINA_LIST_FREE(group->aliases, alias)
+        itc = elm_genlist_item_item_class_get(itm);
+        if (itc == project_navigator.itc_folder)
           {
-             tmp = eina_stringshare_add(alias->name);
-             if (editor_group_del(ap.project->global_object, tmp))
-               gm_group_del(ap.project, alias);
-             else
+             // recursion for del folder
+             _folder_del(itm);
+          }
+        else if (itc == project_navigator.itc_group)
+          {
+             group = elm_object_item_data_get(itm);
+             tmp = eina_stringshare_add(group->name);
+             if (!editor_group_del(ap.project->global_object, tmp))
                {
-                  msg = eina_stringshare_printf(_("Can't delete alias layout 
\"%s\""), alias->name);
+                  msg = eina_stringshare_printf(_("Can't delete layout \"%s\". 
"
+                                                  "Please close a tab with 
given group."),
+                                                group->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);
           }
-
-        tmp = eina_stringshare_add(group->name);
-        if (editor_group_del(ap.project->global_object, tmp))
-          gm_group_del(ap.project, group);
-        else
-          {
-             msg = eina_stringshare_printf(_("Can't delete layout \"%s\". "
-                                            "Please close a tab with given 
group."), group->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);
      }
-}
 
-static int
-group_cmp(Resource *res1, const char *name)
-{
-   return strncmp(res1->name, name, strlen(name));
+   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 void
@@ -587,47 +583,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;
+   Group *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->name == group_name) || !strcmp(group->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->groups, 
(Eina_Compare_Cb)group_cmp, eina_strbuf_string_get(buf)))
-          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 (0 == elm_genlist_item_subitems_count(item))
-          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
@@ -640,7 +620,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