rimmed pushed a commit to branch eflete-1.18.

http://git.enlightenment.org/tools/eflete.git/commit/?id=629f7a0f1a91b1322afadaa368c8e757dec60389

commit 629f7a0f1a91b1322afadaa368c8e757dec60389
Author: Vyacheslav Reutskiy <v.reuts...@samsung.com>
Date:   Wed Feb 8 13:59:21 2017 +0200

    project_navigator: rework group add for work with names like '/////'
    
    @fix
    
    Change-Id: Ibbda16231d3dcf1cf998f2cda623f440688e6144
    
     Conflicts:
            src/bin/ui/project_navigator.c
---
 src/bin/ui/project_navigator.c | 75 +++++++++++++++++++++++++-----------------
 1 file changed, 44 insertions(+), 31 deletions(-)

diff --git a/src/bin/ui/project_navigator.c b/src/bin/ui/project_navigator.c
index 6afdffd..93594ce 100644
--- a/src/bin/ui/project_navigator.c
+++ b/src/bin/ui/project_navigator.c
@@ -260,7 +260,7 @@ _find_item(Elm_Object_Item *item, const char *name)
         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);
         else
-          item_name = _folder_item_label_get(elm_object_item_data_get(item), 
NULL, NULL);
+          item_name = strdup(elm_object_item_data_get(item));
 
         if (!strcmp(item_name, name))
           {
@@ -286,6 +286,9 @@ _items_compare(const void *data1, const void *data2)
    it1_class = elm_genlist_item_item_class_get(it1);
    it2_class = elm_genlist_item_item_class_get(it2);
 
+   if (it1 == project_navigator.item_top) return -1;
+   if (it2 == project_navigator.item_top) return 1;
+
    if ((it1_class == project_navigator.itc_group) &&
        (it2_class == project_navigator.itc_folder))
      {
@@ -317,54 +320,64 @@ _group_add(void *data __UNUSED__,
 {
    Group *group;
    Elm_Object_Item *item, *parent = NULL;
-   char **arr;
-   unsigned int count, i = 0;
    Eina_Stringshare *prefix;
+   Eina_List *list = NULL, *folders = NULL, *groups = NULL;
+   int to_add = 0;
 
    group = (Group *)event_info;
-   item = elm_genlist_first_item_get(project_navigator.genlist);
-   if (!elm_genlist_item_expanded_get(item)) return;
-   arr = eina_str_split_full(group->name, "/", 0, &count);
+   if (!elm_genlist_item_expanded_get(project_navigator.item_top)) return;
+   item = project_navigator.item_top;
 
-   if (count > 1)
+   list = eina_list_append(list, group);
+   prefix = eina_stringshare_add("");
+   while (to_add == 0)
      {
-        for (i = 0; i < count; i++)
+        eina_list_free(folders);
+        folders = NULL;
+        eina_list_free(groups);
+        groups = NULL;
+
+        widget_tree_items_get(list, prefix, &folders, &groups);
+        if (eina_list_count(folders) > 0)
           {
-             parent = elm_genlist_item_parent_get(item);
-             item = _find_item(item, arr[i]);
-             if (!item) break;
-             if (elm_genlist_item_item_class_get(item) != 
project_navigator.itc_folder) break;
-             if (!elm_genlist_item_expanded_get(item)) goto exit;
-             item = eina_list_data_get(elm_genlist_item_subitems_get(item));
+             eina_stringshare_del(prefix);
+             prefix = eina_list_data_get(folders);
+             parent = item;
+             item = 
_find_item(eina_list_data_get(elm_genlist_item_subitems_get(item)), prefix);
+             if (!item)
+               {
+                  to_add = 1;
+                  break;
+               }
+             if (!elm_genlist_item_expanded_get(item)) return;
           }
+        else if (eina_list_count(groups) > 0)
+          to_add = 2;
      }
-   if (!parent) parent = project_navigator.item_top;
+   eina_list_free(folders);
+   eina_list_free(groups);
+   eina_list_free(list);
 
-   if ((count > 1) && (i != count - 1))
+   if (to_add == 1)
      {
-        prefix = widget_prefix_get(group->name, i, NULL);
-        item = elm_genlist_item_sorted_insert(project_navigator.genlist,
-                                              project_navigator.itc_folder,
-                                              prefix,
-                                              parent,
-                                              ELM_GENLIST_ITEM_TREE,
-                                              _items_compare,
-                                              NULL,
-                                              NULL);
+        elm_genlist_item_sorted_insert(project_navigator.genlist,
+                                       project_navigator.itc_folder,
+                                       prefix,
+                                       parent ? parent : 
project_navigator.item_top,
+                                       ELM_GENLIST_ITEM_TREE,
+                                       _items_compare,
+                                       NULL,
+                                       NULL);
      }
-   else
+   else if (to_add == 2)
      elm_genlist_item_sorted_insert(project_navigator.genlist,
                                     project_navigator.itc_group,
                                     group,
-                                    parent,
+                                    parent ? parent : 
project_navigator.item_top,
                                     ELM_GENLIST_ITEM_NONE,
                                     _items_compare,
                                     NULL,
                                     NULL);
-
-exit:
-   free(arr[0]);
-   free(arr);
 }
 
 static void

-- 


Reply via email to