From: Radoslaw Cybulski Date: Fri, 16 Aug 2019 10:34:33 +0000 (+0200) Subject: atspi: fix for not working proxy objects in atspi mode X-Git-Tag: submit/tizen/20190830.034707~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a8a3f890f0e4dfcc7691808e3a8c85b7e6aa706c;p=platform%2Fupstream%2Fefl.git atspi: fix for not working proxy objects in atspi mode Atspi embedding doesn't seem to be working due to _socket_embedded method failing to detect proxy object. As a result it returns fail code, which prevents setting screen offset for embedded object. This patch adds ___atspi_socket_proxy property, which contains address of the proxy object. Change-Id: I9ce291bdbe5a06b4079cf3feacdf89c9298acaba --- diff --git a/src/lib/elementary/efl_ui_win_socket.c b/src/lib/elementary/efl_ui_win_socket.c index 1474e60..795e613 100644 --- a/src/lib/elementary/efl_ui_win_socket.c +++ b/src/lib/elementary/efl_ui_win_socket.c @@ -84,6 +84,7 @@ _access_socket_proxy_listen(Eo * obj) efl_unref(sd->socket_proxy); } sd->socket_proxy = _elm_atspi_bridge_utils_proxy_create(obj, svcname, atoi(svcnum), ELM_ATSPI_PROXY_TYPE_SOCKET); + evas_object_data_set(obj, "___atspi_socket_proxy", sd->socket_proxy); elm_atspi_bridge_utils_proxy_listen(sd->socket_proxy); free(svcname); free(svcnum); @@ -101,6 +102,7 @@ _access_socket_proxy_unref(Eo * obj) { efl_unref(sd->socket_proxy); sd->socket_proxy = NULL; + evas_object_data_set(obj, "___atspi_socket_proxy", NULL); } } // diff --git a/src/lib/elementary/elm_atspi_bridge.c b/src/lib/elementary/elm_atspi_bridge.c index 4e531de..fa950f6 100644 --- a/src/lib/elementary/elm_atspi_bridge.c +++ b/src/lib/elementary/elm_atspi_bridge.c @@ -2830,23 +2830,22 @@ _elm_atspi_bridge_plug_id_split(const char *plug_id, char **bus, char **path) static Eldbus_Message * _socket_embedded(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) { - Eo *proxy; // TIZEN_ONLY(20160705) - enable atspi_proxy to work const char *obj_path = eldbus_message_path_get(msg); // - const char *bus, *path; + const char *path; + + if (!eldbus_message_arguments_get(msg, "s", &path)) + return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Plug id expected."); + Eo *bridge = _elm_atspi_bridge_get(); Eo *obj = _bridge_object_from_path(bridge, obj_path); - proxy = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_OBJECT_MIXIN); + Eo *proxy = evas_object_data_get(obj, "___atspi_socket_proxy"); if (!efl_isa(proxy, ELM_ATSPI_PROXY_CLASS)) return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.Failed", "Unable to embed object."); - if (!eldbus_message_arguments_get(msg, "s", &path)) - return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Plug id expected."); - - bus = eldbus_message_sender_get(msg); - + const char *bus = eldbus_message_sender_get(msg); elm_obj_atspi_proxy_address_set(proxy, bus, path); _bridge_cache_build(bridge, proxy); @@ -7330,10 +7329,18 @@ Eo* _elm_atspi_bridge_utils_proxy_create(Eo *parent, const char *svcname, int sv } ret = efl_add(ELM_ATSPI_PROXY_CLASS, parent, elm_obj_atspi_proxy_ctor(efl_added, type)); + if (!ret) return NULL; char *bus_sanitized = _sanitize_bus_name(bus); char *path_sanitized = _sanitize_path_name(path); + + efl_access_object_access_parent_set(ret, parent); + + if (_instance) { + _bridge_object_register(_instance, ret); + _bridge_object_register(_instance, parent); + } // efl_key_data_set(ret, "__svc_bus", eina_stringshare_add(bus_sanitized)); @@ -7397,6 +7404,8 @@ _socket_ifc_create(Eldbus_Connection *conn, Eo *proxy) pd->interfaces.socket = eldbus_service_interface_fallback_register(pd->a11y_bus, ELM_ACCESS_OBJECT_PATH_PREFIX2, &socket_iface_desc); // + Eo *parent = efl_parent_get(proxy); + _bridge_object_register(bridge, parent); _add_plug_or_socket_to_connected_list_in_bridge(proxy); }