raster pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=658138ff2bd7b7a6b3147105639789809ea8a71b

commit 658138ff2bd7b7a6b3147105639789809ea8a71b
Author: Hosang Kim <hosang12....@samsung.com>
Date:   Tue Jul 22 15:11:17 2014 +0900

    genlist : Add item looping on flag.
    
    Summary: When item looping feature is on and press up or down key, screen 
seems to be frozen.
    
    Test Plan: elementary_test -to "genlist focus" -> click item looing enable 
-> move list up and down
    
    Reviewers: anand.km, seoz, woohyun
    
    Subscribers: singh.amitesh
    
    Differential Revision: https://phab.enlightenment.org/D1193
---
 src/lib/elm_genlist.c        | 22 +++++++++++++++++++---
 src/lib/elm_list.c           | 40 +++++++++++++++++++++++++++++++++++-----
 src/lib/elm_widget_genlist.h |  1 +
 src/lib/elm_widget_list.h    |  1 +
 4 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c
index 7857d37..e874dc7 100644
--- a/src/lib/elm_genlist.c
+++ b/src/lib/elm_genlist.c
@@ -2636,14 +2636,20 @@ _key_action_move_dir(Evas_Object *obj, 
Elm_Focus_Direction dir, Eina_Bool multi)
 
    focus_only = _elm_config->item_select_on_focus_disable && 
elm_widget_focus_highlight_enabled_get(obj);
    // handle item loop feature
-   if (sd->item_loop_enable)
+   if (sd->item_loop_enable && !sd->item_looping_on)
      {
         if (min > v)
           {
              if (dir == ELM_FOCUS_UP)
-               elm_layout_signal_emit(obj, "elm,action,looping,up", "elm");
+               {
+                  elm_layout_signal_emit(obj, "elm,action,looping,up", "elm");
+                  sd->item_looping_on = EINA_TRUE;
+               }
              else if (dir == ELM_FOCUS_DOWN)
-               elm_layout_signal_emit(obj, "elm,action,looping,down", "elm");
+               {
+                  elm_layout_signal_emit(obj, "elm,action,looping,down", 
"elm");
+                  sd->item_looping_on = EINA_TRUE;
+               }
           }
         else
           {
@@ -2659,6 +2665,8 @@ _key_action_move_dir(Evas_Object *obj, 
Elm_Focus_Direction dir, Eina_Bool multi)
           }
         return EINA_TRUE;
      }
+   else if (sd->item_looping_on)
+     return EINA_TRUE;
 
    return EINA_FALSE;
 }
@@ -5185,12 +5193,16 @@ _elm_genlist_looping_up_cb(void *data,
                           const char *source EINA_UNUSED)
 {
    Evas_Object *genlist = data;
+
+   ELM_GENLIST_DATA_GET(genlist, sd);
+
    Elm_Object_Item *it = elm_genlist_last_item_get(genlist);
    if (!_elm_config->item_select_on_focus_disable)
      elm_genlist_item_selected_set(it, EINA_TRUE);
    else
      elm_object_item_focus_set(it, EINA_TRUE);
    elm_layout_signal_emit(genlist, "elm,action,looping,up,end", "elm");
+   sd->item_looping_on = EINA_FALSE;
 }
 
 static void
@@ -5200,12 +5212,16 @@ _elm_genlist_looping_down_cb(void *data,
                           const char *source EINA_UNUSED)
 {
    Evas_Object *genlist = data;
+
+   ELM_GENLIST_DATA_GET(genlist, sd);
+
    Elm_Object_Item *it = elm_genlist_first_item_get(genlist);
    if (!_elm_config->item_select_on_focus_disable)
      elm_genlist_item_selected_set(it, EINA_TRUE);
    else
      elm_object_item_focus_set(it, EINA_TRUE);
    elm_layout_signal_emit(genlist, "elm,action,looping,down,end", "elm");
+   sd->item_looping_on = EINA_FALSE;
 }
 
 
diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c
index fa9c03a..bf20b91 100644
--- a/src/lib/elm_list.c
+++ b/src/lib/elm_list.c
@@ -392,18 +392,30 @@ _elm_list_elm_widget_event_direction(Evas_Object *obj, 
Elm_Focus_Direction dir,
      return EINA_TRUE;
 
    // handle item loop feature
-   if (sd->item_loop_enable)
+   if (sd->item_loop_enable && !sd->item_looping_on)
      {
         if (min > v)
           {
              if (dir == ELM_FOCUS_LEFT)
-               elm_layout_signal_emit(obj, "elm,action,looping,left", "elm");
+               {
+                  elm_layout_signal_emit(obj, "elm,action,looping,left", 
"elm");
+                  sd->item_looping_on = EINA_TRUE;
+               }
              else if (dir == ELM_FOCUS_RIGHT)
-               elm_layout_signal_emit(obj, "elm,action,looping,right", "elm");
+               {
+                  elm_layout_signal_emit(obj, "elm,action,looping,right", 
"elm");
+                  sd->item_looping_on = EINA_TRUE;
+               }
              else if (dir == ELM_FOCUS_UP)
-               elm_layout_signal_emit(obj, "elm,action,looping,up", "elm");
+               {
+                  elm_layout_signal_emit(obj, "elm,action,looping,up", "elm");
+                  sd->item_looping_on = EINA_TRUE;
+               }
              else if (dir == ELM_FOCUS_DOWN)
-               elm_layout_signal_emit(obj, "elm,action,looping,down", "elm");
+               {
+                  elm_layout_signal_emit(obj, "elm,action,looping,down", 
"elm");
+                  sd->item_looping_on = EINA_TRUE;
+               }
           }
         else
           {
@@ -419,6 +431,8 @@ _elm_list_elm_widget_event_direction(Evas_Object *obj, 
Elm_Focus_Direction dir,
           }
         return EINA_TRUE;
      }
+   else if (sd->item_looping_on)
+     return EINA_TRUE;
 
    return EINA_FALSE;
 }
@@ -1719,12 +1733,16 @@ _elm_list_looping_left_cb(void *data,
                           const char *source EINA_UNUSED)
 {
    Evas_Object *list = data;
+
+   ELM_LIST_DATA_GET(list, sd);
+
    Elm_List_Item *it = (Elm_List_Item *)elm_list_last_item_get(list);
    if (!_elm_config->item_select_on_focus_disable)
      elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
    else
      elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
    elm_layout_signal_emit(list, "elm,action,looping,left,end", "elm");
+   sd->item_looping_on = EINA_FALSE;
 }
 
 static void
@@ -1734,12 +1752,16 @@ _elm_list_looping_right_cb(void *data,
                           const char *source EINA_UNUSED)
 {
    Evas_Object *list = data;
+
+   ELM_LIST_DATA_GET(list, sd);
+
    Elm_List_Item *it = (Elm_List_Item *)elm_list_first_item_get(list);
    if (!_elm_config->item_select_on_focus_disable)
      elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
    else
      elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
    elm_layout_signal_emit(list, "elm,action,looping,right,end", "elm");
+   sd->item_looping_on = EINA_FALSE;
 }
 
 static void
@@ -1749,12 +1771,16 @@ _elm_list_looping_up_cb(void *data,
                           const char *source EINA_UNUSED)
 {
    Evas_Object *list = data;
+
+   ELM_LIST_DATA_GET(list, sd);
+
    Elm_List_Item *it = (Elm_List_Item *)elm_list_last_item_get(list);
    if (!_elm_config->item_select_on_focus_disable)
      elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
    else
      elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
    elm_layout_signal_emit(list, "elm,action,looping,up,end", "elm");
+   sd->item_looping_on = EINA_FALSE;
 }
 
 static void
@@ -1764,12 +1790,16 @@ _elm_list_looping_down_cb(void *data,
                           const char *source EINA_UNUSED)
 {
    Evas_Object *list = data;
+
+   ELM_LIST_DATA_GET(list, sd);
+
    Elm_List_Item *it = (Elm_List_Item *)elm_list_first_item_get(list);
    if (!_elm_config->item_select_on_focus_disable)
      elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
    else
      elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
    elm_layout_signal_emit(list, "elm,action,looping,down,end", "elm");
+   sd->item_looping_on = EINA_FALSE;
 }
 
 static void
diff --git a/src/lib/elm_widget_genlist.h b/src/lib/elm_widget_genlist.h
index ab0945b..098914e 100644
--- a/src/lib/elm_widget_genlist.h
+++ b/src/lib/elm_widget_genlist.h
@@ -185,6 +185,7 @@ struct _Elm_Genlist_Data
    Eina_Bool                             swipe : 1;
    /**< value whether item loop feature is enabled or not. */
    Eina_Bool                             item_loop_enable : 1;
+   Eina_Bool                             item_looping_on : 1;
 };
 
 typedef struct _Item_Block Item_Block;
diff --git a/src/lib/elm_widget_list.h b/src/lib/elm_widget_list.h
index 0ee0d87..51d14e6 100644
--- a/src/lib/elm_widget_list.h
+++ b/src/lib/elm_widget_list.h
@@ -54,6 +54,7 @@ struct _Elm_List_Data
    Eina_Bool                             delete_me : 1;
    Eina_Bool                             mouse_down : 1; /**< a flag that 
mouse is down on the list at the moment. this flag is set to true on mouse and 
reset to false on mouse up */
    Eina_Bool                             item_loop_enable : 1; /**< value 
whether item loop feature is enabled or not. */
+   Eina_Bool                             item_looping_on : 1;
 };
 
 typedef struct _Elm_List_Item Elm_List_Item;

-- 


Reply via email to