diff --git a/legacy/elementary/src/lib/elc_ctxpopup.c b/legacy/elementary/src/lib/elc_ctxpopup.c index 73954d4db9..f23f5880ae 100644 --- a/legacy/elementary/src/lib/elc_ctxpopup.c +++ b/legacy/elementary/src/lib/elc_ctxpopup.c @@ -71,15 +71,15 @@ _elm_ctxpopup_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Ctx } EOLIAN static Eina_Bool -_elm_ctxpopup_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_ctxpopup_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { if (!sd) return EINA_FALSE; - if (!elm_widget_focus_next_get(sd->box, dir, next)) + if (!elm_widget_focus_next_get(sd->box, dir, next, next_item)) { elm_widget_focused_object_clear(sd->box); - elm_widget_focus_next_get(sd->box, dir, next); + elm_widget_focus_next_get(sd->box, dir, next, next_item); } return EINA_TRUE; diff --git a/legacy/elementary/src/lib/elc_fileselector.c b/legacy/elementary/src/lib/elc_fileselector.c index 8dc2e039c1..74fee6662e 100644 --- a/legacy/elementary/src/lib/elc_fileselector.c +++ b/legacy/elementary/src/lib/elc_fileselector.c @@ -2412,7 +2412,7 @@ _elm_fileselector_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_File } EOLIAN static Eina_Bool -_elm_fileselector_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Fileselector_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_fileselector_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Fileselector_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_List *items = NULL; @@ -2425,9 +2425,9 @@ _elm_fileselector_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Fileselector_Da if (sd->ok_button) items = eina_list_append(items, sd->ok_button); if (_elm_config->access_mode) - return elm_widget_focus_list_next_get(obj, items, eina_list_data_get, dir, next); + return elm_widget_focus_list_next_get(obj, items, eina_list_data_get, dir, next, next_item); - if (!elm_widget_focus_list_next_get(obj, items, eina_list_data_get, dir, next)) + if (!elm_widget_focus_list_next_get(obj, items, eina_list_data_get, dir, next, next_item)) *next = (Evas_Object *)obj; eina_list_free(items); diff --git a/legacy/elementary/src/lib/elc_fileselector_entry.c b/legacy/elementary/src/lib/elc_fileselector_entry.c index 40f94a37a0..ba06a6f1c9 100644 --- a/legacy/elementary/src/lib/elc_fileselector_entry.c +++ b/legacy/elementary/src/lib/elc_fileselector_entry.c @@ -127,7 +127,7 @@ _elm_fileselector_entry_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSE } EOLIAN static Eina_Bool -_elm_fileselector_entry_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Fileselector_Entry_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_fileselector_entry_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Fileselector_Entry_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *chain[2]; Evas_Object *to_focus; @@ -149,11 +149,11 @@ _elm_fileselector_entry_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Fileselec i = elm_widget_focus_get(chain[1]); - if (elm_widget_focus_next_get(chain[i], dir, next)) return EINA_TRUE; + if (elm_widget_focus_next_get(chain[i], dir, next, next_item)) return EINA_TRUE; i = !i; - if (elm_widget_focus_next_get(chain[i], dir, &to_focus)) + if (elm_widget_focus_next_get(chain[i], dir, &to_focus, next_item)) { *next = to_focus; return !!i; diff --git a/legacy/elementary/src/lib/elc_multibuttonentry.c b/legacy/elementary/src/lib/elc_multibuttonentry.c index 98e1b53325..e9c44e50a2 100644 --- a/legacy/elementary/src/lib/elc_multibuttonentry.c +++ b/legacy/elementary/src/lib/elc_multibuttonentry.c @@ -321,7 +321,7 @@ _view_update(Elm_Multibuttonentry_Data *sd) } EOLIAN static Eina_Bool -_elm_multibuttonentry_elm_widget_on_focus(Eo *obj, Elm_Multibuttonentry_Data *sd) +_elm_multibuttonentry_elm_widget_on_focus(Eo *obj, Elm_Multibuttonentry_Data *sd, Elm_Object_Item *item EINA_UNUSED) { if (elm_widget_focus_get(obj)) { @@ -1606,7 +1606,7 @@ _elm_multibuttonentry_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_ } EOLIAN static Eina_Bool -_elm_multibuttonentry_elm_widget_focus_next(Eo *obj, Elm_Multibuttonentry_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_multibuttonentry_elm_widget_focus_next(Eo *obj, Elm_Multibuttonentry_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_Bool int_ret = EINA_FALSE; @@ -1651,7 +1651,7 @@ _elm_multibuttonentry_elm_widget_focus_next(Eo *obj, Elm_Multibuttonentry_Data * if (int_ret) return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); return EINA_FALSE; } diff --git a/legacy/elementary/src/lib/elc_naviframe.c b/legacy/elementary/src/lib/elc_naviframe.c index b11eda3e9d..f1830ab417 100644 --- a/legacy/elementary/src/lib/elc_naviframe.c +++ b/legacy/elementary/src/lib/elc_naviframe.c @@ -1306,7 +1306,7 @@ _on_obj_size_hints_changed(void *data EINA_UNUSED, Evas *e EINA_UNUSED, } EOLIAN static Eina_Bool -_elm_naviframe_elm_widget_focus_next(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next) +_elm_naviframe_elm_widget_focus_next(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *ao; @@ -1331,7 +1331,7 @@ _elm_naviframe_elm_widget_focus_next(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSED if (ao) l = eina_list_append(l, ao); } - int_ret = elm_widget_focus_list_next_get(obj, l, list_data_get, dir, next); + int_ret = elm_widget_focus_list_next_get(obj, l, list_data_get, dir, next, next_item); eina_list_free(l); end: diff --git a/legacy/elementary/src/lib/elc_popup.c b/legacy/elementary/src/lib/elc_popup.c index 7e56946888..73a130287c 100644 --- a/legacy/elementary/src/lib/elc_popup.c +++ b/legacy/elementary/src/lib/elc_popup.c @@ -1347,7 +1347,7 @@ _elm_popup_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Popup_Data } EOLIAN static Eina_Bool -_elm_popup_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_popup_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *ao; Eina_List *items = NULL; @@ -1370,7 +1370,7 @@ _elm_popup_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd, Elm_Fo items = eina_list_merge(items, base_items); - if (!elm_widget_focus_list_next_get(sd->main_layout, items, eina_list_data_get, dir, next)) + if (!elm_widget_focus_list_next_get(sd->main_layout, items, eina_list_data_get, dir, next, next_item)) *next = sd->main_layout; eina_list_free(items); diff --git a/legacy/elementary/src/lib/elm_access.c b/legacy/elementary/src/lib/elm_access.c index f8df21fe7f..47f87b6fd9 100644 --- a/legacy/elementary/src/lib/elm_access.c +++ b/legacy/elementary/src/lib/elm_access.c @@ -135,7 +135,7 @@ _elm_access_elm_widget_activate(Eo *obj, void *_pd EINA_UNUSED, Elm_Activate act } EOLIAN static Eina_Bool -_elm_access_elm_widget_on_focus(Eo *obj, void *_pd EINA_UNUSED) +_elm_access_elm_widget_on_focus(Eo *obj, void *_pd EINA_UNUSED, Elm_Object_Item *item EINA_UNUSED) { evas_object_focus_set(obj, elm_widget_focus_get(obj)); @@ -522,7 +522,7 @@ _access_highlight_next_get(Evas_Object *obj, Elm_Focus_Direction dir) } else { - ret = elm_widget_focus_next_get(obj, dir, &target); + ret = elm_widget_focus_next_get(obj, dir, &target, NULL); if (ret && target) _elm_access_highlight_set(target); } diff --git a/legacy/elementary/src/lib/elm_box.c b/legacy/elementary/src/lib/elm_box.c index f89989fb2d..2adc12120d 100644 --- a/legacy/elementary/src/lib/elm_box.c +++ b/legacy/elementary/src/lib/elm_box.c @@ -57,7 +57,7 @@ _elm_box_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Box_Data *_pd } EOLIAN static Eina_Bool -_elm_box_elm_widget_focus_next(Eo *obj, Elm_Box_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next) +_elm_box_elm_widget_focus_next(Eo *obj, Elm_Box_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { const Eina_List *items; void *(*list_data_get)(const Eina_List *list); @@ -78,7 +78,7 @@ _elm_box_elm_widget_focus_next(Eo *obj, Elm_Box_Data *_pd EINA_UNUSED, Elm_Focus if (!items) return EINA_FALSE; } - return elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next); + return elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next, next_item); } EOLIAN static Eina_Bool diff --git a/legacy/elementary/src/lib/elm_bubble.c b/legacy/elementary/src/lib/elm_bubble.c index cec3cc7bfb..9fdc9f8523 100644 --- a/legacy/elementary/src/lib/elm_bubble.c +++ b/legacy/elementary/src/lib/elm_bubble.c @@ -76,7 +76,7 @@ _on_mouse_up(void *data, /* overriding layout's focus_next() in order to just cycle through the * content's tree */ EOLIAN static Eina_Bool -_elm_bubble_elm_widget_focus_next(Eo *obj, Elm_Bubble_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next) +_elm_bubble_elm_widget_focus_next(Eo *obj, Elm_Bubble_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *content; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); @@ -93,7 +93,7 @@ _elm_bubble_elm_widget_focus_next(Eo *obj, Elm_Bubble_Data *_pd EINA_UNUSED, Elm if (!content) return EINA_FALSE; /* attempt to follow focus cycle into sub-object */ - return elm_widget_focus_next_get(content, dir, next); + return elm_widget_focus_next_get(content, dir, next, next_item); } } diff --git a/legacy/elementary/src/lib/elm_calendar.c b/legacy/elementary/src/lib/elm_calendar.c index 4ecfb49865..1749152303 100644 --- a/legacy/elementary/src/lib/elm_calendar.c +++ b/legacy/elementary/src/lib/elm_calendar.c @@ -1156,7 +1156,7 @@ _elm_calendar_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Cal } EOLIAN static Eina_Bool -_elm_calendar_elm_widget_focus_next(Eo *obj, Elm_Calendar_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_calendar_elm_widget_focus_next(Eo *obj, Elm_Calendar_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { int maxdays, day, i; Eina_List *items = NULL; @@ -1189,7 +1189,7 @@ _elm_calendar_elm_widget_focus_next(Eo *obj, Elm_Calendar_Data *sd, Elm_Focus_Di } return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } static void diff --git a/legacy/elementary/src/lib/elm_clock.c b/legacy/elementary/src/lib/elm_clock.c index b7a7139a3e..31f84f9b98 100644 --- a/legacy/elementary/src/lib/elm_clock.c +++ b/legacy/elementary/src/lib/elm_clock.c @@ -708,7 +708,7 @@ _elm_clock_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Clock_Data } EOLIAN static Eina_Bool -_elm_clock_elm_widget_focus_next(Eo *obj, Elm_Clock_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_clock_elm_widget_focus_next(Eo *obj, Elm_Clock_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *ao, *po; Eina_List *items = NULL; @@ -757,7 +757,7 @@ _elm_clock_elm_widget_focus_next(Eo *obj, Elm_Clock_Data *sd, Elm_Focus_Directio } return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } static void diff --git a/legacy/elementary/src/lib/elm_colorselector.c b/legacy/elementary/src/lib/elm_colorselector.c index ee9a96f1cd..f0d230bfa2 100644 --- a/legacy/elementary/src/lib/elm_colorselector.c +++ b/legacy/elementary/src/lib/elm_colorselector.c @@ -1952,7 +1952,7 @@ _elm_colorselector_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Col } EOLIAN static Eina_Bool -_elm_colorselector_elm_widget_focus_next(Eo *obj, Elm_Colorselector_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_colorselector_elm_widget_focus_next(Eo *obj, Elm_Colorselector_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_List *items = NULL; Eina_List *l; @@ -1985,7 +1985,7 @@ _elm_colorselector_elm_widget_focus_next(Eo *obj, Elm_Colorselector_Data *sd, El } return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } static void diff --git a/legacy/elementary/src/lib/elm_datetime.c b/legacy/elementary/src/lib/elm_datetime.c index ed313a8a70..ccd14f3252 100644 --- a/legacy/elementary/src/lib/elm_datetime.c +++ b/legacy/elementary/src/lib/elm_datetime.c @@ -429,7 +429,7 @@ _elm_datetime_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Datetime } EOLIAN static Eina_Bool -_elm_datetime_elm_widget_focus_next(Eo *obj, Elm_Datetime_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next) +_elm_datetime_elm_widget_focus_next(Eo *obj, Elm_Datetime_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { const Eina_List *items; Eina_List *(*list_free)(Eina_List *list); @@ -450,18 +450,18 @@ _elm_datetime_elm_widget_focus_next(Eo *obj, Elm_Datetime_Data *_pd EINA_UNUSED, if (!items) return EINA_FALSE; } - int_ret = elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next); + int_ret = elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next, next_item); if (list_free) list_free((Eina_List *)items); return int_ret; } EOLIAN static Eina_Bool -_elm_datetime_elm_widget_on_focus(Eo *obj, Elm_Datetime_Data *sd) +_elm_datetime_elm_widget_on_focus(Eo *obj, Elm_Datetime_Data *sd, Elm_Object_Item *item EINA_UNUSED) { Eina_Bool int_ret = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (!elm_widget_focus_get(obj)) diff --git a/legacy/elementary/src/lib/elm_diskselector.c b/legacy/elementary/src/lib/elm_diskselector.c index 54fe8c5fff..34cc99bb7d 100644 --- a/legacy/elementary/src/lib/elm_diskselector.c +++ b/legacy/elementary/src/lib/elm_diskselector.c @@ -896,12 +896,12 @@ _elm_diskselector_elm_widget_sub_object_del(Eo *obj, Elm_Diskselector_Data *sd, } EOLIAN static Eina_Bool -_elm_diskselector_elm_widget_on_focus(Eo *obj, Elm_Diskselector_Data *_pd EINA_UNUSED) +_elm_diskselector_elm_widget_on_focus(Eo *obj, Elm_Diskselector_Data *_pd EINA_UNUSED, Elm_Object_Item *item EINA_UNUSED) { Eina_Bool int_ret = EINA_FALSE; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj)) @@ -929,7 +929,7 @@ _elm_diskselector_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Disk } EOLIAN static Eina_Bool -_elm_diskselector_elm_widget_focus_next(Eo *obj, Elm_Diskselector_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_diskselector_elm_widget_focus_next(Eo *obj, Elm_Diskselector_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_List *items = NULL; Eina_List *elist = NULL; @@ -941,15 +941,15 @@ _elm_diskselector_elm_widget_focus_next(Eo *obj, Elm_Diskselector_Data *sd, Elm_ if (!sd->round) { return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } if (!elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next)) + (obj, items, eina_list_data_get, dir, next, next_item)) { elm_widget_focused_object_clear((Evas_Object *)obj); elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } return EINA_TRUE; } diff --git a/legacy/elementary/src/lib/elm_entry.c b/legacy/elementary/src/lib/elm_entry.c index 0ba453bde0..6243501eba 100644 --- a/legacy/elementary/src/lib/elm_entry.c +++ b/legacy/elementary/src/lib/elm_entry.c @@ -1134,7 +1134,7 @@ _return_key_enabled_check(Evas_Object *obj) } EOLIAN static Eina_Bool -_elm_entry_elm_widget_on_focus(Eo *obj, Elm_Entry_Data *sd) +_elm_entry_elm_widget_on_focus(Eo *obj, Elm_Entry_Data *sd, Elm_Object_Item *item EINA_UNUSED) { Evas_Object *top; Eina_Bool top_is_win = EINA_FALSE; diff --git a/legacy/elementary/src/lib/elm_flip.c b/legacy/elementary/src/lib/elm_flip.c index 86088170f4..eab8b1e24f 100644 --- a/legacy/elementary/src/lib/elm_flip.c +++ b/legacy/elementary/src/lib/elm_flip.c @@ -112,14 +112,14 @@ _elm_flip_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Flip_Data *_ } EOLIAN static Eina_Bool -_elm_flip_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Flip_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_flip_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Flip_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { /* attempt to cycle focus on in sub-items */ if (sd->state) - return elm_widget_focus_next_get(sd->front.content, dir, next); + return elm_widget_focus_next_get(sd->front.content, dir, next, next_item); else - return elm_widget_focus_next_get(sd->back.content, dir, next); + return elm_widget_focus_next_get(sd->back.content, dir, next, next_item); } EOLIAN static Eina_Bool diff --git a/legacy/elementary/src/lib/elm_focus.h b/legacy/elementary/src/lib/elm_focus.h index 5bb4f896e6..6f076bacc3 100644 --- a/legacy/elementary/src/lib/elm_focus.h +++ b/legacy/elementary/src/lib/elm_focus.h @@ -38,7 +38,7 @@ * * @ingroup Focus */ -typedef enum +typedef enum _Elm_Focus_Direction { ELM_FOCUS_PREVIOUS, /**< previous direction */ ELM_FOCUS_NEXT, /**< next direction */ @@ -48,7 +48,7 @@ typedef enum ELM_FOCUS_LEFT, /**< left direction */ ELM_FOCUS_MOUSE, /**< direction is from mouse */ ELM_FOCUS_REVERT /**< direction is from focus revert */ -} Elm_Focus_Direction; +} Elm_Focus_Dicretion; /** * Focus region show mode. @@ -248,6 +248,47 @@ EAPI Evas_Object * elm_object_focus_next_object_get(const Evas_Object *ob */ EAPI void elm_object_focus_next_object_set(Evas_Object *obj, Evas_Object *next, Elm_Focus_Direction dir); +/** + * Get next object item which was set with specific focus direction. + * + * Get next object item which was set by elm_object_focus_next_item_set + * with specific focus direction. + * + * @param obj The Elementary object + * @param dir Focus direction + * @return Focus next object item or @c NULL, if there is no focus next + * object item. + * + * @see elm_object_focus_next_item_set(), elm_object_focus_next() + * + * @since 1.16 + * + * @ingroup Focus + */ +EAPI Elm_Object_Item * elm_object_focus_next_item_get(const Evas_Object *obj, Elm_Focus_Direction dir); + +/** + * Set next object item with specific focus direction. + * + * When focus next object item is set with specific focus direction, + * this object item will be the first candidate when finding + * next focusable object or item. + * If the focus next object item is set, it is preference to focus next object. + * Focus next object item can be registered with six directions that are + * previous, next, up, down, right, and left. + * + * @param obj The Elementary object + * @param next_item Focus next object item + * @param dir Focus direction + * + * @see elm_object_focus_next_item_get(), elm_object_focus_next() + * + * @since 1.16 + * + * @ingroup Focus + */ +EAPI void elm_object_focus_next_item_set(Evas_Object *obj, Elm_Object_Item *next_item, Elm_Focus_Direction dir); + /** * Get focused object in object tree. * diff --git a/legacy/elementary/src/lib/elm_frame.c b/legacy/elementary/src/lib/elm_frame.c index d5ebc1fde7..674653b155 100644 --- a/legacy/elementary/src/lib/elm_frame.c +++ b/legacy/elementary/src/lib/elm_frame.c @@ -58,7 +58,7 @@ _elm_frame_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Frame_Data } EOLIAN static Eina_Bool -_elm_frame_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Frame_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next) +_elm_frame_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Frame_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *content; @@ -69,7 +69,7 @@ _elm_frame_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Frame_Data *_pd EINA_U else { /* attempt to follow focus cycle into sub-object */ - return elm_widget_focus_next_get(content, dir, next); + return elm_widget_focus_next_get(content, dir, next, next_item); } } diff --git a/legacy/elementary/src/lib/elm_gengrid.c b/legacy/elementary/src/lib/elm_gengrid.c index d351b53d8c..d6786f1c1f 100644 --- a/legacy/elementary/src/lib/elm_gengrid.c +++ b/legacy/elementary/src/lib/elm_gengrid.c @@ -3078,6 +3078,25 @@ _key_action_move(Evas_Object *obj, const char *params) return EINA_TRUE; } + else + { + Evas_Object *next = NULL; + Elm_Object_Item *next_item = NULL; + next_item = elm_object_item_focus_next_item_get(sd->focused_item, + ELM_FOCUS_LEFT); + if (next_item) + { + elm_object_item_focus_set(next_item, EINA_TRUE); + return EINA_TRUE; + } + next = elm_object_item_focus_next_object_get(sd->focused_item, + ELM_FOCUS_LEFT); + if (next) + { + elm_object_focus_set(next, EINA_TRUE); + return EINA_TRUE; + } + } if (sd->horizontal) { if (_elm_gengrid_item_edge_check(sd->focused_item, ELM_FOCUS_LEFT)) @@ -3157,6 +3176,25 @@ _key_action_move(Evas_Object *obj, const char *params) return EINA_TRUE; } + else + { + Evas_Object *next = NULL; + Elm_Object_Item *next_item = NULL; + next_item = elm_object_item_focus_next_item_get(sd->focused_item, + ELM_FOCUS_RIGHT); + if (next_item) + { + elm_object_item_focus_set(next_item, EINA_TRUE); + return EINA_TRUE; + } + next = elm_object_item_focus_next_object_get(sd->focused_item, + ELM_FOCUS_RIGHT); + if (next) + { + elm_object_focus_set(next, EINA_TRUE); + return EINA_TRUE; + } + } if (sd->horizontal) { if (sd->focused_item && _elm_gengrid_item_edge_check(sd->focused_item, ELM_FOCUS_RIGHT)) @@ -3230,6 +3268,25 @@ _key_action_move(Evas_Object *obj, const char *params) return EINA_TRUE; } + else + { + Evas_Object *next = NULL; + Elm_Object_Item *next_item = NULL; + next_item = elm_object_item_focus_next_item_get(sd->focused_item, + ELM_FOCUS_UP); + if (next_item) + { + elm_object_item_focus_set(next_item, EINA_TRUE); + return EINA_TRUE; + } + next = elm_object_item_focus_next_object_get(sd->focused_item, + ELM_FOCUS_UP); + if (next) + { + elm_object_focus_set(next, EINA_TRUE); + return EINA_TRUE; + } + } if (sd->horizontal) { if (sd->focused_item && _elm_gengrid_item_edge_check(sd->focused_item, ELM_FOCUS_UP)) @@ -3287,6 +3344,25 @@ _key_action_move(Evas_Object *obj, const char *params) return EINA_TRUE; } + else + { + Evas_Object *next = NULL; + Elm_Object_Item *next_item = NULL; + next_item = elm_object_item_focus_next_item_get(sd->focused_item, + ELM_FOCUS_DOWN); + if (next_item) + { + elm_object_item_focus_set(next_item, EINA_TRUE); + return EINA_TRUE; + } + next = elm_object_item_focus_next_object_get(sd->focused_item, + ELM_FOCUS_DOWN); + if (next) + { + elm_object_focus_set(next, EINA_TRUE); + return EINA_TRUE; + } + } if (sd->horizontal) { if (sd->focused_item && _elm_gengrid_item_edge_check(sd->focused_item, ELM_FOCUS_DOWN)) @@ -3561,14 +3637,14 @@ _elm_gengrid_direction_item_get(Evas_Object *obj, Elm_Focus_Direction dir) } EOLIAN static Eina_Bool -_elm_gengrid_elm_widget_on_focus(Eo *obj, Elm_Gengrid_Data *sd) +_elm_gengrid_elm_widget_on_focus(Eo *obj, Elm_Gengrid_Data *sd, Elm_Object_Item *item EINA_UNUSED) { Eina_Bool int_ret = EINA_FALSE; Elm_Object_Item *eo_it = NULL; Eina_Bool is_sel = EINA_FALSE; Elm_Focus_Direction focus_origin; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj) && (sd->selected) && @@ -3580,17 +3656,21 @@ _elm_gengrid_elm_widget_on_focus(Eo *obj, Elm_Gengrid_Data *sd) if (elm_widget_focus_get(obj) && !sd->mouse_down) { - focus_origin = elm_widget_focus_origin_get(obj); - if (focus_origin >= ELM_FOCUS_UP && focus_origin <= ELM_FOCUS_LEFT) - eo_it = _elm_gengrid_direction_item_get(obj, focus_origin); - else if (sd->last_focused_item) - eo_it = sd->last_focused_item; - else if (sd->last_selected_item) - eo_it = sd->last_selected_item; - else if (_elm_config->first_item_focus_on_first_focus_in) + if (item) eo_it = item; + else { - eo_it = elm_gengrid_first_item_get(obj); - is_sel = EINA_TRUE; + focus_origin = elm_widget_focus_origin_get(obj); + if (focus_origin >= ELM_FOCUS_UP && focus_origin <= ELM_FOCUS_LEFT) + eo_it = _elm_gengrid_direction_item_get(obj, focus_origin); + else if (sd->last_focused_item) + eo_it = sd->last_focused_item; + else if (sd->last_selected_item) + eo_it = sd->last_selected_item; + else if (_elm_config->first_item_focus_on_first_focus_in) + { + eo_it = elm_gengrid_first_item_get(obj); + is_sel = EINA_TRUE; + } } if (eo_it) { @@ -3651,7 +3731,7 @@ _elm_gengrid_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Geng } EOLIAN static Eina_Bool -_elm_gengrid_elm_widget_focus_next(Eo *obj, Elm_Gengrid_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_gengrid_elm_widget_focus_next(Eo *obj, Elm_Gengrid_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_List *items = NULL; Elm_Gen_Item *it; @@ -3663,7 +3743,7 @@ _elm_gengrid_elm_widget_focus_next(Eo *obj, Elm_Gengrid_Data *sd, Elm_Focus_Dire } return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } static void diff --git a/legacy/elementary/src/lib/elm_genlist.c b/legacy/elementary/src/lib/elm_genlist.c index a839fc1087..6ebba7f68b 100644 --- a/legacy/elementary/src/lib/elm_genlist.c +++ b/legacy/elementary/src/lib/elm_genlist.c @@ -2770,9 +2770,13 @@ _elm_genlist_item_content_focus_set(Elm_Gen_Item *it, Elm_Focus_Direction dir) if (focused_obj && (dir != ELM_FOCUS_PREVIOUS)) { Evas_Object *nextfocus; - if (elm_widget_focus_next_get(focused_obj, dir, &nextfocus)) + Elm_Object_Item *nextfocus_item; + if (elm_widget_focus_next_get(focused_obj, dir, &nextfocus, &nextfocus_item)) { - elm_object_focus_set(nextfocus, EINA_TRUE); + if (nextfocus_item) + elm_object_item_focus_set(nextfocus_item, EINA_TRUE); + else + elm_object_focus_set(nextfocus, EINA_TRUE); return; } } @@ -3179,13 +3183,13 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_it) } EOLIAN static Eina_Bool -_elm_genlist_elm_widget_on_focus(Eo *obj, Elm_Genlist_Data *sd) +_elm_genlist_elm_widget_on_focus(Eo *obj, Elm_Genlist_Data *sd, Elm_Object_Item *item EINA_UNUSED) { Eina_Bool int_ret = EINA_FALSE; Elm_Object_Item *eo_it = NULL; Eina_Bool is_sel = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj) && (sd->items) && (sd->selected) && @@ -3254,7 +3258,7 @@ _elm_genlist_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Genl } EOLIAN static Eina_Bool -_elm_genlist_elm_widget_focus_next(Eo *obj, Elm_Genlist_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_genlist_elm_widget_focus_next(Eo *obj, Elm_Genlist_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Coord x, y, w, h; Evas_Coord sx, sy, sw, sh; @@ -3297,7 +3301,7 @@ _elm_genlist_elm_widget_focus_next(Eo *obj, Elm_Genlist_Data *sd, Elm_Focus_Dire } return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } static void diff --git a/legacy/elementary/src/lib/elm_glview.c b/legacy/elementary/src/lib/elm_glview.c index 2bc87f1fbc..51af23bed4 100644 --- a/legacy/elementary/src/lib/elm_glview.c +++ b/legacy/elementary/src/lib/elm_glview.c @@ -28,12 +28,12 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = { }; EOLIAN static Eina_Bool -_elm_glview_elm_widget_on_focus(Eo *obj, Elm_Glview_Data *_pd EINA_UNUSED) +_elm_glview_elm_widget_on_focus(Eo *obj, Elm_Glview_Data *_pd EINA_UNUSED, Elm_Object_Item *item EINA_UNUSED) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); Eina_Bool int_ret = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj)) diff --git a/legacy/elementary/src/lib/elm_grid.c b/legacy/elementary/src/lib/elm_grid.c index ba712f63e9..95edb60887 100644 --- a/legacy/elementary/src/lib/elm_grid.c +++ b/legacy/elementary/src/lib/elm_grid.c @@ -20,7 +20,7 @@ _elm_grid_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_U } EOLIAN static Eina_Bool -_elm_grid_elm_widget_focus_next(Eo *obj, void *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next) +_elm_grid_elm_widget_focus_next(Eo *obj, void *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { const Eina_List *items; Eina_List *(*list_free)(Eina_List *list); @@ -46,7 +46,7 @@ _elm_grid_elm_widget_focus_next(Eo *obj, void *_pd EINA_UNUSED, Elm_Focus_Direct if (!items) return EINA_FALSE; } - int_ret = elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next); + int_ret = elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next, next_item); if (list_free) list_free((Eina_List *)items); diff --git a/legacy/elementary/src/lib/elm_index.c b/legacy/elementary/src/lib/elm_index.c index ed736bdcf9..0b574a6177 100644 --- a/legacy/elementary/src/lib/elm_index.c +++ b/legacy/elementary/src/lib/elm_index.c @@ -1126,7 +1126,7 @@ _elm_index_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Index_ } EOLIAN static Eina_Bool -_elm_index_elm_widget_focus_next(Eo *obj, Elm_Index_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_index_elm_widget_focus_next(Eo *obj, Elm_Index_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_Bool int_ret = EINA_FALSE; @@ -1152,7 +1152,7 @@ _elm_index_elm_widget_focus_next(Eo *obj, Elm_Index_Data *sd, Elm_Focus_Directio } int_ret = elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); // to hide index item, if there is nothing to focus on autohide disable mode if ((!sd->autohide_disabled) && (!int_ret)) diff --git a/legacy/elementary/src/lib/elm_inwin.c b/legacy/elementary/src/lib/elm_inwin.c index 69c0f05167..febe1a66e8 100644 --- a/legacy/elementary/src/lib/elm_inwin.c +++ b/legacy/elementary/src/lib/elm_inwin.c @@ -46,7 +46,7 @@ _elm_inwin_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_ } EOLIAN static Eina_Bool -_elm_inwin_elm_widget_focus_next(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next) +_elm_inwin_elm_widget_focus_next(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *content; @@ -55,7 +55,7 @@ _elm_inwin_elm_widget_focus_next(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, Elm /* attempt to follow focus cycle into sub-object */ if (content) { - elm_widget_focus_next_get(content, dir, next); + elm_widget_focus_next_get(content, dir, next, next_item); if (*next) return EINA_TRUE; } diff --git a/legacy/elementary/src/lib/elm_layout.c b/legacy/elementary/src/lib/elm_layout.c index 250ef4ec33..657696484a 100644 --- a/legacy/elementary/src/lib/elm_layout.c +++ b/legacy/elementary/src/lib/elm_layout.c @@ -399,7 +399,7 @@ _elm_layout_list_data_get(const Eina_List *list) } EOLIAN static Eina_Bool -_elm_layout_elm_widget_on_focus(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED) +_elm_layout_elm_widget_on_focus(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED, Elm_Object_Item *item EINA_UNUSED) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); @@ -472,7 +472,7 @@ _access_focus_list_sort(Eina_List *origin) * child objects, but still inheriting from elm_layout, just set its * focus_next smart function back to NULL */ EOLIAN static Eina_Bool -_elm_layout_elm_widget_focus_next(Eo *obj, Elm_Layout_Smart_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_layout_elm_widget_focus_next(Eo *obj, Elm_Layout_Smart_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { const Eina_List *items; void *(*list_data_get)(const Eina_List *list); @@ -491,7 +491,7 @@ _elm_layout_elm_widget_focus_next(Eo *obj, Elm_Layout_Smart_Data *sd, Elm_Focus_ } return elm_widget_focus_list_next_get - (obj, items, list_data_get, dir, next); + (obj, items, list_data_get, dir, next, next_item); } EOLIAN static Eina_Bool diff --git a/legacy/elementary/src/lib/elm_list.c b/legacy/elementary/src/lib/elm_list.c index 498a79e491..708648676b 100644 --- a/legacy/elementary/src/lib/elm_list.c +++ b/legacy/elementary/src/lib/elm_list.c @@ -289,9 +289,13 @@ _elm_list_item_content_focus_set(Elm_List_Item_Data *it, Elm_Focus_Direction dir if (dir != ELM_FOCUS_PREVIOUS) { Evas_Object *nextfocus; - if (elm_widget_focus_next_get(focused, dir, &nextfocus)) + Elm_Object_Item *nextfocus_item; + if (elm_widget_focus_next_get(focused, dir, &nextfocus, &nextfocus_item)) { - elm_object_focus_set(nextfocus, EINA_TRUE); + if (nextfocus_item) + elm_object_item_focus_set(nextfocus_item, EINA_TRUE); + else + elm_object_focus_set(nextfocus, EINA_TRUE); return EINA_TRUE; } @@ -1257,13 +1261,13 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_List_Item_Data *it) } EOLIAN static Eina_Bool -_elm_list_elm_widget_on_focus(Eo *obj, Elm_List_Data *sd) +_elm_list_elm_widget_on_focus(Eo *obj, Elm_List_Data *sd, Elm_Object_Item *item EINA_UNUSED) { Eina_Bool int_ret = EINA_FALSE; Elm_Object_Item *eo_it = NULL; Eina_Bool is_sel = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj) && sd->selected && !sd->last_selected_item) @@ -2369,7 +2373,7 @@ _elm_list_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_List_Da } EOLIAN static Eina_Bool -_elm_list_elm_widget_focus_next(Eo *obj, Elm_List_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_list_elm_widget_focus_next(Eo *obj, Elm_List_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_List *items = NULL; Eina_List *elist = NULL; @@ -2386,7 +2390,7 @@ _elm_list_elm_widget_focus_next(Eo *obj, Elm_List_Data *sd, Elm_Focus_Direction } return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } EOLIAN static void diff --git a/legacy/elementary/src/lib/elm_main.c b/legacy/elementary/src/lib/elm_main.c index dcd22b4bba..d436274571 100644 --- a/legacy/elementary/src/lib/elm_main.c +++ b/legacy/elementary/src/lib/elm_main.c @@ -1463,6 +1463,23 @@ elm_object_focus_next_object_set(Evas_Object *obj, elm_widget_focus_next_object_set(obj, next, dir); } +EAPI Elm_Object_Item * +elm_object_focus_next_item_get(const Evas_Object *obj, + Elm_Focus_Direction dir) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL); + return elm_widget_focus_next_item_get(obj, dir); +} + +EAPI void +elm_object_focus_next_item_set(Evas_Object *obj, + Elm_Object_Item *next_item, + Elm_Focus_Direction dir) +{ + EINA_SAFETY_ON_NULL_RETURN(obj); + elm_widget_focus_next_item_set(obj, next_item, dir); +} + EAPI Evas_Object * elm_object_focused_object_get(const Evas_Object *obj) { diff --git a/legacy/elementary/src/lib/elm_map.c b/legacy/elementary/src/lib/elm_map.c index 10172703d7..064652a986 100644 --- a/legacy/elementary/src/lib/elm_map.c +++ b/legacy/elementary/src/lib/elm_map.c @@ -3865,12 +3865,12 @@ _elm_map_pan_evas_object_smart_move(Eo *obj, Elm_Map_Pan_Data *_pd EINA_UNUSED, } EOLIAN static Eina_Bool -_elm_map_elm_widget_on_focus(Eo *obj, Elm_Map_Data *_pd EINA_UNUSED) +_elm_map_elm_widget_on_focus(Eo *obj, Elm_Map_Data *_pd EINA_UNUSED, Elm_Object_Item *item EINA_UNUSED) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); Eina_Bool int_ret = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj)) diff --git a/legacy/elementary/src/lib/elm_notify.c b/legacy/elementary/src/lib/elm_notify.c index 6fd416633f..19f06de488 100644 --- a/legacy/elementary/src/lib/elm_notify.c +++ b/legacy/elementary/src/lib/elm_notify.c @@ -352,7 +352,7 @@ _elm_notify_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Notify_Dat } EOLIAN static Eina_Bool -_elm_notify_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Notify_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_notify_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Notify_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *cur; @@ -361,7 +361,7 @@ _elm_notify_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Notify_Data *sd, Elm_ cur = sd->content; /* Try to cycle focus on content */ - return elm_widget_focus_next_get(cur, dir, next); + return elm_widget_focus_next_get(cur, dir, next, next_item); } EOLIAN static Eina_Bool diff --git a/legacy/elementary/src/lib/elm_object_item.h b/legacy/elementary/src/lib/elm_object_item.h index db19862229..db788f67c9 100644 --- a/legacy/elementary/src/lib/elm_object_item.h +++ b/legacy/elementary/src/lib/elm_object_item.h @@ -5,6 +5,8 @@ */ typedef Eo Elm_Object_Item; +typedef enum _Elm_Focus_Direction Elm_Focus_Direction; + /** * @typedef Elm_Object_Item_Signal_Cb * diff --git a/legacy/elementary/src/lib/elm_panel.c b/legacy/elementary/src/lib/elm_panel.c index 67ef1f0a9a..bea0c3f2e3 100644 --- a/legacy/elementary/src/lib/elm_panel.c +++ b/legacy/elementary/src/lib/elm_panel.c @@ -262,7 +262,7 @@ _elm_panel_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Panel_Data } EOLIAN static Eina_Bool -_elm_panel_elm_widget_focus_next(Eo *obj, Elm_Panel_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_panel_elm_widget_focus_next(Eo *obj, Elm_Panel_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *cur; Eina_List *items = NULL; @@ -283,19 +283,19 @@ _elm_panel_elm_widget_focus_next(Eo *obj, Elm_Panel_Data *sd, Elm_Focus_Directio items = eina_list_append(items, sd->content); ret = elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); eina_list_free(items); return ret; } - return elm_widget_focus_next_get(sd->content, dir, next); + return elm_widget_focus_next_get(sd->content, dir, next, next_item); } cur = sd->content; /* Try to Focus cycle in subitem */ - if (!sd->hidden) return elm_widget_focus_next_get(cur, dir, next); + if (!sd->hidden) return elm_widget_focus_next_get(cur, dir, next, next_item); /* access */ if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF) @@ -488,7 +488,7 @@ _panel_toggle(void *data EINA_UNUSED, if (sd->content && elm_widget_focus_get(sd->content)) { elm_widget_focused_object_clear(obj); - elm_widget_focus_steal(obj); + elm_widget_focus_steal(obj, NULL); } } diff --git a/legacy/elementary/src/lib/elm_panes.c b/legacy/elementary/src/lib/elm_panes.c index 335fe95b41..87dd4a7ab1 100644 --- a/legacy/elementary/src/lib/elm_panes.c +++ b/legacy/elementary/src/lib/elm_panes.c @@ -82,13 +82,14 @@ _elm_panes_elm_widget_theme_apply(Eo *obj, Elm_Panes_Data *sd) } EOLIAN static Eina_Bool -_elm_panes_elm_widget_focus_next(Eo *obj, Elm_Panes_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_panes_elm_widget_focus_next(Eo *obj, Elm_Panes_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { double w, h; unsigned char i; Evas_Object *to_focus; Evas_Object *chain[2]; Evas_Object *left, *right; + Elm_Object_Item *to_focus_item; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); @@ -100,7 +101,7 @@ _elm_panes_elm_widget_focus_next(Eo *obj, Elm_Panes_Data *sd, Elm_Focus_Directio if (((sd->horizontal) && (h == 0.0)) || ((!sd->horizontal) && (w == 0.0))) { - return elm_widget_focus_next_get(right, dir, next); + return elm_widget_focus_next_get(right, dir, next, next_item); } /* Direction */ @@ -118,13 +119,14 @@ _elm_panes_elm_widget_focus_next(Eo *obj, Elm_Panes_Data *sd, Elm_Focus_Directio i = elm_widget_focus_get(chain[1]); - if (elm_widget_focus_next_get(chain[i], dir, next)) return EINA_TRUE; + if (elm_widget_focus_next_get(chain[i], dir, next, next_item)) return EINA_TRUE; i = !i; - if (elm_widget_focus_next_get(chain[i], dir, &to_focus)) + if (elm_widget_focus_next_get(chain[i], dir, &to_focus, &to_focus_item)) { *next = to_focus; + *next_item = to_focus_item; return !!i; } diff --git a/legacy/elementary/src/lib/elm_photocam.c b/legacy/elementary/src/lib/elm_photocam.c index 2456425a63..d5a27c226b 100644 --- a/legacy/elementary/src/lib/elm_photocam.c +++ b/legacy/elementary/src/lib/elm_photocam.c @@ -853,12 +853,12 @@ _mouse_up_cb(void *data, } EOLIAN static Eina_Bool -_elm_photocam_elm_widget_on_focus(Eo *obj, Elm_Photocam_Data *_pd EINA_UNUSED) +_elm_photocam_elm_widget_on_focus(Eo *obj, Elm_Photocam_Data *_pd EINA_UNUSED, Elm_Object_Item *item EINA_UNUSED) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); Eina_Bool int_ret = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj)) diff --git a/legacy/elementary/src/lib/elm_plug.c b/legacy/elementary/src/lib/elm_plug.c index c3c31aa81d..3b132f2396 100644 --- a/legacy/elementary/src/lib/elm_plug.c +++ b/legacy/elementary/src/lib/elm_plug.c @@ -59,13 +59,13 @@ _elm_plug_resized(Ecore_Evas *ee) } EOLIAN static Eina_Bool -_elm_plug_elm_widget_on_focus(Eo *obj, void *sd EINA_UNUSED) +_elm_plug_elm_widget_on_focus(Eo *obj, void *sd EINA_UNUSED, Elm_Object_Item *item EINA_UNUSED) { Eina_Bool int_ret = EINA_FALSE; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj)) diff --git a/legacy/elementary/src/lib/elm_prefs.c b/legacy/elementary/src/lib/elm_prefs.c index 5b22fd416a..068678ad50 100644 --- a/legacy/elementary/src/lib/elm_prefs.c +++ b/legacy/elementary/src/lib/elm_prefs.c @@ -473,7 +473,7 @@ _elm_prefs_evas_object_smart_del(Eo *obj, Elm_Prefs_Data *sd) } EOLIAN static Eina_Bool -_elm_prefs_elm_widget_focus_next(Eo *obj, Elm_Prefs_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_prefs_elm_widget_focus_next(Eo *obj, Elm_Prefs_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { const Eina_List *items; @@ -483,12 +483,12 @@ _elm_prefs_elm_widget_focus_next(Eo *obj, Elm_Prefs_Data *sd, Elm_Focus_Directio if (items) { return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } if (sd->root && sd->root->w_obj) { - return elm_widget_focus_next_get(sd->root->w_obj, dir, next); + return elm_widget_focus_next_get(sd->root->w_obj, dir, next, next_item); } if (next) *next = NULL; diff --git a/legacy/elementary/src/lib/elm_scroller.c b/legacy/elementary/src/lib/elm_scroller.c index 22e0684f93..59c9a4a369 100644 --- a/legacy/elementary/src/lib/elm_scroller.c +++ b/legacy/elementary/src/lib/elm_scroller.c @@ -100,6 +100,7 @@ _key_action_move(Evas_Object *obj, const char *params) Evas_Object *current_focus = NULL; Eina_List *can_focus_list = NULL; Evas_Object *new_focus = NULL; + Elm_Object_Item *new_focus_item = NULL; Evas_Coord f_x = 0; Evas_Coord f_y = 0; Evas_Coord f_w = 0; @@ -145,7 +146,7 @@ _key_action_move(Evas_Object *obj, const char *params) cur_weight += ((f_y - c_y) - y) * ((f_y - c_y) - y); if (cur_weight == 0.0) { - elm_widget_focus_steal(cur); + elm_widget_focus_steal(cur, NULL); eina_list_free(can_focus_list); return EINA_TRUE; } @@ -159,7 +160,7 @@ _key_action_move(Evas_Object *obj, const char *params) } if (new_focus) { - elm_widget_focus_steal(new_focus); + elm_widget_focus_steal(new_focus, NULL); eina_list_free(can_focus_list); return EINA_TRUE; } @@ -169,13 +170,13 @@ _key_action_move(Evas_Object *obj, const char *params) Eina_Bool r = EINA_FALSE; if (!strcmp(dir, "left")) - r = elm_widget_focus_next_get(obj, ELM_FOCUS_LEFT, &new_focus); + r = elm_widget_focus_next_get(obj, ELM_FOCUS_LEFT, &new_focus, &new_focus_item); else if (!strcmp(dir, "right")) - r = elm_widget_focus_next_get(obj, ELM_FOCUS_RIGHT, &new_focus); + r = elm_widget_focus_next_get(obj, ELM_FOCUS_RIGHT, &new_focus, &new_focus_item); else if (!strcmp(dir, "up")) - r = elm_widget_focus_next_get(obj, ELM_FOCUS_UP, &new_focus); + r = elm_widget_focus_next_get(obj, ELM_FOCUS_UP, &new_focus, &new_focus_item); else if (!strcmp(dir, "down")) - r = elm_widget_focus_next_get(obj, ELM_FOCUS_DOWN, &new_focus); + r = elm_widget_focus_next_get(obj, ELM_FOCUS_DOWN, &new_focus, &new_focus_item); if (r && new_focus) { @@ -192,7 +193,7 @@ _key_action_move(Evas_Object *obj, const char *params) if (ELM_RECTS_INTERSECT(x, y, v_w, v_h, l_x, l_y, l_w, l_h)) { - elm_widget_focus_steal(new_focus); + elm_widget_focus_steal(new_focus, new_focus_item); eina_list_free(can_focus_list); return EINA_TRUE; } @@ -413,7 +414,7 @@ _elm_scroller_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Scroller } EOLIAN static Eina_Bool -_elm_scroller_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Scroller_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_scroller_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Scroller_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *cur; @@ -427,7 +428,7 @@ _elm_scroller_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Scroller_Data *sd, if ((elm_widget_can_focus_get(cur)) || (elm_widget_child_can_focus_get(cur))) { - return elm_widget_focus_next_get(cur, dir, next); + return elm_widget_focus_next_get(cur, dir, next, next_item); } return EINA_FALSE; @@ -439,7 +440,7 @@ _elm_scroller_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Scroller_Data *sd, if ((elm_widget_can_focus_get(cur)) || (elm_widget_child_can_focus_get(cur))) { - return elm_widget_focus_next_get(cur, dir, next); + return elm_widget_focus_next_get(cur, dir, next, next_item); } } diff --git a/legacy/elementary/src/lib/elm_segment_control.c b/legacy/elementary/src/lib/elm_segment_control.c index a011936495..53319e4548 100644 --- a/legacy/elementary/src/lib/elm_segment_control.c +++ b/legacy/elementary/src/lib/elm_segment_control.c @@ -644,7 +644,7 @@ _elm_segment_control_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_S } EOLIAN static Eina_Bool -_elm_segment_control_elm_widget_focus_next(Eo *obj, Elm_Segment_Control_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_segment_control_elm_widget_focus_next(Eo *obj, Elm_Segment_Control_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_List *items = NULL; Eina_List *l; @@ -659,7 +659,7 @@ _elm_segment_control_elm_widget_focus_next(Eo *obj, Elm_Segment_Control_Data *sd } return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } EOLIAN static Eina_Bool diff --git a/legacy/elementary/src/lib/elm_slider.c b/legacy/elementary/src/lib/elm_slider.c index d81ed572fb..bffab0a3df 100644 --- a/legacy/elementary/src/lib/elm_slider.c +++ b/legacy/elementary/src/lib/elm_slider.c @@ -1196,11 +1196,11 @@ _elm_slider_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Slide } EOLIAN static Eina_Bool -_elm_slider_elm_widget_on_focus(Eo *obj, Elm_Slider_Data *sd EINA_UNUSED) +_elm_slider_elm_widget_on_focus(Eo *obj, Elm_Slider_Data *sd EINA_UNUSED, Elm_Object_Item *item EINA_UNUSED) { Eina_Bool int_ret = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if ((sd->indicator_visible_mode == ELM_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS) && elm_widget_focus_get(obj)) _popup_show(obj, NULL, NULL, NULL); diff --git a/legacy/elementary/src/lib/elm_spinner.c b/legacy/elementary/src/lib/elm_spinner.c index f0a8d2ffd3..46533c39d1 100644 --- a/legacy/elementary/src/lib/elm_spinner.c +++ b/legacy/elementary/src/lib/elm_spinner.c @@ -760,10 +760,10 @@ _elm_spinner_elm_layout_sizing_eval(Eo *obj, Elm_Spinner_Data *_pd EINA_UNUSED) } EOLIAN static Eina_Bool -_elm_spinner_elm_widget_on_focus(Eo *obj, Elm_Spinner_Data *sd) +_elm_spinner_elm_widget_on_focus(Eo *obj, Elm_Spinner_Data *sd, Elm_Object_Item *item EINA_UNUSED) { Eina_Bool int_ret = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (!elm_widget_focus_get(obj)) @@ -1213,7 +1213,7 @@ _access_object_get(const Evas_Object *obj, const char* part) } EOLIAN static Eina_Bool -_elm_spinner_elm_widget_focus_next(Eo *obj, Elm_Spinner_Data *_pd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_spinner_elm_widget_focus_next(Eo *obj, Elm_Spinner_Data *_pd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Evas_Object *ao; Eina_List *items = NULL; @@ -1236,7 +1236,7 @@ _elm_spinner_elm_widget_focus_next(Eo *obj, Elm_Spinner_Data *_pd, Elm_Focus_Dir } return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } EOLIAN static void diff --git a/legacy/elementary/src/lib/elm_table.c b/legacy/elementary/src/lib/elm_table.c index 78a38a21da..51815188e2 100644 --- a/legacy/elementary/src/lib/elm_table.c +++ b/legacy/elementary/src/lib/elm_table.c @@ -21,7 +21,7 @@ _elm_table_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_ } EOLIAN static Eina_Bool -_elm_table_elm_widget_focus_next(Eo *obj, void *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next) +_elm_table_elm_widget_focus_next(Eo *obj, void *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_Bool int_ret; @@ -48,7 +48,7 @@ _elm_table_elm_widget_focus_next(Eo *obj, void *_pd EINA_UNUSED, Elm_Focus_Direc if (!items) return EINA_FALSE; } - int_ret = elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next); + int_ret = elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next, next_item); if (list_free) list_free((Eina_List *)items); diff --git a/legacy/elementary/src/lib/elm_toolbar.c b/legacy/elementary/src/lib/elm_toolbar.c index 163bd314ea..708f32f1d7 100644 --- a/legacy/elementary/src/lib/elm_toolbar.c +++ b/legacy/elementary/src/lib/elm_toolbar.c @@ -742,13 +742,13 @@ _elm_toolbar_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *eo_it) } EOLIAN static Eina_Bool -_elm_toolbar_elm_widget_on_focus(Eo *obj, Elm_Toolbar_Data *sd) +_elm_toolbar_elm_widget_on_focus(Eo *obj, Elm_Toolbar_Data *sd, Elm_Object_Item *item EINA_UNUSED) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); Eina_Bool int_ret = EINA_FALSE; Elm_Object_Item *eo_it = NULL; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_FALSE; if (!sd->items) return EINA_FALSE; @@ -2854,7 +2854,7 @@ _elm_toolbar_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Toolbar_D } EOLIAN static Eina_Bool -_elm_toolbar_elm_widget_focus_next(Eo *obj, Elm_Toolbar_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_toolbar_elm_widget_focus_next(Eo *obj, Elm_Toolbar_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_List *items = NULL; Eina_List *list; @@ -2875,7 +2875,7 @@ _elm_toolbar_elm_widget_focus_next(Eo *obj, Elm_Toolbar_Data *sd, Elm_Focus_Dire } return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next); + (obj, items, eina_list_data_get, dir, next, next_item); } static void diff --git a/legacy/elementary/src/lib/elm_web2.c b/legacy/elementary/src/lib/elm_web2.c index bfd116c70e..e3e9bfb94e 100644 --- a/legacy/elementary/src/lib/elm_web2.c +++ b/legacy/elementary/src/lib/elm_web2.c @@ -633,7 +633,7 @@ _elm_web_elm_widget_theme_apply(Eo *obj, Elm_Web_Data *sd EINA_UNUSED) } EOLIAN static Eina_Bool -_elm_web_elm_widget_on_focus(Eo *obj, Elm_Web_Data *sd) +_elm_web_elm_widget_on_focus(Eo *obj, Elm_Web_Data *sd, Elm_Object_Item *item EINA_UNUSED) { #ifdef HAVE_ELEMENTARY_WEB Evas_Object *top; @@ -641,7 +641,7 @@ _elm_web_elm_widget_on_focus(Eo *obj, Elm_Web_Data *sd) ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_TRUE); Eina_Bool int_ret = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_TRUE; top = elm_widget_top_get(obj); diff --git a/legacy/elementary/src/lib/elm_widget.c b/legacy/elementary/src/lib/elm_widget.c index 49fe1ac5ff..3b93522bb3 100644 --- a/legacy/elementary/src/lib/elm_widget.c +++ b/legacy/elementary/src/lib/elm_widget.c @@ -410,7 +410,7 @@ _if_focused_revert(Evas_Object *obj, if (!sd2) return; if (!elm_widget_focus_get(newest)) - elm_widget_focus_steal(newest); + elm_widget_focus_steal(newest, NULL); else { if (sd2->resize_obj && elm_widget_focus_get(sd2->resize_obj)) @@ -814,7 +814,7 @@ _elm_widget_focus_highlight_style_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data } static void -_parent_focus(Evas_Object *obj) +_parent_focus(Evas_Object *obj, Elm_Object_Item *item) { API_ENTRY return; @@ -823,7 +823,7 @@ _parent_focus(Evas_Object *obj) Evas_Object *o = elm_widget_parent_get(obj); sd->focus_order_on_calc = EINA_TRUE; - if (o) _parent_focus(o); + if (o) _parent_focus(o, item); if (!sd->focus_order_on_calc) return; /* we don't want to override it if by means of any of the @@ -836,7 +836,7 @@ _parent_focus(Evas_Object *obj) if (sd->top_win_focused) { sd->focused = EINA_TRUE; - eo_do(obj, elm_obj_widget_on_focus()); + eo_do(obj, elm_obj_widget_on_focus(item)); } sd->focus_order_on_calc = EINA_FALSE; @@ -1845,11 +1845,11 @@ EOLIAN static void _elm_widget_focus_cycle(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir) { Evas_Object *target = NULL; - + Elm_Object_Item *target_item = NULL; if (!_elm_widget_is(obj)) return; focus_origin = dir; - elm_widget_focus_next_get(obj, dir, &target); + elm_widget_focus_next_get(obj, dir, &target, &target_item); if (target) { /* access */ @@ -1859,12 +1859,12 @@ _elm_widget_focus_cycle(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Elm_Foc the ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE message, target will steal focus, or focus its own job. */ if (!_elm_access_auto_highlight_get()) - elm_widget_focus_steal(target); + elm_widget_focus_steal(target, target_item); _elm_access_highlight_set(target); elm_widget_focus_region_show(target); } - else elm_widget_focus_steal(target); + else elm_widget_focus_steal(target, target_item); } } @@ -1899,7 +1899,7 @@ _elm_widget_focus_direction_go(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, if (elm_widget_focus_direction_get (obj, current_focused, degree, &target, &weight)) { - elm_widget_focus_steal(target); + elm_widget_focus_steal(target, NULL); return EINA_TRUE; } @@ -2359,7 +2359,7 @@ _elm_widget_focus_list_direction_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart * @ingroup Widget */ EOLIAN static Eina_Bool -_elm_widget_focus_next_get(const Eo *obj, Elm_Widget_Smart_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) +_elm_widget_focus_next_get(const Eo *obj, Elm_Widget_Smart_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Elm_Access_Info *ac; @@ -2387,22 +2387,39 @@ _elm_widget_focus_next_get(const Eo *obj, Elm_Widget_Smart_Data *sd, Elm_Focus_D if (_elm_widget_focus_chain_manager_is(obj)) { Eina_Bool int_ret = EINA_FALSE; - eo_do((Eo *)obj, int_ret = elm_obj_widget_focus_next(dir, next)); + eo_do((Eo *)obj, int_ret = elm_obj_widget_focus_next(dir, next, next_item)); if (!int_ret && elm_widget_focus_get(obj)) { Evas_Object *o = NULL; if (dir == ELM_FOCUS_PREVIOUS) - o = sd->focus_previous; + *next_item = sd->item_focus_previous; else if (dir == ELM_FOCUS_NEXT) - o = sd->focus_next; + *next_item = sd->item_focus_next; else if (dir == ELM_FOCUS_UP) - o = sd->focus_up; + *next_item = sd->item_focus_up; else if (dir == ELM_FOCUS_DOWN) - o = sd->focus_down; + *next_item = sd->item_focus_down; else if (dir == ELM_FOCUS_RIGHT) - o = sd->focus_right; + *next_item = sd->item_focus_right; else if (dir == ELM_FOCUS_LEFT) - o = sd->focus_left; + *next_item = sd->item_focus_left; + o = elm_object_item_widget_get(*next_item); + + if (!o) + { + if (dir == ELM_FOCUS_PREVIOUS) + o = sd->focus_previous; + else if (dir == ELM_FOCUS_NEXT) + o = sd->focus_next; + else if (dir == ELM_FOCUS_UP) + o = sd->focus_up; + else if (dir == ELM_FOCUS_DOWN) + o = sd->focus_down; + else if (dir == ELM_FOCUS_RIGHT) + o = sd->focus_right; + else if (dir == ELM_FOCUS_LEFT) + o = sd->focus_left; + } if (o) { @@ -2430,17 +2447,34 @@ _elm_widget_focus_next_get(const Eo *obj, Elm_Widget_Smart_Data *sd, Elm_Focus_D if (elm_widget_focus_get(obj)) { if (dir == ELM_FOCUS_PREVIOUS) - *next = sd->focus_previous; + *next_item = sd->item_focus_previous; else if (dir == ELM_FOCUS_NEXT) - *next = sd->focus_next; + *next_item = sd->item_focus_next; else if (dir == ELM_FOCUS_UP) - *next = sd->focus_up; + *next_item = sd->item_focus_up; else if (dir == ELM_FOCUS_DOWN) - *next = sd->focus_down; + *next_item = sd->item_focus_down; else if (dir == ELM_FOCUS_RIGHT) - *next = sd->focus_right; + *next_item = sd->item_focus_right; else if (dir == ELM_FOCUS_LEFT) - *next = sd->focus_left; + *next_item = sd->item_focus_left; + *next = elm_object_item_widget_get(*next_item); + + if (!(*next)) + { + if (dir == ELM_FOCUS_PREVIOUS) + *next = sd->focus_previous; + else if (dir == ELM_FOCUS_NEXT) + *next = sd->focus_next; + else if (dir == ELM_FOCUS_UP) + *next = sd->focus_up; + else if (dir == ELM_FOCUS_DOWN) + *next = sd->focus_down; + else if (dir == ELM_FOCUS_RIGHT) + *next = sd->focus_right; + else if (dir == ELM_FOCUS_LEFT) + *next = sd->focus_left; + } if (*next) return EINA_TRUE; } @@ -2470,7 +2504,7 @@ _elm_widget_focus_next_get(const Eo *obj, Elm_Widget_Smart_Data *sd, Elm_Focus_D * @ingroup Widget */ EOLIAN static Eina_Bool -_elm_widget_focus_list_next_get(const Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, const Eina_List *items, list_data_get_func_type list_data_get, Elm_Focus_Direction dir, Evas_Object **next) +_elm_widget_focus_list_next_get(const Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, const Eina_List *items, list_data_get_func_type list_data_get, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { Eina_List *(*list_next)(const Eina_List *list) = NULL; Evas_Object *focused_object = NULL; @@ -2494,7 +2528,11 @@ _elm_widget_focus_list_next_get(const Eo *obj, Elm_Widget_Smart_Data *_pd EINA_U || (dir == ELM_FOCUS_RIGHT) || (dir == ELM_FOCUS_LEFT)) { - *next = elm_widget_focus_next_object_get(focused_object, dir); + *next_item = elm_widget_focus_next_item_get(focused_object, dir); + if (*next_item) + *next = elm_object_item_widget_get(*next_item); + else + *next = elm_widget_focus_next_object_get(focused_object, dir); if (*next) return EINA_TRUE; else { @@ -2550,12 +2588,14 @@ _elm_widget_focus_list_next_get(const Eo *obj, Elm_Widget_Smart_Data *_pd EINA_U const Eina_List *start = l; Evas_Object *to_focus = NULL; + Elm_Object_Item *to_focus_item = NULL; /* Iterate sub items */ /* Go to the end of list */ for (; l; l = list_next(l)) { Evas_Object *tmp = NULL; + Elm_Object_Item *tmp_item = NULL; Evas_Object *cur = list_data_get(l); if (!cur) continue; @@ -2564,9 +2604,10 @@ _elm_widget_focus_list_next_get(const Eo *obj, Elm_Widget_Smart_Data *_pd EINA_U continue; /* Try Focus cycle in subitem */ - if (elm_widget_focus_next_get(cur, dir, &tmp)) + if (elm_widget_focus_next_get(cur, dir, &tmp, &tmp_item)) { *next = tmp; + *next_item = tmp_item; return EINA_TRUE; } else if ((dir == ELM_FOCUS_UP) @@ -2577,11 +2618,15 @@ _elm_widget_focus_list_next_get(const Eo *obj, Elm_Widget_Smart_Data *_pd EINA_U if (tmp && elm_widget_focus_get(cur)) { *next = tmp; + *next_item = tmp_item; return EINA_FALSE; } } else if ((tmp) && (!to_focus)) - to_focus = tmp; + { + to_focus = tmp; + to_focus_item = tmp_item; + } } l = items; @@ -2590,21 +2635,24 @@ _elm_widget_focus_list_next_get(const Eo *obj, Elm_Widget_Smart_Data *_pd EINA_U for (; l != start; l = list_next(l)) { Evas_Object *tmp = NULL; + Elm_Object_Item *tmp_item = NULL; Evas_Object *cur = list_data_get(l); if (elm_widget_parent_get(cur) != obj) continue; /* Try Focus cycle in subitem */ - elm_widget_focus_next_get(cur, dir, &tmp); + elm_widget_focus_next_get(cur, dir, &tmp, &tmp_item); if (tmp) { *next = tmp; + *next_item = tmp_item; return EINA_FALSE; } } *next = to_focus; + *next_item = to_focus_item; return EINA_FALSE; } @@ -2677,6 +2725,44 @@ _elm_widget_focus_next_object_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd sd->focus_left = next; } +EOLIAN static Elm_Object_Item* +_elm_widget_focus_next_item_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, Elm_Focus_Direction dir) +{ + Elm_Object_Item *ret = NULL; + + if (dir == ELM_FOCUS_PREVIOUS) + ret = sd->item_focus_previous; + else if (dir == ELM_FOCUS_NEXT) + ret = sd->item_focus_next; + else if (dir == ELM_FOCUS_UP) + ret = sd->item_focus_up; + else if (dir == ELM_FOCUS_DOWN) + ret = sd->item_focus_down; + else if (dir == ELM_FOCUS_RIGHT) + ret = sd->item_focus_right; + else if (dir == ELM_FOCUS_LEFT) + ret = sd->item_focus_left; + + return ret; +} + +EOLIAN static void +_elm_widget_focus_next_item_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, Elm_Object_Item *next_item, Elm_Focus_Direction dir) +{ + if (dir == ELM_FOCUS_PREVIOUS) + sd->item_focus_previous = next_item; + else if (dir == ELM_FOCUS_NEXT) + sd->item_focus_next = next_item; + else if (dir == ELM_FOCUS_UP) + sd->item_focus_up = next_item; + else if (dir == ELM_FOCUS_DOWN) + sd->item_focus_down = next_item; + else if (dir == ELM_FOCUS_RIGHT) + sd->item_focus_right = next_item; + else if (dir == ELM_FOCUS_LEFT) + sd->item_focus_left = next_item; +} + EOLIAN static void _elm_widget_parent_highlight_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Bool highlighted) { @@ -2744,7 +2830,7 @@ _elm_widget_focus_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Bool focus) focus_order++; sd->focus_order = focus_order; sd->focused = EINA_TRUE; - eo_do(obj, elm_obj_widget_on_focus()); + eo_do(obj, elm_obj_widget_on_focus(NULL)); } if (focus) @@ -2818,11 +2904,11 @@ _elm_widget_focused_object_clear(Eo *obj, Elm_Widget_Smart_Data *sd) } } sd->focused = EINA_FALSE; - eo_do(obj, elm_obj_widget_on_focus()); + eo_do(obj, elm_obj_widget_on_focus(NULL)); } EOLIAN static void -_elm_widget_focus_steal(Eo *obj, Elm_Widget_Smart_Data *sd) +_elm_widget_focus_steal(Eo *obj, Elm_Widget_Smart_Data *sd, Elm_Object_Item *item) { Evas_Object *parent, *parent2, *o; @@ -2871,7 +2957,7 @@ _elm_widget_focus_steal(Eo *obj, Elm_Widget_Smart_Data *sd) } } } - _parent_focus(obj); + _parent_focus(obj, item); elm_widget_focus_region_show(obj); return; } @@ -3847,7 +3933,7 @@ _elm_widget_focus_mouse_up_handle(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSE if (!_is_focusable(obj)) return; top = elm_widget_top_get(obj); if (top && eo_isa(top, ELM_WIN_CLASS)) _elm_win_focus_auto_hide(top); - elm_widget_focus_steal(obj); + elm_widget_focus_steal(obj, NULL); } EOLIAN static void @@ -5444,6 +5530,82 @@ _elm_widget_item_access_object_get(const Eo *eo_item EINA_UNUSED, Elm_Widget_Ite return item->access_obj; } +EOLIAN static Evas_Object * +_elm_widget_item_focus_next_object_get(const Eo *eo_item EINA_UNUSED, Elm_Widget_Item_Data *item, Elm_Focus_Direction dir) +{ + Evas_Object *ret = NULL; + + if (dir == ELM_FOCUS_PREVIOUS) + ret = item->focus_previous; + else if (dir == ELM_FOCUS_NEXT) + ret = item->focus_next; + else if (dir == ELM_FOCUS_UP) + ret = item->focus_up; + else if (dir == ELM_FOCUS_DOWN) + ret = item->focus_down; + else if (dir == ELM_FOCUS_RIGHT) + ret = item->focus_right; + else if (dir == ELM_FOCUS_LEFT) + ret = item->focus_left; + + return ret; +} + +EOLIAN static void +_elm_widget_item_focus_next_object_set(Eo *eo_item EINA_UNUSED, Elm_Widget_Item_Data *item, Evas_Object *next, Elm_Focus_Direction dir) +{ + if (dir == ELM_FOCUS_PREVIOUS) + item->focus_previous = next; + else if (dir == ELM_FOCUS_NEXT) + item->focus_next = next; + else if (dir == ELM_FOCUS_UP) + item->focus_up = next; + else if (dir == ELM_FOCUS_DOWN) + item->focus_down = next; + else if (dir == ELM_FOCUS_RIGHT) + item->focus_right = next; + else if (dir == ELM_FOCUS_LEFT) + item->focus_left = next; +} + +EOLIAN static Elm_Object_Item* +_elm_widget_item_focus_next_item_get(const Eo *eo_item EINA_UNUSED, Elm_Widget_Item_Data *item, Elm_Focus_Direction dir) +{ + Elm_Object_Item *ret = NULL; + + if (dir == ELM_FOCUS_PREVIOUS) + ret = item->item_focus_previous; + else if (dir == ELM_FOCUS_NEXT) + ret = item->item_focus_next; + else if (dir == ELM_FOCUS_UP) + ret = item->item_focus_up; + else if (dir == ELM_FOCUS_DOWN) + ret = item->item_focus_down; + else if (dir == ELM_FOCUS_RIGHT) + ret = item->item_focus_right; + else if (dir == ELM_FOCUS_LEFT) + ret = item->item_focus_left; + + return ret; +} + +EOLIAN static void +_elm_widget_item_focus_next_item_set(Eo *eo_item EINA_UNUSED, Elm_Widget_Item_Data *item, Elm_Object_Item *next_item, Elm_Focus_Direction dir) +{ + if (dir == ELM_FOCUS_PREVIOUS) + item->item_focus_previous = next_item; + else if (dir == ELM_FOCUS_NEXT) + item->item_focus_next = next_item; + else if (dir == ELM_FOCUS_UP) + item->item_focus_up = next_item; + else if (dir == ELM_FOCUS_DOWN) + item->item_focus_down = next_item; + else if (dir == ELM_FOCUS_RIGHT) + item->item_focus_right = next_item; + else if (dir == ELM_FOCUS_LEFT) + item->item_focus_left = next_item; +} + /* happy debug functions */ #ifdef ELM_DEBUG static void @@ -5583,7 +5745,7 @@ _elm_widget_eo_base_destructor(Eo *obj, Elm_Widget_Smart_Data *sd) } EOLIAN static Eina_Bool -_elm_widget_on_focus(Eo *obj, Elm_Widget_Smart_Data *sd) +_elm_widget_on_focus(Eo *obj, Elm_Widget_Smart_Data *sd, Elm_Object_Item *item EINA_UNUSED) { if (elm_widget_can_focus_get(obj)) { diff --git a/legacy/elementary/src/lib/elm_widget.eo b/legacy/elementary/src/lib/elm_widget.eo index 808a348cb5..94633e1078 100644 --- a/legacy/elementary/src/lib/elm_widget.eo +++ b/legacy/elementary/src/lib/elm_widget.eo @@ -406,15 +406,39 @@ abstract Elm.Widget (Evas.Object_Smart, Elm_Interface_Atspi_Accessible, Elm_Inte } } focus_next_object_set { + [[Set the next object with specific focus direction. + + @since 1.8]] params { - @in next: Evas.Object * @nullable; - @in dir: Elm_Focus_Direction; + @in next: Evas.Object * @nullable; [[Focus next object]] + @in dir: Elm_Focus_Direction; [[Focus direction]] } } focus_next_object_get @const { - return: Evas.Object *; + [[Get the next object with specific focus direction. + + @since 1.8]] + return: Evas.Object *; [[Focus next object]] params { - @in dir: Elm_Focus_Direction; + @in dir: Elm_Focus_Direction; [[Focus direction]] + } + } + focus_next_item_set { + [[Set the next object item with specific focus direction. + + @since 1.16]] + params { + @in next_item: Elm_Object_Item * @nullable; [[Focus next object item]] + @in dir: Elm_Focus_Direction; [[Focus direction]] + } + } + focus_next_item_get @const { + [[Get the next object item with specific focus direction. + + @since 1.16]] + return: Elm_Object_Item *; [[Focus next object item]] + params { + @in dir: Elm_Focus_Direction; [[Focus direction]] } } focus_tree_unfocusable_handle { @@ -497,6 +521,9 @@ abstract Elm.Widget (Evas.Object_Smart, Elm_Interface_Atspi_Accessible, Elm_Inte } on_focus { [['Virtual' function handling focus in/out events on the widget. return true if this widget can handle focus, false otherwise]] + params { + @in item: Elm_Object_Item * @nullable; + } return: bool; } on_focus_region { @@ -599,6 +626,7 @@ abstract Elm.Widget (Evas.Object_Smart, Elm_Interface_Atspi_Accessible, Elm_Inte params { @in dir: Elm_Focus_Direction; @out next: Evas.Object *; + @out next_item: Elm_Object_Item *; } } translatable_part_text_get @const { @@ -626,6 +654,9 @@ abstract Elm.Widget (Evas.Object_Smart, Elm_Interface_Atspi_Accessible, Elm_Inte focus_custom_chain_unset { } focus_steal { + params { + @in item: Elm_Object_Item * @nullable; + } } focus_hide_handle { } @@ -634,6 +665,7 @@ abstract Elm.Widget (Evas.Object_Smart, Elm_Interface_Atspi_Accessible, Elm_Inte params { @in dir: Elm_Focus_Direction; @out next: Evas.Object *; + @out next_item: Elm_Object_Item *; } return: bool; } @@ -644,6 +676,7 @@ abstract Elm.Widget (Evas.Object_Smart, Elm_Interface_Atspi_Accessible, Elm_Inte @in list_data_get: list_data_get_func_type; @in dir: Elm_Focus_Direction; @out next: Evas.Object *; + @out next_item: Elm_Object_Item *; } } focus_mouse_up_handle { diff --git a/legacy/elementary/src/lib/elm_widget.h b/legacy/elementary/src/lib/elm_widget.h index 112f93525c..1e1ce9bfb3 100644 --- a/legacy/elementary/src/lib/elm_widget.h +++ b/legacy/elementary/src/lib/elm_widget.h @@ -380,6 +380,8 @@ typedef struct _Elm_Widget_Smart_Data Eina_List *tooltips, *cursors; Evas_Object *focus_previous, *focus_next; Evas_Object *focus_up, *focus_down, *focus_right, *focus_left; + Elm_Object_Item *item_focus_previous, *item_focus_next; + Elm_Object_Item *item_focus_up, *item_focus_down, *item_focus_right, *item_focus_left; /* "show region" coordinates. all widgets got those because this * info may be set and queried recursively through the widget @@ -608,6 +610,11 @@ struct _Elm_Widget_Item_Data /**< widget delete callback function. don't expose this callback call */ Elm_Widget_Del_Pre_Cb del_pre_func; + Evas_Object *focus_previous, *focus_next; + Evas_Object *focus_up, *focus_down, *focus_right, *focus_left; + Elm_Object_Item *item_focus_previous, *item_focus_next; + Elm_Object_Item *item_focus_up, *item_focus_down, *item_focus_right, *item_focus_left; + Evas_Object *access_obj; const char *access_info; Eina_List *access_order; @@ -673,11 +680,13 @@ EAPI void elm_widget_focus_custom_chain_prepend(Evas_Object *obj, Ev EAPI void elm_widget_focus_cycle(Evas_Object *obj, Elm_Focus_Direction dir); EAPI Eina_Bool elm_widget_focus_direction_go(Evas_Object *obj, double degree); EAPI Eina_Bool elm_widget_focus_direction_get(const Evas_Object *obj, const Evas_Object *base, double degree, Evas_Object **direction, double *weight); -EAPI Eina_Bool elm_widget_focus_next_get(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next); +EAPI Eina_Bool elm_widget_focus_next_get(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item); EAPI Eina_Bool elm_widget_focus_list_direction_get(const Evas_Object *obj, const Evas_Object *base, const Eina_List *items, void *(*list_data_get)(const Eina_List *list), double degree, Evas_Object **direction, double *weight); -EAPI Eina_Bool elm_widget_focus_list_next_get(const Evas_Object *obj, const Eina_List *items, void *(*list_data_get)(const Eina_List *list), Elm_Focus_Direction dir, Evas_Object **next); +EAPI Eina_Bool elm_widget_focus_list_next_get(const Evas_Object *obj, const Eina_List *items, void *(*list_data_get)(const Eina_List *list), Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item); EAPI Evas_Object *elm_widget_focus_next_object_get(const Evas_Object *obj, Elm_Focus_Direction dir); EAPI void elm_widget_focus_next_object_set(Evas_Object *obj, Evas_Object *next, Elm_Focus_Direction dir); +EAPI Elm_Object_Item *elm_widget_focus_next_item_get(const Evas_Object *obj, Elm_Focus_Direction dir); +EAPI void elm_widget_focus_next_item_set(Evas_Object *obj, Elm_Object_Item *next_item, Elm_Focus_Direction dir); EAPI Eina_Bool elm_widget_focus_highlight_style_set(Evas_Object *obj, const char *style); EAPI const char *elm_widget_focus_highlight_style_get(const Evas_Object *obj); EAPI void elm_widget_parent_highlight_set(Evas_Object *obj, Eina_Bool highlighted); @@ -686,7 +695,7 @@ EAPI void elm_widget_focused_object_clear(Evas_Object *obj); EAPI Evas_Object *elm_widget_parent_get(const Evas_Object *obj); EAPI Evas_Object *elm_widget_parent2_get(const Evas_Object *obj); EAPI void elm_widget_parent2_set(Evas_Object *obj, Evas_Object *parent); -EAPI void elm_widget_focus_steal(Evas_Object *obj); +EAPI void elm_widget_focus_steal(Evas_Object *obj, Elm_Object_Item *next_item); EAPI Evas_Object *elm_widget_newest_focus_order_get(const Evas_Object *obj, unsigned int *newest_focus_order, Eina_Bool can_focus_only); EAPI void elm_widget_display_mode_set(Evas_Object *obj, Evas_Display_Mode dispmode); EAPI Eina_Bool elm_widget_focus_highlight_enabled_get(const Evas_Object *obj); diff --git a/legacy/elementary/src/lib/elm_widget_item.eo b/legacy/elementary/src/lib/elm_widget_item.eo index 021b4c0015..d4fd187d96 100644 --- a/legacy/elementary/src/lib/elm_widget_item.eo +++ b/legacy/elementary/src/lib/elm_widget_item.eo @@ -489,6 +489,42 @@ class Elm.Widget_Item(Eo.Base, Elm_Interface_Atspi_Accessible, legacy: null; return: bool; } + focus_next_object_get @const { + [[Get the next object with specific focus direction. + + @since 1.16]] + params { + dir: Elm_Focus_Direction; [[Focus direction]] + } + return: Evas.Object *; [[Focus next object]] + } + focus_next_object_set { + [[Set the next object with specific focus direction. + + @since 1.16]] + params { + next: Evas.Object * @nullable; [[Focus next object]] + dir: Elm_Focus_Direction; [[Focus direction]] + } + } + focus_next_item_get @const { + [[Get the next object item with specific focus direction. + + @since 1.16]] + params { + dir: Elm_Focus_Direction; [[Focus direction]] + } + return: Elm_Object_Item *; [[Focus next object item]] + } + focus_next_item_set { + [[Set the next object item with specific focus direction. + + @since 1.16]] + params { + next_item: Elm_Object_Item * @nullable; [[Focus next object item]] + dir: Elm_Focus_Direction; [[Focus direction]] + } + } } implements { Eo.Base.constructor; diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c index 0ced87af53..9d4fecc471 100644 --- a/legacy/elementary/src/lib/elm_win.c +++ b/legacy/elementary/src/lib/elm_win.c @@ -1081,7 +1081,7 @@ _elm_win_focus_in(Ecore_Evas *ee) if (!elm_widget_focus_order_get(obj) || (obj == elm_widget_newest_focus_order_get(obj, &order, EINA_TRUE))) { - elm_widget_focus_steal(obj); + elm_widget_focus_steal(obj, NULL); } else { @@ -1439,7 +1439,7 @@ _elm_win_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Win_Data *_pd } EOLIAN static Eina_Bool -_elm_win_elm_widget_focus_next(Eo *obj, Elm_Win_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next) +_elm_win_elm_widget_focus_next(Eo *obj, Elm_Win_Data *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); @@ -1457,7 +1457,7 @@ _elm_win_elm_widget_focus_next(Eo *obj, Elm_Win_Data *_pd EINA_UNUSED, Elm_Focus } list_data_get = eina_list_data_get; - elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next); + elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next, next_item); if (*next) return EINA_TRUE; } @@ -1495,10 +1495,10 @@ _elm_win_elm_widget_focus_direction(Eo *obj, Elm_Win_Data *_pd EINA_UNUSED, cons } EOLIAN static Eina_Bool -_elm_win_elm_widget_on_focus(Eo *obj, Elm_Win_Data *sd) +_elm_win_elm_widget_on_focus(Eo *obj, Elm_Win_Data *sd, Elm_Object_Item *item EINA_UNUSED) { Eina_Bool int_ret = EINA_FALSE; - eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); + eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus(NULL)); if (!int_ret) return EINA_TRUE; if (sd->img_obj) @@ -1819,7 +1819,7 @@ _win_img_focus_in(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - elm_widget_focus_steal(data); + elm_widget_focus_steal(data, NULL); } static void