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
This commit is contained in:
Hosang Kim 2014-07-22 15:11:17 +09:00 committed by Carsten Haitzler (Rasterman)
parent 00f6438bad
commit 105ee3660d
4 changed files with 56 additions and 8 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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;