return obj;
}
+//TIZEN_ONLY(20170621) handle atspi proxy connection at runtime
+static void
+_widget_created_cb(void *data EINA_UNUSED, Evas_Object *obj, void *ev EINA_UNUSED)
+{
+ elm_widget_atspi_plug_type_proxy_get(obj);
+}
+//
+
EOLIAN static Eo *
_elm_layout_eo_base_constructor(Eo *obj, Elm_Layout_Smart_Data *sd)
{
evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_FILLER));
+ //TIZEN_ONLY(20170621) handle atspi proxy connection at runtime
+ /* FIXME: This makes dependency on screen-connector. The screen-connector
+ should use new API to handle atspi proxy connection at runtime. */
+ evas_object_smart_callback_add(obj, "widget,created", _widget_created_cb, NULL);
+ //
+
return obj;
}
_elm_widget_screen_reader(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Eina_Bool is_screen_reader EINA_UNUSED)
{
}
+
+//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;
+ eo_do(obj, children = elm_interface_atspi_accessible_children_get());
+ EINA_LIST_FOREACH(children, l, child)
+ {
+ ret &= elm_widget_atspi(child, is_atspi);
+ }
+ eo_do(obj, elm_obj_widget_atspi(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)
+{
+}
+//
//
//
//
// TIZEN ONLY - END
+//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
+ eo_do_super(obj, MY_CLASS, elm_interface_atspi_accessible_attribute_append("___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);
+ eo_do(widget, eo_event_callback_add(EO_EV_DEL, _on_widget_del, proxy));
+ eo_do(proxy, eo_event_callback_add(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 = eo_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_elm_interface_atspi_accessible_children_get(Eo *obj, Elm_Widget_Smart_Data *pd EINA_UNUSED)
{
}
// TIZEN_ONLY(20160705) - enable atspi_proxy to work
- const char *plug_id_2;
- if ((plug_id_2 = evas_object_data_get(widget, "___PLUGID")) != NULL)
+ /* This assumes that only one proxy exists in obj */
+ if (!proxy)
{
- // TIZEN_ONLY(20160930) : endless recursion fix
- eo_do_super(obj, MY_CLASS, elm_interface_atspi_accessible_attribute_append("___PlugID", plug_id_2));
-
- 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);
- eo_do(widget, eo_event_callback_add(EO_EV_DEL, _on_widget_del, proxy));
- eo_do(proxy, eo_event_callback_add(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