opensource changed some sturcture and rename object.
so we changed tizen only code based on open source.
* TIZEN_ONLY_FEATURE: API for handling text properties of Edje *
***********************************************************************************/
EOLIAN Eina_Bool
-_edje_object_part_text_min_policy_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, const char *state_name, Eina_Bool min_x, Eina_Bool min_y)
+_efl_canvas_layout_part_text_min_policy_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, const char *state_name, Eina_Bool min_x, Eina_Bool min_y)
{
Edje_Real_Part *rp;
Edje_Part_Description_Text *desc;
}
EOLIAN Eina_Bool
-_edje_object_part_text_min_policy_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, const char *state_name, Eina_Bool *min_x, Eina_Bool *min_y)
+_efl_canvas_layout_part_text_min_policy_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, const char *state_name, Eina_Bool *min_x, Eina_Bool *min_y)
{
Edje_Real_Part *rp;
Edje_Part_Description_Text *desc;
}
EOLIAN Eina_Bool
-_edje_object_part_text_valign_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, double valign)
+_efl_canvas_layout_part_text_valign_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, double valign)
{
Edje_Real_Part *rp;
Edje_Part_Description_Text *desc;
}
EOLIAN double
-_edje_object_part_text_valign_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part)
+_efl_canvas_layout_part_text_valign_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part)
{
Edje_Real_Part *rp;
Edje_Part_Description_Text *desc;
return -1.0;
}
+/*******
+ * END *
+ *******/
+/***********************************************************************************
+ * TIZEN_ONLY_FEATURE: ellipsize.marquee, ellipsize.fade for TEXTBLOCK, TEXT part. *
+ ***********************************************************************************/
EOLIAN Eina_Bool
-_edje_object_part_text_marquee_always_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, Eina_Bool always)
+_efl_canvas_layout_part_text_marquee_duration_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, double duration)
{
Edje_Real_Part *rp;
if (rp->typedata.text)
{
- if (rp->typedata.text->ellipsize.marquee.always == always)
- return EINA_TRUE;
-
- rp->typedata.text->ellipsize.marquee.always = always;
+ rp->typedata.text->ellipsize.marquee.duration = duration;
return EINA_TRUE;
}
return EINA_FALSE;
}
-EOLIAN Eina_Bool
-_edje_object_part_text_marquee_always_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part)
+EOLIAN double
+_efl_canvas_layout_part_text_marquee_duration_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part)
{
Edje_Real_Part *rp;
Edje_Part_Description_Text *desc;
- if (!part) return EINA_FALSE;
+ if (!part) return -1.0;
rp = _edje_real_part_recursive_get(&ed, part);
- if (!rp) return EINA_FALSE;
+ if (!rp) return -1.0;
if ((rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) &&
(rp->part->type != EDJE_PART_TYPE_TEXT))
- return EINA_FALSE;
+ return -1.0;
if (rp->typedata.text)
- return rp->typedata.text->ellipsize.marquee.always;
+ {
+ if (rp->typedata.text->ellipsize.marquee.duration <= 0.0)
+ {
+ desc = (Edje_Part_Description_Text *)rp->chosen_description;
+ return desc->text.ellipsize.marquee.duration;
+ }
+ else
+ {
+ return rp->typedata.text->ellipsize.marquee.duration;
+ }
+ }
- return EINA_FALSE;
+ return -1.0;
}
-/*******
- * END *
- *******/
-/***********************************************************************************
- * TIZEN_ONLY_FEATURE: ellipsize.marquee, ellipsize.fade for TEXTBLOCK, TEXT part. *
- ***********************************************************************************/
EOLIAN Eina_Bool
-_edje_object_part_text_marquee_duration_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, double duration)
+_efl_canvas_layout_part_text_marquee_speed_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, double speed)
{
Edje_Real_Part *rp;
if (rp->typedata.text)
{
- rp->typedata.text->ellipsize.marquee.duration = duration;
+ rp->typedata.text->ellipsize.marquee.speed = speed;
return EINA_TRUE;
}
}
EOLIAN double
-_edje_object_part_text_marquee_duration_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part)
+_efl_canvas_layout_part_text_marquee_speed_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part)
{
Edje_Real_Part *rp;
Edje_Part_Description_Text *desc;
if (rp->typedata.text)
{
- if (rp->typedata.text->ellipsize.marquee.duration <= 0.0)
+ if (rp->typedata.text->ellipsize.marquee.speed <= 0.0)
{
desc = (Edje_Part_Description_Text *)rp->chosen_description;
- return desc->text.ellipsize.marquee.duration;
+ return desc->text.ellipsize.marquee.speed;
}
else
{
- return rp->typedata.text->ellipsize.marquee.duration;
+ return rp->typedata.text->ellipsize.marquee.speed;
}
}
}
EOLIAN Eina_Bool
-_edje_object_part_text_marquee_speed_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, double speed)
+_efl_canvas_layout_part_text_marquee_always_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, Eina_Bool always)
{
Edje_Real_Part *rp;
if (rp->typedata.text)
{
- rp->typedata.text->ellipsize.marquee.speed = speed;
+ if (rp->typedata.text->ellipsize.marquee.always == always)
+ return EINA_TRUE;
+
+ rp->typedata.text->ellipsize.marquee.always = always;
return EINA_TRUE;
}
return EINA_FALSE;
}
-EOLIAN double
-_edje_object_part_text_marquee_speed_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part)
+EOLIAN Eina_Bool
+_efl_canvas_layout_part_text_marquee_always_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part)
{
Edje_Real_Part *rp;
Edje_Part_Description_Text *desc;
- if (!part) return -1.0;
+ if (!part) return EINA_FALSE;
rp = _edje_real_part_recursive_get(&ed, part);
- if (!rp) return -1.0;
+ if (!rp) return EINA_FALSE;
if ((rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) &&
(rp->part->type != EDJE_PART_TYPE_TEXT))
- return -1.0;
+ return EINA_FALSE;
if (rp->typedata.text)
- {
- if (rp->typedata.text->ellipsize.marquee.speed <= 0.0)
- {
- desc = (Edje_Part_Description_Text *)rp->chosen_description;
- return desc->text.ellipsize.marquee.speed;
- }
- else
- {
- return rp->typedata.text->ellipsize.marquee.speed;
- }
- }
+ return rp->typedata.text->ellipsize.marquee.always;
- return -1.0;
+ return EINA_FALSE;
}
/*******
* END *
{NULL, NULL}
};
-static void *
-_efl_ui_box_list_data_get(const Eina_List *list)
-{
- Evas_Object_Box_Option *opt = eina_list_data_get(list);
-
- return opt->obj;
-}
-
static void
_child_added_cb_proxy(void *data, const Efl_Event *event)
{
efl_event_callback_legacy_call(box, EFL_CONTAINER_EVENT_CONTENT_REMOVED, child);
}
-EOLIAN static Eina_Bool
-_efl_ui_box_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Efl_Ui_Box_Data *_pd EINA_UNUSED)
-{
- return EINA_TRUE;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_box_elm_widget_focus_next(Eo *obj, Efl_Ui_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);
-
- /* Focus chain */
- /* TODO: Change this to use other chain */
- if ((items = elm_obj_widget_focus_custom_chain_get(obj)))
- list_data_get = eina_list_data_get;
- else
- {
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
- Evas_Object_Box_Data *bd =
- evas_object_smart_data_get(wd->resize_obj);
-
- items = bd->children;
- list_data_get = _efl_ui_box_list_data_get;
-
- if (!items) return EINA_FALSE;
- }
-
- return elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next, next_item);
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_box_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Efl_Ui_Box_Data *_pd EINA_UNUSED)
-{
- return EINA_TRUE;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_box_elm_widget_focus_direction(Eo *obj EINA_UNUSED, Efl_Ui_Box_Data *_pd EINA_UNUSED, const Evas_Object *base, double degree, Evas_Object **direction, Elm_Object_Item **direction_item, double *weight)
-{
- const Eina_List *items;
- void *(*list_data_get)(const Eina_List *list);
-
- if ((items = elm_obj_widget_focus_custom_chain_get(obj)))
- list_data_get = eina_list_data_get;
- else
- {
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
- Evas_Object_Box_Data *bd =
- evas_object_smart_data_get(wd->resize_obj);
-
- items = bd->children;
- list_data_get = _efl_ui_box_list_data_get;
-
- if (!items) return EINA_FALSE;
- }
- return elm_widget_focus_list_direction_get
- (obj, base, items, list_data_get, degree, direction, direction_item, weight);
-}
-
static void
_sizing_eval(Evas_Object *obj, Efl_Ui_Box_Data *sd)
{
EOLIAN static Eo *
_efl_ui_box_efl_object_constructor(Eo *obj, Efl_Ui_Box_Data *pd)
{
- efl_access_type_set(obj, EFL_ACCESS_TYPE_SKIPPED);
obj = efl_constructor(efl_super(obj, MY_CLASS));
efl_canvas_object_type_set(obj, MY_CLASS_NAME);
evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
+ efl_access_type_set(obj, EFL_ACCESS_TYPE_SKIPPED);
efl_access_role_set(obj, EFL_ACCESS_ROLE_FILLER);
pd->align.h = 0.5;
if (value) *value = _pd->val;
}
+//TIZEN_ONLY(20160603): added description_get API
+EOLIAN static const char*
+_efl_ui_progressbar_efl_access_description_get(Eo *obj, Efl_Ui_Progressbar_Data *pd EINA_UNUSED)
+{
+ const char *ret = elm_object_part_text_get(obj, "elm.text.status");
+ return ret ? strdup(ret) : NULL;
+}
+//
+
#include "efl_ui_progressbar_part.eo.c"
/* Efl.Part end */
_format_legacy_to_format_eo_free_cb);
}
-//TIZEN_ONLY(20160603): added description_get API
-EOLIAN static const char*
-_efl_ui_progressbar_efl_access_description_get(Eo *obj, Efl_Ui_Progressbar_Data *pd EINA_UNUSED)
-{
- const char *ret = elm_object_part_text_get(obj, "elm.text.status");
- return ret ? strdup(ret) : NULL;
-}
-//
-
EAPI void
elm_progressbar_span_size_set(Evas_Object *obj, Evas_Coord size)
{
}
}
-static Eina_Bool
+static void
_elm_win_state_eval(void *data EINA_UNUSED)
{
Eina_List *l;
}
}
_win_noblank_eval();
- return EINA_FALSE;
}
static Eina_Bool
// TIZEN_ONLY(20150707): elm_conform for wayland, and signal if parts are changed
#ifdef HAVE_ELEMENTARY_WL2
int x = 0, y = 0, w = 0, h = 0;
- if (sd->indmode != (Elm_Win_Indicator_Mode)ecore_wl2_window_indicator_state_get(sd->wl.win))
+ if (sd->legacy.indmode != (Elm_Win_Indicator_Mode)ecore_wl2_window_indicator_state_get(sd->wl.win))
{
- sd->indmode = (Elm_Win_Indicator_Mode)ecore_wl2_window_indicator_state_get(sd->wl.win);
+ sd->legacy.indmode = (Elm_Win_Indicator_Mode)ecore_wl2_window_indicator_state_get(sd->wl.win);
ch_conformant = EINA_TRUE;
}
case ELM_WIN_COMBO:
case ELM_WIN_MENU:
case ELM_WIN_POPUP_MENU:
- wtype = ECORE_WL2_WI// TIZEN_ONLY(20150722):NDOW_TYPE_MENU;
+ wtype = ECORE_WL2_WINDOW_TYPE_MENU;
break;
case ELM_WIN_DND:
wtype = ECORE_WL2_WINDOW_TYPE_DND;
//
} Efl_Ui_Win_Socket_Data;
+//TIZEN_ONLY(20170613) -listen if access mode is enabled
+#define EFL_UI_WIN_SOCKET_DATA_GET(o, sd) \
+ Efl_Ui_Win_Socket_Data * sd = efl_data_scope_get(o, MY_CLASS)
+//
+
EOLIAN static Efl_Object *
_efl_ui_win_socket_efl_object_finalize(Eo *obj, Efl_Ui_Win_Socket_Data *pd EINA_UNUSED)
{
if (!ecore_evas_extn_socket_listen(ee, svcname, svcnum, svcsys))
return EINA_FALSE;
- if (_elm_config->atspi_mode)
+ if (_elm_atspi_enabled())
{
if (pd->socket_proxy)
efl_unref(pd->socket_proxy);
//
}
+//TIZEN_ONLY(20170613) -listen if access mode is enabled
+void
+_access_socket_proxy_listen(Eo * obj)
+{
+ EFL_UI_WIN_SOCKET_DATA_GET(obj, sd);
+ const char *plug_id;
+
+ if ((plug_id = evas_object_data_get(obj, "___PLUGID")) != NULL)
+ {
+ char *svcname, *svcnum;
+ if (!sd->socket_proxy && _elm_atspi_bridge_plug_id_split(plug_id, &svcname, &svcnum))
+ {
+ sd->socket_proxy = _elm_atspi_bridge_utils_proxy_create(obj, svcname, atoi(svcnum), ELM_ATSPI_PROXY_TYPE_SOCKET);
+ elm_atspi_bridge_utils_proxy_listen(sd->socket_proxy);
+ free(svcname);
+ free(svcnum);
+ }
+ }
+}
+
+
+void
+_access_socket_proxy_unref(Eo * obj)
+{
+ EFL_UI_WIN_SOCKET_DATA_GET(obj, sd);
+ if (sd->socket_proxy)
+ {
+ efl_unref(sd->socket_proxy);
+ sd->socket_proxy = NULL;
+ }
+}
+//
+
//TIZEN_ONLY(20171108): make atspi_proxy work
EOLIAN static void
-_efl_ui_win_socket_efl_gfx_visible_set(Eo *obj, Efl_Ui_Win_Socket_Data *sd, Eina_Bool vis)
+_efl_ui_win_socket_efl_gfx_visible_set(Eo *obj, Efl_Ui_Win_Socket_Data *sd EINA_UNUSED, Eina_Bool vis)
{
efl_gfx_visible_set(efl_super(obj, EFL_UI_WIN_SOCKET_CLASS), vis);
- const char *plug_id_2;
+ // TIZEN_ONLY(20160705) - enable atspi_proxy to work
if (vis)
{
- if ((plug_id_2 = evas_object_data_get(obj, "___PLUGID")) != NULL)
+ if (_elm_atspi_enabled())
{
- char *svcname, *svcnum;
- if (!sd->socket_proxy && _elm_atspi_bridge_plug_id_split(plug_id_2, &svcname, &svcnum))
- {
- sd->socket_proxy = _elm_atspi_bridge_utils_proxy_create(obj, svcname, atoi(svcnum), ELM_ATSPI_PROXY_TYPE_SOCKET);
- elm_atspi_bridge_utils_proxy_listen(sd->socket_proxy);
- free(svcname);
- free(svcnum);
- }
+ //TIZEN_ONLY(20170613) -listen if atspi is enabled
+ _access_socket_proxy_listen(obj);
+ //
}
}
+ //
}
EOLIAN static Eo*
evas_object_smart_callback_call(obj, SIG_ATSPI_SCREEN_READER_CHANGED, &is_screen_reader);
//
}
+
+EOLIAN static void
+_elm_popup_elm_widget_atspi(Eo *obj, Elm_Popup_Data *_pd EINA_UNUSED, Eina_Bool is_atspi)
+{
+ Efl_Access_State_Set ss;
+
+ if (!is_atspi) return;
+
+ ss = efl_access_state_set_get(obj);
+ if (STATE_TYPE_GET(ss, EFL_ACCESS_STATE_SHOWING))
+ {
+ efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_SHOWING, EINA_TRUE);
+ }
+}
//
//
EINA_LIST_FOREACH(children, l, child)
{
- if (elm_widget_focus_get(child)) break;
+ if (efl_ui_focus_object_focus_get(child)) break;
}
eina_list_free(children);
};
static void
-_focus_order_flush(Eo *obj, Elm_Box_Data *pd EINA_UNUSED)
+_elm_box_efl_ui_focus_composition_prepare(Eo *obj, Elm_Box_Data *pd EINA_UNUSED)
{
+ Eina_List *n, *nn;
+ Elm_Widget *elem;
+
Elm_Widget_Smart_Data *wpd = efl_data_scope_get(obj, ELM_WIDGET_CLASS);
- if (wpd->focus.manager)
- {
- Eina_List *order = evas_object_box_children_get(wpd->resize_obj);
+ Eina_List *order = evas_object_box_children_get(wpd->resize_obj);
- efl_ui_focus_manager_calc_update_order(wpd->focus.manager, obj, order);
- eina_list_free(order);
+ EINA_LIST_FOREACH_SAFE(order, n, nn, elem)
+ {
+ if (!efl_isa(elem, ELM_WIDGET_CLASS))
+ order = eina_list_remove(order, elem);
}
-}
-static void *
-_elm_box_list_data_get(const Eina_List *list)
-{
- Evas_Object_Box_Option *opt = eina_list_data_get(list);
- return opt->obj;
+ efl_ui_focus_composition_elements_set(obj, order);
}
static void
//TIZEN_ONLY(20160822): When atspi mode is dynamically switched on/off,
//register/unregister access objects accordingly.
void _elm_win_screen_reader(Eina_Bool is_screen_reader);
+void _elm_win_atspi(Eina_Bool is_atspi);
//
void _elm_win_translate(void);
void _elm_win_focus_reconfigure(void);
void elm_atspi_bridge_utils_proxy_connect(Eo *proxy);
void elm_atspi_bridge_utils_proxy_offset_set(Eo *proxy, int x, int y);
Eina_Bool _elm_atspi_bridge_plug_id_split(const char *plug_id, char **bus, char **path);
+//TIZEN_ONLY(20170621) handle atspi proxy connection at runtime
+void _access_socket_proxy_listen(Eo * obj);
+void _access_socket_proxy_unref(Eo * obj);
+//
//
/* end of DEPRECATED */
if (parent == obj)
break;
}
+/*TIZEN_ONLY(20171222): fix build error temporarly
else if (efl_isa(highlighted_obj, EDJE_OBJECT_CLASS))
{
while ((parent = evas_object_smart_parent_get(parent)))
if (parent == obj)
break;
}
+*/
else
{
WRN("Improper highlighted object: %p", highlighted_obj);
if (elm_widget_is(child))
ret &= elm_widget_screen_reader(child, is_screen_reader);
}
- elm_obj_widget_screen_reader(obj, is_screen_reader);
+ efl_ui_widget_screen_reader(obj, is_screen_reader);
return ret;
}
}
//
+//TIZEN_ONLY(20170621) handle atspi proxy connection at runtime
+EAPI Eina_Bool
+elm_widget_atspi(Evas_Object *obj, Eina_Bool is_atspi)
+{
+ Eina_List *l, *children;
+ Evas_Object *child;
+ Eina_Bool ret = EINA_TRUE;
+
+ API_ENTRY return EINA_FALSE;
+ children = efl_access_children_get(obj);
+ EINA_LIST_FOREACH(children, l, child)
+ {
+ ret &= elm_widget_atspi(child, is_atspi);
+ }
+ efl_ui_widget_atspi(obj, is_atspi);
+
+ return ret;
+}
+
+EOLIAN static void
+_elm_widget_atspi(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Eina_Bool is_atspi EINA_UNUSED)
+{
+}
+//
+//
+//
+
EAPI Elm_Theme *
elm_widget_theme_get(const Evas_Object *obj)
{
return _elm_widget_accessible_plain_name_get(obj, ret);
}
-//TIZEN_ONLY(20161111) add widget/widget_item description get/set
-EOLIAN void
-_elm_widget_efl_access_description_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data* _pd, const char *description)
-{
- if (_pd->description)
- eina_stringshare_del(_pd->description);
-
- _pd->description = eina_stringshare_add(description);
-}
-
-EOLIAN static const char*
-_elm_widget_efl_access_description_get(Eo *obj, Elm_Widget_Smart_Data *_pd)
-{
- const char *desc = NULL;
- desc = efl_access_description_get(efl_super(obj, ELM_WIDGET_CLASS));
- if (desc) return desc;
-
-#ifdef HAVE_GETTEXT
- if (_pd->atspi_translation_domain)
- return dgettext(_pd->atspi_translation_domain, _pd->description);
-#endif
- return _pd->description;
-}
-
-EOLIAN void
-_elm_widget_item_efl_access_description_set(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data* _pd, const char *description)
-{
- if (_pd->description)
- eina_stringshare_del(_pd->description);
-
- _pd->description = eina_stringshare_add(description);
-}
-
-EOLIAN const char*
-_elm_widget_item_efl_access_description_get(Eo *obj, Elm_Widget_Item_Data *_pd)
-{
- const char *desc = NULL;
- desc = efl_access_description_get(efl_super(obj, ELM_WIDGET_ITEM_CLASS));
- if (desc) return desc;
-
-#ifdef HAVE_GETTEXT
- if (_pd->atspi_translation_domain)
- return dgettext(_pd->atspi_translation_domain, _pd->description);
-#endif
- return _pd->description;
-}
-//
-
//TIZEN_ONLY(20171108): make atspi_proxy work
static void
_proxy_widget_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
}
//
+//TIZEN_ONLY(20170621) handle atspi proxy connection at runtime
+static Eo *
+_plug_type_proxy_get(Eo *obj, Evas_Object *widget)
+{
+ Eo *proxy = NULL;
+ const char *plug_id;
+ char *svcname, *svcnum;
+
+ if ((plug_id = evas_object_data_get(widget, "___PLUGID")) != NULL)
+ {
+ // TIZEN_ONLY(20160930) : endless recursion fix
+ efl_access_attribute_append(efl_super(obj, MY_CLASS), "___PlugID", plug_id);
+
+ proxy = evas_object_data_get(widget, "__widget_proxy");
+ if (proxy) return proxy;
+
+ if (_elm_atspi_bridge_plug_id_split(plug_id, &svcname, &svcnum))
+ {
+ proxy = _elm_atspi_bridge_utils_proxy_create(obj, svcname, atoi(svcnum), ELM_ATSPI_PROXY_TYPE_PLUG);
+ evas_object_data_set(widget, "__widget_proxy", proxy);
+ efl_event_callback_add(widget, EFL_EVENT_DEL, _on_widget_del, proxy);
+ efl_event_callback_add(proxy, ELM_ATSPI_PROXY_EVENT_CONNECTED, _on_proxy_connected_cb, widget);
+ elm_atspi_bridge_utils_proxy_connect(proxy);
+ free(svcname);
+ free(svcnum);
+ }
+ }
+
+ return proxy;
+}
+
+EAPI Eo *
+elm_widget_atspi_plug_type_proxy_get(Evas_Object *obj)
+{
+ Elm_Widget_Smart_Data *wd;
+ Evas_Object *widget;
+ Eina_List *l;
+
+ wd = efl_data_scope_get(obj, ELM_WIDGET_CLASS);
+ if (!wd) return NULL;
+
+ Eo *proxy = NULL;
+ EINA_LIST_FOREACH(wd->subobjs, l, widget)
+ {
+ if (evas_object_data_get(widget, "___PLUGID"))
+ proxy = _plug_type_proxy_get(obj, widget);
+ if (proxy) break;
+ }
+ return proxy;
+}
+//
+
EOLIAN static Eina_List*
_elm_widget_efl_access_children_get(Eo *obj, Elm_Widget_Smart_Data *pd)
{
elm_atspi_ewk_wrapper_a11y_init(obj, widget);
}
}
+ Eo *proxy = NULL;
EINA_LIST_FOREACH(pd->subobjs, l, widget)
{
// TIZEN_ONLY(20160824): Do not append a child, if its accessible parent is different with widget parent
parent = efl_access_parent_get(widget);
if (parent && (parent != obj)) continue;
}
- //TIZEN_ONLY(20171108): make atspi_proxy work
- const char *plug_id_2;
- if ((plug_id_2 = evas_object_data_get(widget, "___PLUGID")) != NULL)
+ // TIZEN_ONLY(20160705) - enable atspi_proxy to work
+ /* This assumes that only one proxy exists in obj */
+ if (!proxy)
{
- Eo *proxy;
- char *svcname, *svcnum;
-
- proxy = evas_object_data_get(widget, "__widget_proxy");
+ proxy = _plug_type_proxy_get(obj, widget);
if (proxy)
{
accs = eina_list_append(accs, proxy);
continue;
}
-
- if (_elm_atspi_bridge_plug_id_split(plug_id_2, &svcname, &svcnum))
- {
- proxy = _elm_atspi_bridge_utils_proxy_create(obj, svcname, atoi(svcnum), ELM_ATSPI_PROXY_TYPE_PLUG);
- evas_object_data_set(widget, "__widget_proxy", proxy);
- efl_event_callback_add(widget, EFL_EVENT_DEL, _on_widget_del, proxy);
- efl_event_callback_add(proxy, ELM_ATSPI_PROXY_EVENT_CONNECTED, _on_proxy_connected_cb, widget);
- elm_atspi_bridge_utils_proxy_connect(proxy);
- accs = eina_list_append(accs, proxy);
- free(svcname);
- free(svcnum);
- }
- continue;
}
//
+ // TIZEN ONLY - END
if (!elm_object_widget_check(widget)) continue;
if (!efl_isa(widget, EFL_ACCESS_MIXIN)) continue;
type = efl_access_type_get(widget);
return EINA_TRUE;
}
+static int _sort_by_size(const void *data1, const void *data2)
+{
+ Evas_Coord w, h;
+ Evas_Coord w2, h2;
+
+ evas_object_geometry_get(data1, NULL, NULL, &w, &h);
+ evas_object_geometry_get(data2, NULL, NULL, &w2, &h2);
+
+ if ((w * h) > (w2 * h2)) return 1;
+ return -1;
+}
+
+Eina_Bool
+_elm_widget_atspi_role_acceptable_check(Eo *obj)
+{
+ Efl_Access_Role role;
+ role = efl_access_role_get(obj);
+
+ switch (role)
+ {
+ case EFL_ACCESS_ROLE_APPLICATION:
+ case EFL_ACCESS_ROLE_FILLER:
+ case EFL_ACCESS_ROLE_SCROLL_PANE:
+ case EFL_ACCESS_ROLE_SPLIT_PANE:
+ case EFL_ACCESS_ROLE_WINDOW:
+ case EFL_ACCESS_ROLE_IMAGE:
+ case EFL_ACCESS_ROLE_LIST:
+ case EFL_ACCESS_ROLE_ICON:
+ case EFL_ACCESS_ROLE_TOOL_BAR:
+ case EFL_ACCESS_ROLE_REDUNDANT_OBJECT:
+ case EFL_ACCESS_ROLE_COLOR_CHOOSER:
+ case EFL_ACCESS_ROLE_TREE_TABLE:
+ case EFL_ACCESS_ROLE_PAGE_TAB_LIST:
+ case EFL_ACCESS_ROLE_PAGE_TAB:
+ case EFL_ACCESS_ROLE_SPIN_BUTTON:
+ case EFL_ACCESS_ROLE_INPUT_METHOD_WINDOW:
+ case EFL_ACCESS_ROLE_EMBEDDED:
+ case EFL_ACCESS_ROLE_INVALID:
+ case EFL_ACCESS_ROLE_NOTIFICATION:
+ return EINA_FALSE;
+ default:
+ break;
+ }
+
+ return EINA_TRUE;
+}
+
+static Eo *
+_child_object_at_point_get(Eo *obj, int x, int y)
+{
+ Eina_List *l, *l_next, *children, *valid_children = NULL;
+ Eo *child;
+ Eo *target;
+ int count;
+
+ children = efl_access_children_get(obj);
+
+ EINA_LIST_FOREACH(children, l, child)
+ {
+ if (_is_inside(child, x, y))
+ valid_children = eina_list_append(valid_children, child);
+ }
+
+ EINA_LIST_FOREACH_SAFE(valid_children, l, l_next, child)
+ {
+ children = efl_access_children_get(child);
+
+ /* do not use unacceptable leaf node */
+ if (!_elm_widget_atspi_role_acceptable_check(child) &&
+ eina_list_count(children) == 0)
+ valid_children = eina_list_remove_list(valid_children, l);
+ }
+
+ count = eina_list_count(valid_children);
+ if (count > 0)
+ {
+ valid_children = eina_list_sort(valid_children, -1, _sort_by_size);
+ target = eina_list_nth(valid_children, 0);
+
+ return _child_object_at_point_get(target, x, y);
+ }
+
+ return obj;
+}
+
+
static Eo *
_accessible_at_point_top_down_get(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Eina_Bool screen_coords, int x, int y)
{
return -1;
}
+static Eo *_item_at_point_get(Evas_Object *obj, int x, int y)
+{
+ Eo *child;
+ Eina_List *l, *children;
+
+ children = efl_access_children_get(obj);
+
+ EINA_LIST_FOREACH(children, l, child)
+ {
+ if (_is_inside(child, x, y)) return child;
+ }
+
+ ERR("No child at point (%d, %d) on object %p", x, y, obj);
+ return NULL;
+}
+
//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)
if (efl_isa(smart_parent, EFL_ACCESS_MIXIN))
{
Eina_Bool acceptable = EINA_FALSE;
+ Eo *item_child;
Efl_Access_Role role;
role = efl_access_role_get(smart_parent);
case EFL_ACCESS_ROLE_WINDOW:
DBG("Go for parent: %s (%p)\n", evas_object_type_get(smart_parent), smart_parent);
break;
-
+ case EFL_ACCESS_ROLE_LIST:
+ item_child = _item_at_point_get(smart_parent, x, y);
+ #ifdef TIZEN_PROFILE_WEARABLE
+ {
+ item_child = _child_object_at_point_get(item_child, x, y);
+ return item_child;
+ }
+ #endif
+ return item_child;
+ break;
default:
acceptable = EINA_TRUE;
break;
}
eina_list_free(stack);
- return NULL;
+ return _accessible_at_point_top_down_get(obj, _pd, screen_coords, x, y);
}
// TIZEN_ONLY(20171114) Accessibility Highlight Frame added
// EOLIAN static Eina_Bool
legacy: null;
}
//
-
+ //TIZEN_ONLY(20170621) handle atspi proxy connection at runtime
+ atspi {
+ [['Virtual' function on the widget being set atspi.]]
+ params {
+ @in is_atspi: bool;
+ }
+ legacy: null;
+ }
+ //
/* Internal hooks. */
widget_sub_object_add @protected {
[[Virtual function handling sub objects being added.
Efl.Canvas.Group.group_member_del;
Efl.Canvas.Group.group_member_add;
Efl.Access.name { get; }
- //TIZEN_ONLY(20161111) add widget/widget_item description get/set
- Efl.Access.description { get; set; }
- //
Efl.Access.state_set { get; }
Efl.Access.children { get; }
Efl.Access.parent { get; }
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Access.state_set { get; }
- //TIZEN_ONLY(20161111) add widget/widget_item description get/set
- Efl.Access.description { get; set; }
- //
Efl.Access.attributes { get; }
//TIZEN_ONLY(20160726): add API elm_atspi_accessible_can_highlight_set/get
Efl.Access.can_highlight { get; set; }