forked from enlightenment/efl
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:
parent
00f6438bad
commit
105ee3660d
|
@ -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);
|
focus_only = _elm_config->item_select_on_focus_disable && elm_widget_focus_highlight_enabled_get(obj);
|
||||||
// handle item loop feature
|
// handle item loop feature
|
||||||
if (sd->item_loop_enable)
|
if (sd->item_loop_enable && !sd->item_looping_on)
|
||||||
{
|
{
|
||||||
if (min > v)
|
if (min > v)
|
||||||
{
|
{
|
||||||
if (dir == ELM_FOCUS_UP)
|
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)
|
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
|
else
|
||||||
{
|
{
|
||||||
|
@ -2659,6 +2665,8 @@ _key_action_move_dir(Evas_Object *obj, Elm_Focus_Direction dir, Eina_Bool multi)
|
||||||
}
|
}
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
else if (sd->item_looping_on)
|
||||||
|
return EINA_TRUE;
|
||||||
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -5185,12 +5193,16 @@ _elm_genlist_looping_up_cb(void *data,
|
||||||
const char *source EINA_UNUSED)
|
const char *source EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Evas_Object *genlist = data;
|
Evas_Object *genlist = data;
|
||||||
|
|
||||||
|
ELM_GENLIST_DATA_GET(genlist, sd);
|
||||||
|
|
||||||
Elm_Object_Item *it = elm_genlist_last_item_get(genlist);
|
Elm_Object_Item *it = elm_genlist_last_item_get(genlist);
|
||||||
if (!_elm_config->item_select_on_focus_disable)
|
if (!_elm_config->item_select_on_focus_disable)
|
||||||
elm_genlist_item_selected_set(it, EINA_TRUE);
|
elm_genlist_item_selected_set(it, EINA_TRUE);
|
||||||
else
|
else
|
||||||
elm_object_item_focus_set(it, EINA_TRUE);
|
elm_object_item_focus_set(it, EINA_TRUE);
|
||||||
elm_layout_signal_emit(genlist, "elm,action,looping,up,end", "elm");
|
elm_layout_signal_emit(genlist, "elm,action,looping,up,end", "elm");
|
||||||
|
sd->item_looping_on = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -5200,12 +5212,16 @@ _elm_genlist_looping_down_cb(void *data,
|
||||||
const char *source EINA_UNUSED)
|
const char *source EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Evas_Object *genlist = data;
|
Evas_Object *genlist = data;
|
||||||
|
|
||||||
|
ELM_GENLIST_DATA_GET(genlist, sd);
|
||||||
|
|
||||||
Elm_Object_Item *it = elm_genlist_first_item_get(genlist);
|
Elm_Object_Item *it = elm_genlist_first_item_get(genlist);
|
||||||
if (!_elm_config->item_select_on_focus_disable)
|
if (!_elm_config->item_select_on_focus_disable)
|
||||||
elm_genlist_item_selected_set(it, EINA_TRUE);
|
elm_genlist_item_selected_set(it, EINA_TRUE);
|
||||||
else
|
else
|
||||||
elm_object_item_focus_set(it, EINA_TRUE);
|
elm_object_item_focus_set(it, EINA_TRUE);
|
||||||
elm_layout_signal_emit(genlist, "elm,action,looping,down,end", "elm");
|
elm_layout_signal_emit(genlist, "elm,action,looping,down,end", "elm");
|
||||||
|
sd->item_looping_on = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -392,18 +392,30 @@ _elm_list_elm_widget_event_direction(Evas_Object *obj, Elm_Focus_Direction dir,
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
|
||||||
// handle item loop feature
|
// handle item loop feature
|
||||||
if (sd->item_loop_enable)
|
if (sd->item_loop_enable && !sd->item_looping_on)
|
||||||
{
|
{
|
||||||
if (min > v)
|
if (min > v)
|
||||||
{
|
{
|
||||||
if (dir == ELM_FOCUS_LEFT)
|
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)
|
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)
|
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)
|
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
|
else
|
||||||
{
|
{
|
||||||
|
@ -419,6 +431,8 @@ _elm_list_elm_widget_event_direction(Evas_Object *obj, Elm_Focus_Direction dir,
|
||||||
}
|
}
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
else if (sd->item_looping_on)
|
||||||
|
return EINA_TRUE;
|
||||||
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1719,12 +1733,16 @@ _elm_list_looping_left_cb(void *data,
|
||||||
const char *source EINA_UNUSED)
|
const char *source EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Evas_Object *list = data;
|
Evas_Object *list = data;
|
||||||
|
|
||||||
|
ELM_LIST_DATA_GET(list, sd);
|
||||||
|
|
||||||
Elm_List_Item *it = (Elm_List_Item *)elm_list_last_item_get(list);
|
Elm_List_Item *it = (Elm_List_Item *)elm_list_last_item_get(list);
|
||||||
if (!_elm_config->item_select_on_focus_disable)
|
if (!_elm_config->item_select_on_focus_disable)
|
||||||
elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
|
elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
|
||||||
else
|
else
|
||||||
elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
|
elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
|
||||||
elm_layout_signal_emit(list, "elm,action,looping,left,end", "elm");
|
elm_layout_signal_emit(list, "elm,action,looping,left,end", "elm");
|
||||||
|
sd->item_looping_on = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1734,12 +1752,16 @@ _elm_list_looping_right_cb(void *data,
|
||||||
const char *source EINA_UNUSED)
|
const char *source EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Evas_Object *list = data;
|
Evas_Object *list = data;
|
||||||
|
|
||||||
|
ELM_LIST_DATA_GET(list, sd);
|
||||||
|
|
||||||
Elm_List_Item *it = (Elm_List_Item *)elm_list_first_item_get(list);
|
Elm_List_Item *it = (Elm_List_Item *)elm_list_first_item_get(list);
|
||||||
if (!_elm_config->item_select_on_focus_disable)
|
if (!_elm_config->item_select_on_focus_disable)
|
||||||
elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
|
elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
|
||||||
else
|
else
|
||||||
elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
|
elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
|
||||||
elm_layout_signal_emit(list, "elm,action,looping,right,end", "elm");
|
elm_layout_signal_emit(list, "elm,action,looping,right,end", "elm");
|
||||||
|
sd->item_looping_on = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1749,12 +1771,16 @@ _elm_list_looping_up_cb(void *data,
|
||||||
const char *source EINA_UNUSED)
|
const char *source EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Evas_Object *list = data;
|
Evas_Object *list = data;
|
||||||
|
|
||||||
|
ELM_LIST_DATA_GET(list, sd);
|
||||||
|
|
||||||
Elm_List_Item *it = (Elm_List_Item *)elm_list_last_item_get(list);
|
Elm_List_Item *it = (Elm_List_Item *)elm_list_last_item_get(list);
|
||||||
if (!_elm_config->item_select_on_focus_disable)
|
if (!_elm_config->item_select_on_focus_disable)
|
||||||
elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
|
elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
|
||||||
else
|
else
|
||||||
elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
|
elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
|
||||||
elm_layout_signal_emit(list, "elm,action,looping,up,end", "elm");
|
elm_layout_signal_emit(list, "elm,action,looping,up,end", "elm");
|
||||||
|
sd->item_looping_on = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1764,12 +1790,16 @@ _elm_list_looping_down_cb(void *data,
|
||||||
const char *source EINA_UNUSED)
|
const char *source EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Evas_Object *list = data;
|
Evas_Object *list = data;
|
||||||
|
|
||||||
|
ELM_LIST_DATA_GET(list, sd);
|
||||||
|
|
||||||
Elm_List_Item *it = (Elm_List_Item *)elm_list_first_item_get(list);
|
Elm_List_Item *it = (Elm_List_Item *)elm_list_first_item_get(list);
|
||||||
if (!_elm_config->item_select_on_focus_disable)
|
if (!_elm_config->item_select_on_focus_disable)
|
||||||
elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
|
elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE);
|
||||||
else
|
else
|
||||||
elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
|
elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE);
|
||||||
elm_layout_signal_emit(list, "elm,action,looping,down,end", "elm");
|
elm_layout_signal_emit(list, "elm,action,looping,down,end", "elm");
|
||||||
|
sd->item_looping_on = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -185,6 +185,7 @@ struct _Elm_Genlist_Data
|
||||||
Eina_Bool swipe : 1;
|
Eina_Bool swipe : 1;
|
||||||
/**< value whether item loop feature is enabled or not. */
|
/**< value whether item loop feature is enabled or not. */
|
||||||
Eina_Bool item_loop_enable : 1;
|
Eina_Bool item_loop_enable : 1;
|
||||||
|
Eina_Bool item_looping_on : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _Item_Block Item_Block;
|
typedef struct _Item_Block Item_Block;
|
||||||
|
|
|
@ -54,6 +54,7 @@ struct _Elm_List_Data
|
||||||
Eina_Bool delete_me : 1;
|
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 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_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;
|
typedef struct _Elm_List_Item Elm_List_Item;
|
||||||
|
|
Loading…
Reference in New Issue