davemds pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f0a0da9f449b0878fe6a5ce2abc50b8b6589c50a

commit f0a0da9f449b0878fe6a5ce2abc50b8b6589c50a
Author: Dave Andreoli <d...@gurumeditation.it>
Date:   Fri Apr 13 20:37:36 2018 +0200

    Genlist: restore old behaviour of item next/prev in group items
    
    Commit fd82c2521 has changed the behaviour of item_next/prev_get()
    in case of genlist with group items (not tree).
    
    The lagacy behaviour was to tread normal items and group items
    in a flat way, like if group items was on the same level of
    the children normal items.
    
    As the commit already implement bug compatibility, seems to me
    the case to restore also this case. Note that this changes only
    apply to legacy genlist (I think).
    
    Let me know if this broke something for you...as touching genlist
    code is always an "I hope this is right" operation.
---
 src/lib/elementary/elm_genlist.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c
index 82025ebe0a..012b99a397 100644
--- a/src/lib/elementary/elm_genlist.c
+++ b/src/lib/elementary/elm_genlist.c
@@ -6958,6 +6958,12 @@ _elm_genlist_next_item_get_insane(Elm_Genlist_Data *sd, 
Elm_Gen_Item *it)
         if (sd->filter && !_item_filtered_get(it2))
           continue;
 
+        // Insanity does not apply for group items
+        // (group and normal items was treated in a flat way)
+        if (it->item->type == ELM_GENLIST_ITEM_GROUP ||
+            it2->item->type == ELM_GENLIST_ITEM_GROUP)
+             return EO_OBJ(it2);
+
         // 1. Return next sibling in list, if any
         if (it->parent == it2->parent)
           return EO_OBJ(it2);
@@ -6981,7 +6987,7 @@ _elm_genlist_next_item_get_insane(Elm_Genlist_Data *sd, 
Elm_Gen_Item *it)
           return EO_OBJ(it->parent);
      }
    /* if item is already last item, return its parent if a parent exists */
-   if (it->parent)
+   if (it->parent && it->parent->item->type != ELM_GENLIST_ITEM_GROUP)
      return EO_OBJ(it->parent);
    return EO_OBJ(it2);
 }
@@ -7001,6 +7007,16 @@ _elm_genlist_prev_item_get_insane(Elm_Genlist_Data *sd, 
Elm_Gen_Item *it)
         return EO_OBJ(it2);
      }
 
+   // Insanity does not apply for group items
+   // (group and normal items was treated in a flat way)
+   if (it->item->type == ELM_GENLIST_ITEM_GROUP)
+     {
+        for (it2 = ELM_GEN_ITEM_PREV(it); it2; it2 = ELM_GEN_ITEM_PREV(it2))
+          if (!sd->filter || _item_filtered_get(it2))
+            break;
+        return EO_OBJ(it2);
+     }
+
    parent = it->parent;
    if (!parent)
      {
@@ -7020,7 +7036,7 @@ _elm_genlist_prev_item_get_insane(Elm_Genlist_Data *sd, 
Elm_Gen_Item *it)
      }
 
    it2 = ELM_GEN_ITEM_PREV(it);
-   if (it2 == parent)
+   if (it2 == parent && it2->item->type != ELM_GENLIST_ITEM_GROUP)
      return _elm_genlist_prev_item_get_insane(sd, it2);
 
    return EO_OBJ(it2);

-- 


Reply via email to