selectable_text, [[State: selectable text]]
is_default, [[State: is default]]
visited, [[State: visited]]
+ //TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+ checkable, [[State: checkable]]
+ has_popup, [[State: has popup]]
+ read_only, [[State: read only]]
+ highlighted, [[State: highlighted]]
+ highlightable, [[State: highlightable]]
+ //
last_defined, [[Last enum entry sentinel]]
}
return evas_object_focus_get(obj);
}
+//TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+EOLIAN static Eina_Bool
+_efl_access_component_highlight_grab(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED)
+{
+ WRN("The %s object does not implement the \"component_highlight_grab\" function.",
+ efl_class_name_get(efl_class_get(obj)));
+ return EINA_FALSE;
+}
+
+EOLIAN static Eina_Bool
+_efl_access_component_highlight_clear(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED)
+{
+ WRN("The %s object does not implement the \"component_highlight_clear\" function.",
+ efl_class_name_get(efl_class_get(obj)));
+ return EINA_FALSE;
+}
+//
+
#include "efl_access_component.eo.c"
}
return: Efl.Object; [[Top component object at given coordinate]]
}
+ //TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+ highlight_grab @protected {
+ [[ Highlights accessible widget.
+ returns true if highlight grab has successed, false otherwise. ]]
+ return: bool;
+ }
+ highlight_clear @protected {
+ [[ Clears highlight of accessible widget.
+ returns true if clear has successed, false otherwise. ]]
+ return: bool;
+ }
+ //
}
}
Eina_Bool auto_animate : 1;
} focus_highlight;
+ //TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+ struct
+ {
+ Evas_Object *fobj; /*accessibility highlight edje object */
+ Evas_Object *target;
+ Eina_Bool enabled;
+ } accessibility_highlight;
+ //
+
Evas_Object *icon;
const char *title;
const char *icon_name;
static Eina_Bool _key_action_return(Evas_Object *obj, const char *params);
static Eina_Bool _key_action_move(Evas_Object *obj, const char *params);
+//TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+static void _elm_win_accessibility_highlight_shutdown(Efl_Ui_Win_Data *sd);
+static void _elm_win_accessibility_highlight_update(Efl_Ui_Win_Data *sd);
+//
static const Elm_Action key_actions[] = {
{"return", _key_action_return},
}
_elm_win_focus_highlight_shutdown(sd);
+ //TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+ _elm_win_accessibility_highlight_shutdown(sd);
+ //
eina_stringshare_del(sd->focus_highlight.style);
eina_stringshare_del(sd->title);
else efl_ui_win_wm_available_profiles_set(obj, NULL);
}
+//TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+static void
+_elm_win_accessibility_highlight_obj_del(void *data,
+ Evas *e EINA_UNUSED,
+ Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ ELM_WIN_DATA_GET(data, sd);
+ _elm_win_accessibility_highlight_shutdown(sd);
+}
+
+static void
+_elm_win_accessibility_highlight_obj_move(void *data,
+ Evas *e EINA_UNUSED,
+ Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ ELM_WIN_DATA_GET(data, sd);
+ _elm_win_accessibility_highlight_update(sd);
+}
+
+static void
+_elm_win_accessibility_highlight_obj_resize(void *data,
+ Evas *e EINA_UNUSED,
+ Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ ELM_WIN_DATA_GET(data, sd);
+ _elm_win_accessibility_highlight_update(sd);
+}
+
+static void _elm_win_accessibility_highlight_callbacks_add(Efl_Ui_Win_Data *sd)
+{
+ Evas_Object *obj = sd->accessibility_highlight.target;
+ if (!obj) return;
+
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _elm_win_accessibility_highlight_obj_del, sd->obj);
+
+ if (efl_isa(obj, ELM_WIDGET_CLASS) && elm_widget_access_highlight_in_theme_get(obj))
+ return;
+
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _elm_win_accessibility_highlight_obj_move, sd->obj);
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _elm_win_accessibility_highlight_obj_resize, sd->obj);
+}
+
+static void _elm_win_accessibility_highlight_callbacks_del(Efl_Ui_Win_Data *sd)
+{
+ Evas_Object *obj = sd->accessibility_highlight.target;
+ if (!obj) return;
+
+ evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL, _elm_win_accessibility_highlight_obj_del, sd->obj);
+
+ if (efl_isa(obj, ELM_WIDGET_CLASS) && elm_widget_access_highlight_in_theme_get(obj))
+ return;
+
+ evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOVE, _elm_win_accessibility_highlight_obj_move, sd->obj);
+ evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE, _elm_win_accessibility_highlight_obj_resize, sd->obj);
+}
+
+static void _elm_win_accessibility_highlight_init(Efl_Ui_Win_Data *sd)
+{
+ if (sd->accessibility_highlight.enabled) return;
+ sd->accessibility_highlight.enabled = EINA_TRUE;
+
+ sd->accessibility_highlight.fobj = edje_object_add(sd->evas);
+ elm_widget_theme_object_set(sd->obj, sd->accessibility_highlight.fobj, "access", "base", "default");
+}
+
+static void
+_elm_win_accessibility_highlight_visible_set(Efl_Ui_Win_Data *sd,
+Eina_Bool visible)
+{
+ Evas_Object *fobj = sd->accessibility_highlight.fobj;
+ Evas_Object *target = sd->accessibility_highlight.target;
+
+ if (!target) return;
+
+ if (efl_isa(target, ELM_WIDGET_CLASS) && elm_widget_access_highlight_in_theme_get(target))
+ {
+ if (visible)
+ elm_widget_signal_emit(target, "elm,action,access_highlight,show", "elm");
+ else
+ elm_widget_signal_emit(target, "elm,action,access_highlight,hide", "elm");
+ }
+ else
+ {
+ if (visible)
+ evas_object_show(fobj);
+ else
+ evas_object_hide(fobj);
+ }
+}
+
+static void
+_elm_win_accessibility_highlight_update(Efl_Ui_Win_Data *sd)
+{
+ Evas_Coord x, y, w, h;
+ Evas_Object *target = sd->accessibility_highlight.target;
+ Evas_Object *fobj = sd->accessibility_highlight.fobj;
+
+ if (!target) return;
+ if (efl_isa(target, ELM_WIDGET_CLASS) && elm_widget_access_highlight_in_theme_get(target))
+ return;
+
+ evas_object_geometry_get(target, &x, &y, &w, &h);
+ evas_object_move(fobj, x, y);
+ evas_object_resize(fobj, w, h);
+ evas_object_raise(fobj);
+}
+
+static void
+_elm_win_accessibility_highlight_target_set(Efl_Ui_Win_Data *sd, Evas_Object *target)
+{
+ Evas_Object *clip, *fobj = sd->accessibility_highlight.fobj;
+
+ if (sd->accessibility_highlight.target == target)
+ return;
+
+ _elm_win_accessibility_highlight_visible_set(sd, EINA_FALSE);
+ _elm_win_accessibility_highlight_callbacks_del(sd);
+
+ sd->accessibility_highlight.target = target;
+ if (!target) return;
+
+ clip = evas_object_clip_get(target);
+ if (clip) evas_object_clip_set(fobj, clip);
+
+ _elm_win_accessibility_highlight_callbacks_add(sd);
+ _elm_win_accessibility_highlight_update(sd);
+ _elm_win_accessibility_highlight_visible_set(sd, EINA_TRUE);
+}
+
+static void _elm_win_accessibility_highlight_shutdown(Efl_Ui_Win_Data *sd)
+{
+ if (!sd->accessibility_highlight.enabled) return;
+
+ _elm_win_accessibility_highlight_target_set(sd, NULL);
+ evas_object_del(sd->accessibility_highlight.fobj);
+ sd->accessibility_highlight.fobj = NULL;
+ sd->accessibility_highlight.enabled = EINA_FALSE;
+}
+
+void
+_elm_win_accessibility_highlight_set(Evas_Object *win, Evas_Object *obj)
+{
+ ELM_WIN_DATA_GET_OR_RETURN(win, sd);
+
+ if (obj)
+ {
+ _elm_win_accessibility_highlight_init(sd);
+ _elm_win_accessibility_highlight_target_set(sd, obj);
+ }
+ else
+ _elm_win_accessibility_highlight_shutdown(sd);
+}
+
+Evas_Object*
+_elm_win_accessibility_highlight_get(Evas_Object *win)
+{
+ ELM_WIN_DATA_GET_OR_RETURN(win, sd, NULL);
+ return sd->accessibility_highlight.target;
+}
+//
+
// deprecated
EAPI void
return ret;
}
+//TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+static Eldbus_Message *
+_component_grab_highlight(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+ const char *obj_path = eldbus_message_path_get(msg);
+ Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
+ Eo *obj = _bridge_object_from_path(bridge, obj_path);
+ Eldbus_Message *ret;
+ Eina_Bool highlight = EINA_FALSE;
+
+ ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_COMPONENT_MIXIN, msg);
+
+ eo_do(obj, highlight = elm_interface_atspi_component_highlight_grab());
+
+ ret = eldbus_message_method_return_new(msg);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
+
+ eldbus_message_arguments_append(ret, "b", highlight);
+
+ return ret;
+}
+
+static Eldbus_Message *
+_component_clear_highlight(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+ const char *obj_path = eldbus_message_path_get(msg);
+ Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
+ Eo *obj = _bridge_object_from_path(bridge, obj_path);
+ Eldbus_Message *ret;
+ Eina_Bool highlight = EINA_FALSE;
+
+ ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_COMPONENT_MIXIN, msg);
+
+ eo_do(obj, highlight = elm_interface_atspi_component_highlight_clear());
+
+ ret = eldbus_message_method_return_new(msg);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
+
+ eldbus_message_arguments_append(ret, "b", highlight);
+
+ return ret;
+}
+//
+
static Eldbus_Message *
_component_get_alpha(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
{
return elm_widget_focus_region_show_mode_get(obj);
}
+
+//TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+EAPI void
+elm_object_accessibility_highlight_set(Evas_Object *obj, Eina_Bool visible)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ Evas_Object *win = NULL;
+
+ if (!elm_object_widget_check(obj))
+ return;
+
+ win = elm_object_top_widget_get(obj);
+ if (!win || !efl_isa(win, EFL_UI_WIN_CLASS))
+ return;
+
+ if (!visible && (obj == _elm_win_accessibility_highlight_get(win)))
+ _elm_win_accessibility_highlight_set(win, NULL);
+ else if (visible)
+ _elm_win_accessibility_highlight_set(win, obj);
+}
+//
*/
EAPI Eina_Bool elm_object_orientation_mode_disabled_get(const Evas_Object *obj);
+//TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+/**
+ * Set accessibility highlight on object.
+ *
+ * Accessibility higlight helps visually impaired people to localize elements on
+ * application's user interface. It can be used to point to currently focused
+ * objects, interesting elements in given application context or it can just point
+ * to object that mouse is currently hovering above.
+ *
+ * There can be only one highlighted object per window.
+ *
+ * @param obj The Elementary widget to set accessibility highlight.
+ * @param val EINA_TRUE is object should be highlighted, EINA_FALSE otherwise.
+ *
+ * @tizen_only
+ *
+ * @ingroup General
+ */
+EAPI void elm_object_accessibility_highlight_set(Evas_Object *obj, Eina_Bool val);
+//
{
Efl_Access_State_Set states = 0;
+ //TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+ Evas_Object *win = elm_widget_top_get(item->widget);
+ if (win && efl_isa(win, EFL_UI_WIN_CLASS))
+ {
+ if (_elm_win_accessibility_highlight_get(win) == item->view)
+ STATE_TYPE_SET(states, ELM_ATSPI_STATE_HIGHLIGHTED);
+ }
+ STATE_TYPE_SET(states, ELM_ATSPI_STATE_HIGHLIGHTABLE);
+ //
+
STATE_TYPE_SET(states, EFL_ACCESS_STATE_FOCUSABLE);
if (elm_object_item_focus_get(eo_item))
states = efl_access_state_set_get(efl_super(obj, ELM_WIDGET_CLASS));
+ //TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+ Evas_Object *win = elm_widget_top_get(obj);
+ if (win && efl_isa(win, EFL_UI_WIN_CLASS))
+ {
+ if (_elm_win_accessibility_highlight_get(win) == obj)
+ STATE_TYPE_SET(states, ELM_ATSPI_STATE_HIGHLIGHTED);
+ }
+ STATE_TYPE_SET(states, ELM_ATSPI_STATE_HIGHLIGHTABLE);
+ //
+
if (evas_object_visible_get(obj))
{
STATE_TYPE_SET(states, EFL_ACCESS_STATE_VISIBLE);
EFL_OBJECT_OP_FUNC(efl_canvas_object_legacy_ctor, _elm_widget_legacy_ctor), \
EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _elm_widget_efl_object_dbg_info_get)
+//TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+EOLIAN static Eo *
+_elm_widget_efl_access_component_accessible_at_point_get(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Eina_Bool screen_coords, int x, int y)
+{
+ Eina_List *l, *l2, *children;
+ Eo *child;
+ Evas_Object *stack_item;
+ Eo *compare_obj;
+ int ee_x, ee_y;
+
+ if (screen_coords)
+ {
+ Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
+ if (!ee) return NULL;
+ ecore_evas_geometry_get(ee, &ee_x, &ee_y, NULL, NULL);
+ x -= ee_x;
+ y -= ee_y;
+ }
+
+ children = elm_interface_atspi_accessible_children_get(obj);
+
+ /* Get evas_object stacked at given x,y coordinates starting from top */
+ Eina_List *stack = evas_tree_objects_at_xy_get(evas_object_evas_get(obj), NULL, x, y);
+
+ /* Foreach stacked object starting from top */
+ EINA_LIST_FOREACH(stack, l, stack_item)
+ {
+ /* Foreach at-spi children traverse stack_item evas_objects hierarchy */
+ EINA_LIST_FOREACH(children, l2, child)
+ {
+ /* Compare object used to compare with stacked evas objects */
+ compare_obj = child;
+ /* In case of widget_items compare should be different then elm_widget_ item object */
+ if (efl_isa(child, ELM_WIDGET_ITEM_CLASS))
+ {
+ Elm_Widget_Item_Data *id = efl_data_scope_get(child, ELM_WIDGET_ITEM_CLASS);
+ compare_obj = id->view;
+ }
+ /* In case of access object compare should be 'wrapped' evas_object */
+ if (efl_isa(child, ELM_ACCESS_CLASS))
+ {
+ Elm_Access_Info *info = _elm_access_info_get(child);
+ compare_obj = info->part_object;
+ }
+ /* If spacial eo children do not have backing evas_object continue with search */
+ if (!compare_obj)
+ continue;
+
+ Evas_Object *smart_parent = stack_item;
+ while (smart_parent)
+ {
+ if (smart_parent == compare_obj)
+ {
+ eina_list_free(children);
+ eina_list_free(stack);
+ return child;
+ }
+ smart_parent = evas_object_smart_parent_get(smart_parent);
+ }
+ }
+ }
+
+ eina_list_free(children);
+ eina_list_free(stack);
+ return NULL;
+}
+
+EOLIAN static Eina_Bool
+_elm_widget_item_efl_access_component_highlight_grab(Eo *obj, Elm_Widget_Item_Data *sd)
+{
+ Evas_Object *win = elm_widget_top_get(sd->widget);
+ if (win && efl_isa(win, EFL_UI_WIN_CLASS))
+ {
+ _elm_win_accessibility_highlight_set(win, sd->view);
+ elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_TRUE);
+ return EINA_TRUE;
+ }
+ return EINA_FALSE;
+}
+
+EOLIAN static Eina_Bool
+_elm_widget_item_efl_access_component_highlight_clear(Eo *obj, Elm_Widget_Item_Data *sd)
+{
+ Evas_Object *win = elm_widget_top_get(sd->widget);
+ if (win && efl_isa(win, EFL_UI_WIN_CLASS))
+ {
+ if (_elm_win_accessibility_highlight_get(win) != sd->view)
+ return EINA_TRUE;
+
+ _elm_win_accessibility_highlight_set(win, NULL);
+ elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_FALSE);
+ return EINA_TRUE;
+ }
+ return EINA_FALSE;
+}
+
+EOLIAN static Eina_Bool
+_elm_widget_efl_access_component_highlight_grab(Eo *obj, Elm_Widget_Smart_Data *pd EINA_UNUSED)
+{
+ elm_object_accessibility_highlight_set(obj, EINA_TRUE);
+ elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_TRUE);
+ return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_elm_widget_efl_access_component_highlight_clear(Eo *obj, Elm_Widget_Smart_Data *pd EINA_UNUSED)
+{
+ elm_object_accessibility_highlight_set(obj, EINA_FALSE);
+ elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_FALSE);
+ return EINA_TRUE;
+}
+//
+
#include "elm_widget_item.eo.c"
#include "elm_widget.eo.c"
Efl.Access.parent { get; }
Efl.Access.attributes { get; }
Efl.Access.Component.focus_grab;
+ //TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+ Efl.Access.Component.accessible_at_point_get;
+ Efl.Access.Component.highlight_grab;
+ Efl.Access.Component.highlight_clear;
+ //
Efl.Ui.Focus.User.focus_manager { get; }
Efl.Ui.Focus.User.focus_parent { get; }
Efl.Ui.Focus.Object.focus_geometry { get; }
Evas_Object *_elm_win_focus_highlight_object_get(Evas_Object *obj);
void _elm_win_focus_auto_show(Evas_Object *obj);
void _elm_win_focus_auto_hide(Evas_Object *obj);
+//TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+void _elm_win_accessibility_highlight_set(Evas_Object *win, Evas_Object *obj);
+Evas_Object *_elm_win_accessibility_highlight_get(Evas_Object *win);
+//
EAPI void _elm_access_clear(Elm_Access_Info *ac);
EAPI void _elm_access_text_set(Elm_Access_Info *ac, int type, const char *text);
Efl.Access.Component.alpha { get; }
Efl.Access.Component.layer { get; }
Efl.Access.Component.focus_grab;
+ //TIZEN_ONLY(20171108): bring HIGHLIGHT related changes
+ Efl.Access.Component.highlight_grab;
+ Efl.Access.Component.highlight_clear;
+ //
}
}