forked from enlightenment/efl
access: Add elm_widget_access_highlight_in_theme_set/get.
This is for widget to draw the access highlight itself in theme.
This commit is contained in:
parent
36a373ce1c
commit
9d4a9dae02
|
@ -773,11 +773,33 @@ _elm_access_object_get(const Evas_Object *obj)
|
|||
return _elm_access_info_get(obj);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_elm_access_widget_target_get(Evas_Object *obj)
|
||||
{
|
||||
Evas_Object *o = obj;
|
||||
|
||||
do
|
||||
{
|
||||
if (elm_widget_is(o))
|
||||
break;
|
||||
else
|
||||
{
|
||||
o = elm_widget_parent_widget_get(o);
|
||||
if (!o)
|
||||
o = evas_object_smart_parent_get(o);
|
||||
}
|
||||
}
|
||||
while (o);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
_elm_access_object_highlight(Evas_Object *obj)
|
||||
{
|
||||
Evas_Object *o;
|
||||
Evas_Object *o, *widget;
|
||||
Evas_Coord x, y, w, h;
|
||||
Eina_Bool in_theme = EINA_FALSE;
|
||||
|
||||
o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
|
||||
if (!o)
|
||||
|
@ -802,6 +824,15 @@ _elm_access_object_highlight(Evas_Object *obj)
|
|||
_access_obj_hilight_move_cb, NULL);
|
||||
evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
|
||||
_access_obj_hilight_resize_cb, NULL);
|
||||
|
||||
widget = _elm_access_widget_target_get(ptarget);
|
||||
if (widget)
|
||||
{
|
||||
if (elm_widget_access_highlight_in_theme_get(widget))
|
||||
{
|
||||
elm_widget_signal_emit(widget, "elm,action,access_highlight,hide", "elm");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
evas_object_data_set(o, "_elm_access_target", obj);
|
||||
|
@ -822,9 +853,19 @@ _elm_access_object_highlight(Evas_Object *obj)
|
|||
evas_object_move(o, x, y);
|
||||
evas_object_resize(o, w, h);
|
||||
|
||||
widget = _elm_access_widget_target_get(obj);
|
||||
if (widget)
|
||||
{
|
||||
if (elm_widget_access_highlight_in_theme_get(widget))
|
||||
{
|
||||
in_theme = EINA_TRUE;
|
||||
elm_widget_signal_emit(widget, "elm,action,access_highlight,show", "elm");
|
||||
}
|
||||
}
|
||||
/* use callback, should an access object do below every time when
|
||||
* a window gets a client message ECORE_X_ATOM_E_ILLMUE_ACTION_READ? */
|
||||
if (!_access_action_callback_call(obj, ELM_ACCESS_ACTION_HIGHLIGHT, NULL))
|
||||
if (!in_theme &&
|
||||
!_access_action_callback_call(obj, ELM_ACCESS_ACTION_HIGHLIGHT, NULL))
|
||||
evas_object_show(o);
|
||||
else
|
||||
evas_object_hide(o);
|
||||
|
|
|
@ -320,10 +320,31 @@ _elm_layout_smart_disable(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
|
|||
if (ret) *ret = EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_layout_highlight_in_theme(Evas_Object *obj)
|
||||
{
|
||||
const char *fh;
|
||||
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||
|
||||
fh = edje_object_data_get
|
||||
(wd->resize_obj, "focus_highlight");
|
||||
if ((fh) && (!strcmp(fh, "on")))
|
||||
elm_widget_highlight_in_theme_set(obj, EINA_TRUE);
|
||||
else
|
||||
elm_widget_highlight_in_theme_set(obj, EINA_FALSE);
|
||||
|
||||
fh = edje_object_data_get
|
||||
(wd->resize_obj, "access_highlight");
|
||||
if ((fh) && (!strcmp(fh, "on")))
|
||||
elm_widget_access_highlight_in_theme_set(obj, EINA_TRUE);
|
||||
else
|
||||
elm_widget_access_highlight_in_theme_set(obj, EINA_FALSE);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_elm_layout_theme_internal(Eo *obj, Elm_Layout_Smart_Data *sd)
|
||||
{
|
||||
const char *fh;
|
||||
Eina_Bool ret = EINA_FALSE;
|
||||
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
|
||||
|
@ -340,12 +361,7 @@ _elm_layout_theme_internal(Eo *obj, Elm_Layout_Smart_Data *sd)
|
|||
(wd->resize_obj,
|
||||
elm_widget_scale_get(obj) * elm_config_scale_get());
|
||||
|
||||
fh = edje_object_data_get
|
||||
(wd->resize_obj, "focus_highlight");
|
||||
if ((fh) && (!strcmp(fh, "on")))
|
||||
elm_widget_highlight_in_theme_set(obj, EINA_TRUE);
|
||||
else
|
||||
elm_widget_highlight_in_theme_set(obj, EINA_FALSE);
|
||||
_elm_layout_highlight_in_theme(obj);
|
||||
|
||||
evas_object_smart_callback_call(obj, SIG_THEME_CHANGED, NULL);
|
||||
|
||||
|
|
|
@ -1622,6 +1622,39 @@ _elm_widget_highlight_in_theme_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list
|
|||
*ret = sd->highlight_in_theme;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_widget_access_highlight_in_theme_set(Evas_Object *obj,
|
||||
Eina_Bool highlight)
|
||||
{
|
||||
ELM_WIDGET_CHECK(obj);
|
||||
eo_do(obj, elm_wdg_access_highlight_in_theme_set(highlight));
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_widget_access_highlight_in_theme_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||
{
|
||||
Eina_Bool highlight = va_arg(*list, int);
|
||||
Elm_Widget_Smart_Data *sd = _pd;
|
||||
sd->access_highlight_in_theme = !!highlight;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
elm_widget_access_highlight_in_theme_get(const Evas_Object *obj)
|
||||
{
|
||||
ELM_WIDGET_CHECK(obj) EINA_FALSE;
|
||||
Eina_Bool ret = EINA_FALSE;
|
||||
eo_do((Eo *) obj, elm_wdg_access_highlight_in_theme_get(&ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_widget_access_highlight_in_theme_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||
{
|
||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
||||
Elm_Widget_Smart_Data *sd = _pd;
|
||||
*ret = sd->access_highlight_in_theme;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
elm_widget_focus_get(const Evas_Object *obj)
|
||||
{
|
||||
|
@ -6468,6 +6501,8 @@ _class_constructor(Eo_Class *klass)
|
|||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_HIGHLIGHT_IGNORE_GET), _elm_widget_highlight_ignore_get),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_HIGHLIGHT_IN_THEME_SET), _elm_widget_highlight_in_theme_set),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_HIGHLIGHT_IN_THEME_GET), _elm_widget_highlight_in_theme_get),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_ACCESS_HIGHLIGHT_IN_THEME_SET), _elm_widget_access_highlight_in_theme_set),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_ACCESS_HIGHLIGHT_IN_THEME_GET), _elm_widget_access_highlight_in_theme_get),
|
||||
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_SCROLL_HOLD_PUSH), _elm_widget_scroll_hold_push),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_SCROLL_HOLD_POP), _elm_widget_scroll_hold_pop),
|
||||
|
@ -6615,6 +6650,8 @@ static const Eo_Op_Description op_desc[] = {
|
|||
EO_OP_DESCRIPTION(ELM_WIDGET_SUB_ID_HIGHLIGHT_IGNORE_GET, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_WIDGET_SUB_ID_HIGHLIGHT_IN_THEME_SET, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_WIDGET_SUB_ID_HIGHLIGHT_IN_THEME_GET, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_WIDGET_SUB_ID_ACCESS_HIGHLIGHT_IN_THEME_SET, "Set the access highlight in widget theme."),
|
||||
EO_OP_DESCRIPTION(ELM_WIDGET_SUB_ID_ACCESS_HIGHLIGHT_IN_THEME_GET, "Get the access highlight in widget theme."),
|
||||
|
||||
EO_OP_DESCRIPTION(ELM_WIDGET_SUB_ID_SCROLL_HOLD_PUSH, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_WIDGET_SUB_ID_SCROLL_HOLD_POP, "description here"),
|
||||
|
|
|
@ -426,6 +426,7 @@ typedef struct _Elm_Widget_Smart_Data
|
|||
Eina_Bool tree_unfocusable : 1;
|
||||
Eina_Bool highlight_ignore : 1;
|
||||
Eina_Bool highlight_in_theme : 1;
|
||||
Eina_Bool access_highlight_in_theme : 1;
|
||||
Eina_Bool disabled : 1;
|
||||
Eina_Bool is_mirrored : 1;
|
||||
Eina_Bool mirrored_auto_mode : 1; /* This is
|
||||
|
@ -623,6 +624,8 @@ EAPI void elm_widget_highlight_ignore_set(Evas_Object *obj, Eina_Boo
|
|||
EAPI Eina_Bool elm_widget_highlight_ignore_get(const Evas_Object *obj);
|
||||
EAPI void elm_widget_highlight_in_theme_set(Evas_Object *obj, Eina_Bool highlight);
|
||||
EAPI Eina_Bool elm_widget_highlight_in_theme_get(const Evas_Object *obj);
|
||||
EAPI void elm_widget_access_highlight_in_theme_set(Evas_Object *obj, Eina_Bool highlight);
|
||||
EAPI Eina_Bool elm_widget_access_highlight_in_theme_get(const Evas_Object *obj);
|
||||
EAPI Eina_Bool elm_widget_focus_get(const Evas_Object *obj);
|
||||
EAPI Eina_Bool elm_widget_highlight_get(const Evas_Object *obj);
|
||||
EAPI Evas_Object *elm_widget_focused_object_get(const Evas_Object *obj);
|
||||
|
@ -1156,6 +1159,8 @@ enum
|
|||
ELM_WIDGET_SUB_ID_HIGHLIGHT_IGNORE_GET,
|
||||
ELM_WIDGET_SUB_ID_HIGHLIGHT_IN_THEME_SET,
|
||||
ELM_WIDGET_SUB_ID_HIGHLIGHT_IN_THEME_GET,
|
||||
ELM_WIDGET_SUB_ID_ACCESS_HIGHLIGHT_IN_THEME_SET,
|
||||
ELM_WIDGET_SUB_ID_ACCESS_HIGHLIGHT_IN_THEME_GET,
|
||||
|
||||
ELM_WIDGET_SUB_ID_SCROLL_HOLD_PUSH,
|
||||
ELM_WIDGET_SUB_ID_SCROLL_HOLD_POP,
|
||||
|
@ -1596,6 +1601,28 @@ typedef void * (*list_data_get_func_type)(const Eina_List * l);
|
|||
*/
|
||||
#define elm_wdg_highlight_in_theme_get(ret) ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_HIGHLIGHT_IN_THEME_GET), EO_TYPECHECK(Eina_Bool *, ret)
|
||||
|
||||
/**
|
||||
* @def elm_wdg_access_highlight_in_theme_set
|
||||
* @since 1.9
|
||||
*
|
||||
* No description supplied by the EAPI.
|
||||
*
|
||||
* @param[in] access highlight
|
||||
*
|
||||
*/
|
||||
#define elm_wdg_access_highlight_in_theme_set(highlight) ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_ACCESS_HIGHLIGHT_IN_THEME_SET), EO_TYPECHECK(Eina_Bool, highlight)
|
||||
|
||||
/**
|
||||
* @def elm_wdg_access_highlight_in_theme_get
|
||||
* @since 1.9
|
||||
*
|
||||
* No description supplied by the EAPI.
|
||||
*
|
||||
* @param[out] ret
|
||||
*
|
||||
*/
|
||||
#define elm_wdg_access_highlight_in_theme_get(ret) ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_ACCESS_HIGHLIGHT_IN_THEME_GET), EO_TYPECHECK(Eina_Bool *, ret)
|
||||
|
||||
/**
|
||||
* @def elm_wdg_scroll_hold_push
|
||||
* @since 1.8
|
||||
|
|
Loading…
Reference in New Issue