focus: add the APIs to set the focus next about item.
Add elm_object_focus_next_item_set/get, elm_object_item_focus_next_object_set/get and elm_object_item_focus_next_item_set/get. If the item and object is set at the same time, the item is preference to object when the focus moves. This feature is implemented about gengrid. It will be implemented about ohter widgets. @feature
This commit is contained in:
parent
fcb26c4b91
commit
0dedfc9248
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
*/
|
||||
typedef Eo Elm_Object_Item;
|
||||
|
||||
typedef enum _Elm_Focus_Direction Elm_Focus_Direction;
|
||||
|
||||
/**
|
||||
* @typedef Elm_Object_Item_Signal_Cb
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue