summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHosang Kim <hosang12.kim@samsung.com>2014-07-22 15:11:17 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2014-07-22 15:11:18 +0900
commit658138ff2bd7b7a6b3147105639789809ea8a71b (patch)
tree4e972dd8befe48fe5967e93730c6a5e58497793b
parentcfdaffb8cf65ab0a934de2efb513e66989b4bad6 (diff)
downloadelementary-658138ff2bd7b7a6b3147105639789809ea8a71b.tar.gz
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
-rw-r--r--src/lib/elm_genlist.c22
-rw-r--r--src/lib/elm_list.c40
-rw-r--r--src/lib/elm_widget_genlist.h1
-rw-r--r--src/lib/elm_widget_list.h1
4 files changed, 56 insertions, 8 deletions
diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c
index 7857d37d0..e874dc7cd 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 fa9c03acd..bf20b911f 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 ab0945bbf..098914ee1 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 0ee0d8791..51d14e68f 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;