From 90f72ad793c54fa5e6287620cdb211955c5f6556 Mon Sep 17 00:00:00 2001 From: WooHyun Jung Date: Thu, 25 Apr 2013 16:56:23 +0900 Subject: [PATCH] [list] If selected item is the first one (or the last one), up (or down) key should do focus movement from genlist to another. --- src/lib/elm_list.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index c124bfa..a4437b0 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -236,14 +236,16 @@ static Elm_List_Item *_item_focused_search(Elm_List_Item *it, int dir) return (Elm_List_Item *)eina_list_data_get(tmp); } -static void _item_focused_next(Elm_List_Smart_Data *sd, int dir) +static Eina_Bool _item_focused_next(Elm_List_Smart_Data *sd, int dir) { - Elm_List_Item *it = NULL; + Elm_List_Item *it = NULL, *old_focused = NULL; if (elm_widget_focus_get(ELM_WIDGET_DATA(sd)->obj)) edje_object_signal_emit (ELM_WIDGET_DATA(sd)->resize_obj, "elm,state,unfocused", "elm"); + old_focused = sd->focused; + if (!sd->focused) { if (dir == 1) @@ -258,6 +260,11 @@ static void _item_focused_next(Elm_List_Smart_Data *sd, int dir) it = _item_focused_search(it, dir); } _item_focused(it); + + if (old_focused == sd->focused) + return EINA_FALSE; + else + return EINA_TRUE; } @@ -331,9 +338,13 @@ _elm_list_smart_event(Evas_Object *obj, } else { - _item_focused_next(sd, -1); - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - return EINA_TRUE; + if (_item_focused_next(sd, -1)) + { + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + return EINA_TRUE; + } + else + return EINA_FALSE; } } else if ((!strcmp(ev->keyname, "Down")) || @@ -348,9 +359,13 @@ _elm_list_smart_event(Evas_Object *obj, } else { - _item_focused_next(sd, 1); - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - return EINA_TRUE; + if (_item_focused_next(sd, 1)) + { + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + return EINA_TRUE; + } + else + return EINA_FALSE; } } else if ((!strcmp(ev->keyname, "Home")) || -- 2.7.4