From 5a3fea6a28ca47a36802215f8fe5511f09976003 Mon Sep 17 00:00:00 2001 From: Chinmaya Panigrahi Date: Sat, 28 Dec 2013 17:21:23 +0900 Subject: [PATCH] [Hoversel] Making focus cyclic for hoversel items. Summary: Focus cyclic feature on hoversel items. Test Plan: elementary_test -to "Hoversel Focus" Reviewers: seoz, singh.amitesh Differential Revision: https://phab.enlightenment.org/D377 --- legacy/elementary/src/lib/elc_hoversel.c | 47 +++++++++++++++++++++--- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/legacy/elementary/src/lib/elc_hoversel.c b/legacy/elementary/src/lib/elc_hoversel.c index d5ac64817c..8c65fa5be8 100644 --- a/legacy/elementary/src/lib/elc_hoversel.c +++ b/legacy/elementary/src/lib/elc_hoversel.c @@ -586,6 +586,18 @@ elm_hoversel_item_icon_get(const Elm_Object_Item *it, if (icon_type) *icon_type = item->icon_type; } +static Elm_Hoversel_Item * +item_focused_get(Elm_Hoversel_Smart_Data *sd) +{ + Elm_Hoversel_Item *item; + Eina_List *l; + + EINA_LIST_FOREACH(sd->items, l, item) + if (elm_object_focus_get(VIEW(item))) + return item; + return NULL; +} + static void _elm_hoversel_smart_event(Eo *obj, void *_pd, va_list *list) { @@ -599,6 +611,8 @@ _elm_hoversel_smart_event(Eo *obj, void *_pd, va_list *list) Evas_Event_Key_Down *ev = event_info; Elm_Hoversel_Smart_Data *sd = _pd; + Elm_Hoversel_Item *litem, *fitem; + eo_do_super(obj, MY_CLASS, elm_wdg_event(src, type, event_info, &int_ret)); if (int_ret) return; @@ -607,34 +621,57 @@ _elm_hoversel_smart_event(Eo *obj, void *_pd, va_list *list) if (type != EVAS_CALLBACK_KEY_DOWN) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; + litem = eina_list_last_data_get(sd->items); + fitem = eina_list_data_get(sd->items); + if ((!strcmp(ev->key, "Down")) || - ((!strcmp(ev->key, "KP_Down")) && (!ev->string))) + ((!strcmp(ev->key, "KP_Down")) && (!ev->string))) { + if (item_focused_get(sd) == litem) + { + elm_object_focus_set(VIEW(fitem), EINA_TRUE); + goto success; + } elm_widget_focus_cycle(sd->hover, ELM_FOCUS_DOWN); goto success; } else if ((!strcmp(ev->key, "Up")) || - ((!strcmp(ev->key, "KP_Up")) && (!ev->string))) + ((!strcmp(ev->key, "KP_Up")) && (!ev->string))) { + if (item_focused_get(sd) == fitem) + { + elm_object_focus_set(VIEW(litem), EINA_TRUE); + goto success; + } elm_widget_focus_cycle(sd->hover, ELM_FOCUS_UP); goto success; } else if ((!strcmp(ev->key, "Left")) || - ((!strcmp(ev->key, "KP_Left")) && (!ev->string))) + ((!strcmp(ev->key, "KP_Left")) && (!ev->string))) { + if (item_focused_get(sd) == fitem) + { + elm_object_focus_set(VIEW(litem), EINA_TRUE); + goto success; + } elm_widget_focus_cycle(sd->hover, ELM_FOCUS_LEFT); goto success; } else if ((!strcmp(ev->key, "Right")) || - ((!strcmp(ev->key, "KP_Right")) && (!ev->string))) + ((!strcmp(ev->key, "KP_Right")) && (!ev->string))) { + if (item_focused_get(sd) == litem) + { + elm_object_focus_set(VIEW(fitem), EINA_TRUE); + goto success; + } elm_widget_focus_cycle(sd->hover, ELM_FOCUS_RIGHT); goto success; } return; -success: + success: ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; if (ret) *ret = EINA_TRUE; }