diff options
author | Lukasz Stanislawski <l.stanislaws@samsung.com> | 2017-05-31 17:15:56 +0200 |
---|---|---|
committer | Lukasz Stanislawski <l.stanislaws@samsung.com> | 2017-06-02 15:24:28 +0200 |
commit | 36e883e89461480f765fdd2f94e250d3ba94205e (patch) | |
tree | 08665bcbfaaec015dd5b930c5d24d06122d0b63c | |
parent | 6c22f0ea1fcccc5f1a428061f9b34e7075481178 (diff) | |
download | efl-devs/stanluk/refactor.tar.gz |
elementary: add accessibility observer abstractiondevs/stanluk/refactor
Change-Id: Ie3307522b49e3c73e76644e21ae12850524bc1e8
20 files changed, 257 insertions, 244 deletions
diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am index 4a28d376db..3f57be8b8e 100644 --- a/src/Makefile_Elementary.am +++ b/src/Makefile_Elementary.am @@ -2,9 +2,8 @@ ### Library elm_public_eolian_files = \ - lib/elementary/elm_atspi_bridge.eo \ - lib/elementary/elm_atspi_app_object.eo \ lib/elementary/elm_atspi_plug.eo \ + lib/elementary/elm_atspi_app_object.eo \ lib/elementary/elm_atspi_proxy.eo \ lib/elementary/elm_atspi_socket.eo \ lib/elementary/elm_bg.eo \ @@ -37,7 +36,6 @@ elm_public_eolian_files = \ lib/elementary/elm_interface_atspi_text_editable.eo \ lib/elementary/elm_interface_atspi_image.eo \ lib/elementary/elm_interface_atspi_selection.eo \ - lib/elementary/elm_interface_atspi_socket.eo \ lib/elementary/elm_interface_atspi_text.eo \ lib/elementary/elm_interface_atspi_value.eo \ lib/elementary/elm_interface_atspi_widget_action.eo \ @@ -130,6 +128,8 @@ elm_public_eolian_files = \ # Private classes (not exposed or shipped) elm_private_eolian_files = \ + lib/elementary/elm_atspi_bridge.eo \ + lib/elementary/elm_interface_accessible_observer.eo \ lib/elementary/efl_ui_internal_text_interactive.eo \ lib/elementary/efl_ui_win_internal_part.eo \ tests/elementary/focus_test.eo \ @@ -211,6 +211,7 @@ includesunstable_HEADERS = \ lib/elementary/elm_atspi_plug.h \ lib/elementary/elm_atspi_proxy.h \ lib/elementary/elm_atspi_socket.h \ + lib/elementary/elm_interface_accessible_observer.h \ lib/elementary/elm_interface_atspi_accessible.h \ lib/elementary/elm_interface_atspi_text.h \ lib/elementary/elm_interface_atspi_widget_action.h \ @@ -607,13 +608,13 @@ lib_elementary_libelementary_la_SOURCES = \ lib/elementary/elm_icon.c \ lib/elementary/efl_ui_image.c \ lib/elementary/elm_index.c \ + lib/elementary/elm_interface_accessible_observer.c \ lib/elementary/elm_interface_atspi_accessible.c \ lib/elementary/elm_interface_atspi_action.c \ lib/elementary/elm_interface_atspi_component.c \ lib/elementary/elm_interface_atspi_text_editable.c \ lib/elementary/elm_interface_atspi_image.c \ lib/elementary/elm_interface_atspi_selection.c \ - lib/elementary/elm_interface_atspi_socket.c \ lib/elementary/elm_interface_atspi_text.c \ lib/elementary/elm_interface_atspi_value.c \ lib/elementary/elm_interface_atspi_widget_action.c \ diff --git a/src/bin/elementary/test_win_plug.c b/src/bin/elementary/test_win_plug.c index 8c53f9bbdb..ee6c6cf406 100644 --- a/src/bin/elementary/test_win_plug.c +++ b/src/bin/elementary/test_win_plug.c @@ -186,7 +186,7 @@ a11y_init(Evas_Object *plug) elm_interface_atspi_accessible_parent_set(proxy, socket); // FIXME asume bridge is connected - elm_interface_atspi_socket_embed(socket, proxy); + elm_atspi_socket_embed(socket, proxy); } void diff --git a/src/bin/elementary/test_win_socket.c b/src/bin/elementary/test_win_socket.c index ef488b46a2..0879870695 100644 --- a/src/bin/elementary/test_win_socket.c +++ b/src/bin/elementary/test_win_socket.c @@ -146,7 +146,7 @@ static void _on_plug_id_changed(void *data, const Efl_Event *event) { Elm_Atspi_Plug *plug = event->object; - plugid = elm_interface_atspi_socket_id_get(plug); + plugid = elm_atspi_plug_id_get(plug); // send id using elementary IPC mechanism } @@ -160,9 +160,9 @@ a11y_init(Evas_Object *socket_window) elm_interface_atspi_accessible_parent_set(socket_window, plug); // get address when bridge gets connected - efl_event_callback_add(plug, ELM_INTERFACE_ATSPI_SOCKET_EVENT_ID_CHANGED, _on_plug_id_changed, NULL); + efl_event_callback_add(plug, ELM_OBJ_ATSPI_PLUG_EVENT_ID_CHANGED, _on_plug_id_changed, NULL); - plugid = elm_interface_atspi_socket_id_get(plug); + plugid = elm_atspi_plug_id_get(plug); } void diff --git a/src/examples/elementary/a11y/efl-gtk-integration/plug/efl-socket.c b/src/examples/elementary/a11y/efl-gtk-integration/plug/efl-socket.c index 5cb521ec39..082faada6f 100644 --- a/src/examples/elementary/a11y/efl-gtk-integration/plug/efl-socket.c +++ b/src/examples/elementary/a11y/efl-gtk-integration/plug/efl-socket.c @@ -24,6 +24,7 @@ static void a11y_init(void) // fires accessible parent should be set to eo_parent (???) elm_interface_atspi_accessible_parent_set(state.socket, state.container); // following line shuold be not necessary: + elm_interface_atspi_accessible_parent_set(state.proxy, state.socket); // FIXME order matters = should be fixed!!! diff --git a/src/lib/elementary/elm_atspi_app_object.c b/src/lib/elementary/elm_atspi_app_object.c index a64ac43d81..f957e629a1 100644 --- a/src/lib/elementary/elm_atspi_app_object.c +++ b/src/lib/elementary/elm_atspi_app_object.c @@ -65,21 +65,21 @@ _elm_atspi_app_object_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSE } EOLIAN static void -_elm_atspi_app_object_elm_interface_atspi_socket_on_connected(Eo *obj, Elm_Atspi_App_Object_Data *_pd) +_elm_atspi_app_object_elm_atspi_plug_on_connected(Eo *obj, Elm_Atspi_App_Object_Data *_pd) { - ERR("On Connected: %s", elm_interface_atspi_socket_id_get(obj)); - elm_interface_atspi_socket_embed_by(obj, _pd->desktop_proxy); + ERR("On Connected: %s", elm_atspi_plug_id_get(obj)); + elm_atspi_plug_embed_by(obj, _pd->desktop_proxy); } EOLIAN static void -_elm_atspi_app_object_elm_interface_atspi_socket_on_disconnected(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd EINA_UNUSED) +_elm_atspi_app_object_elm_atspi_plug_on_disconnected(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd EINA_UNUSED) { - ERR("On Disconnected: %s", elm_interface_atspi_socket_id_get(obj)); - elm_interface_atspi_socket_unembed_by(obj, _pd->desktop_proxy); + ERR("On Disconnected: %s", elm_atspi_plug_id_get(obj)); + elm_atspi_plug_unembed_by(obj, _pd->desktop_proxy); } EOLIAN static void -_elm_atspi_app_object_elm_interface_atspi_socket_on_embedded(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd EINA_UNUSED, Elm_Atspi_Proxy *proxy EINA_UNUSED) +_elm_atspi_app_object_elm_atspi_plug_on_embedded(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd EINA_UNUSED, Elm_Atspi_Proxy *proxy EINA_UNUSED) { ERR("Application successfully registered as desktop child"); } diff --git a/src/lib/elementary/elm_atspi_app_object.eo b/src/lib/elementary/elm_atspi_app_object.eo index a48697dae3..08f6c3a953 100644 --- a/src/lib/elementary/elm_atspi_app_object.eo +++ b/src/lib/elementary/elm_atspi_app_object.eo @@ -1,3 +1,5 @@ +import elm_general; + class Elm.Atspi.App.Object (Elm.Atspi.Plug, Elm.Interface.Atspi_Accessible) { [[AT-SPI application object class]] @@ -10,8 +12,8 @@ class Elm.Atspi.App.Object (Elm.Atspi.Plug, Elm.Interface.Atspi_Accessible) Elm.Interface.Atspi_Accessible.description { get; set; } Elm.Interface.Atspi_Accessible.role { get; } Elm.Interface.Atspi_Accessible.index_in_parent { get; } - Elm.Interface.Atspi.Socket.on_embedded; - Elm.Interface.Atspi.Socket.on_connected; - Elm.Interface.Atspi.Socket.on_disconnected; + Elm.Atspi.Plug.on_embedded; + Elm.Atspi.Plug.on_connected; + Elm.Atspi.Plug.on_disconnected; } } diff --git a/src/lib/elementary/elm_atspi_bridge.c b/src/lib/elementary/elm_atspi_bridge.c index ff89370761..afddd74f0e 100644 --- a/src/lib/elementary/elm_atspi_bridge.c +++ b/src/lib/elementary/elm_atspi_bridge.c @@ -155,8 +155,8 @@ static void _elm_atspi_bridge_pending_add(Elm_Atspi_Bridge *obj, Eldbus_Pending static void _elm_atspi_bridge_pending_del(Elm_Atspi_Bridge *obj, Eldbus_Pending *pending); static void _elm_atspi_bridge_pending_cancel_all(Elm_Atspi_Bridge *obj); -static void _elm_atspi_bridge_socket_hooks_uninstall(Elm_Interface_Atspi_Socket *socket); -static void _elm_atspi_bridge_socket_hooks_install(Elm_Interface_Atspi_Socket *socket); +static void _elm_atspi_bridge_plug_hooks_uninstall(Eo *socket); +static void _elm_atspi_bridge_plug_hooks_install(Eo *socket); // utility functions static void _iter_interfaces_append(Eldbus_Message_Iter *iter, const Eo *obj); @@ -1041,9 +1041,9 @@ _socket_embedded(const Eldbus_Service_Interface *iface, const Eldbus_Message *ms Eo *obj = _bridge_object_from_path(bridge, obj_path); ERR("Recieved embedded request"); - ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, ELM_INTERFACE_ATSPI_SOCKET_MIXIN, msg); + ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, ELM_ATSPI_PLUG_CLASS, msg); - elm_interface_atspi_socket_on_embedded(obj, NULL); + elm_atspi_plug_on_embedded(obj, NULL); return eldbus_message_method_return_new(msg); } @@ -3648,9 +3648,9 @@ _on_elm_atspi_bridge_plug_register(void *data, const Eldbus_Message *msg, Eldbus Eo *proxy = eldbus_pending_data_get(pending, "__proxy"); // check if object is still in cache, since it may be unregistered - // before dbus request complete + // before dbus request completes if (eina_hash_find(pd->cache, &obj)) - elm_interface_atspi_socket_on_embedded(obj, proxy); + elm_atspi_plug_on_embedded(obj, proxy); } EAPI void @@ -3661,8 +3661,10 @@ _elm_atspi_bridge_plugs_register(Eo *bridge) Eina_List *l; Elm_Atspi_Plug *plug; + EINA_LIST_FOREACH(pd->plugs, l, plug) { + ERR("Plug register %d", plug); _bridge_object_register(bridge, plug); } } @@ -4212,11 +4214,11 @@ _elm_atspi_bridge_on_object_unregistered(Elm_Atspi_Bridge *bridge, Eo *obj) efl_event_callback_array_del(obj, event_handlers(), bridge); _bridge_object_removed_signal_send(bridge, obj); - if (efl_isa(obj, ELM_INTERFACE_ATSPI_SOCKET_MIXIN)) + if (efl_isa(obj, ELM_ATSPI_PLUG_CLASS)) { - elm_interface_atspi_socket_on_disconnected(obj); - elm_interface_atspi_socket_id_set(obj, NULL); - _elm_atspi_bridge_socket_hooks_uninstall(obj); + elm_atspi_plug_on_disconnected(obj); + elm_atspi_plug_id_set(obj, NULL); + _elm_atspi_bridge_plug_hooks_uninstall(obj); } } @@ -4224,21 +4226,26 @@ static void _elm_atspi_bridge_on_object_registered(Elm_Atspi_Bridge *bridge, Eo *obj) { struct dbus_address addr; + + ERR("On object_registererd: %s", efl_class_name_get(obj)); if (!efl_isa(obj, ELM_ATSPI_PROXY_CLASS)) { _bridge_object_added_signal_send(bridge, obj); efl_event_callback_array_add(obj, event_handlers(), bridge); } - - if (efl_isa(obj, ELM_INTERFACE_ATSPI_SOCKET_MIXIN)) + if (efl_isa(obj, ELM_ATSPI_PLUG_CLASS)) { - _elm_atspi_bridge_socket_hooks_install(obj); + ERR("pre hook install: %d", obj); + _elm_atspi_bridge_plug_hooks_install(obj); addr = _elm_atspi_bridge_address_from_object(bridge, obj); char *id = _elm_atspi_bridge_id_make(&addr); - elm_interface_atspi_socket_id_set(obj, id); - elm_interface_atspi_socket_on_connected(obj); + elm_atspi_plug_id_set(obj, id); + elm_atspi_plug_on_connected(obj); free(id); } + if (efl_isa(obj, ELM_ATSPI_SOCKET_CLASS)) + { + } } static void @@ -4485,10 +4492,9 @@ _elm_atspi_bridge_init(void) if (!_instance) { _instance = efl_add(ELM_ATSPI_BRIDGE_CLASS, NULL); + elm_interface_atspi_accessible_observer_install(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, _instance); Efl_Object *root = elm_interface_atspi_accessible_root_get(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN); - elm_atspi_bridge_plug_register(_instance, root); elm_atspi_bridge_root_set(_instance, root); - elm_interface_atspi_accessible_observer_install(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN); } } @@ -4503,7 +4509,7 @@ _elm_atspi_bridge_shutdown(void) { if (_instance) { - elm_interface_atspi_accessible_observer_uninstall(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN); + elm_interface_atspi_accessible_observer_uninstall(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, _instance); efl_del(_instance); _instance = NULL; } @@ -4847,22 +4853,23 @@ _elm_atspi_bridge_elm_interface_atspi_socket_unembed_by(Eo *obj, void *data, Elm } static void -_elm_atspi_bridge_socket_hooks_uninstall(Elm_Interface_Atspi_Socket *socket) +_elm_atspi_bridge_plug_hooks_uninstall(Eo *socket) { efl_object_override(socket, NULL); } static void -_elm_atspi_bridge_socket_hooks_install(Elm_Interface_Atspi_Socket *socket) +_elm_atspi_bridge_plug_hooks_install(Eo *plug) { - ERR("Install hooks for %s", efl_class_name_get(socket)); + ERR("Install hooks for (%d), %s", plug, efl_class_name_get(plug)); EFL_OPS_DEFINE(_elm_atspi_bridge_hooks, - EFL_OBJECT_OP_FUNC(elm_interface_atspi_socket_embed, _elm_atspi_bridge_elm_interface_atspi_socket_embed), - EFL_OBJECT_OP_FUNC(elm_interface_atspi_socket_unembed, _elm_atspi_bridge_elm_interface_atspi_socket_unembed), - EFL_OBJECT_OP_FUNC(elm_interface_atspi_socket_embed_by, _elm_atspi_bridge_elm_interface_atspi_socket_embed_by), - EFL_OBJECT_OP_FUNC(elm_interface_atspi_socket_unembed_by, _elm_atspi_bridge_elm_interface_atspi_socket_unembed_by)); + //EFL_OBJECT_OP_FUNC(elm_atspi_socket_embed, _elm_atspi_bridge_elm_interface_atspi_socket_embed), + //EFL_OBJECT_OP_FUNC(elm_atspi_socket_unembed, _elm_atspi_bridge_elm_interface_atspi_socket_unembed), + EFL_OBJECT_OP_FUNC(elm_atspi_plug_embed_by, _elm_atspi_bridge_elm_interface_atspi_socket_embed_by), + EFL_OBJECT_OP_FUNC(elm_atspi_plug_unembed_by, _elm_atspi_bridge_elm_interface_atspi_socket_unembed_by)); - efl_object_override(socket, &_elm_atspi_bridge_hooks); + efl_object_override(plug, &_elm_atspi_bridge_hooks); + ERR("Install hooks end"); } EOLIAN Efl_Object* @@ -5065,6 +5072,7 @@ _elm_atspi_bridge_plug_register(Eo *obj, Elm_Atspi_Bridge_Data *pd, Elm_Atspi_Pl if (!eina_list_data_find(pd->plugs, plug)) { + ERR("Is connected: %d", pd->connected); if (pd->connected) _bridge_object_register(obj, plug); efl_event_callback_add(plug, EFL_EVENT_DEL, _elm_atspi_bridge_plug_del, obj); @@ -5087,44 +5095,46 @@ _elm_atspi_bridge_plug_unregister(Eo *obj, Elm_Atspi_Bridge_Data *pd, Elm_Atspi_ } } +EOLIAN void +_elm_atspi_bridge_elm_interface_accessible_observer_on_created(Eo *obj, Elm_Atspi_Bridge_Data *pd, Elm_Interface_Atspi_Accessible *accessible) +{ + if (efl_isa(accessible, ELM_ATSPI_PLUG_CLASS)) { + ERR("added plug %d", accessible); + elm_atspi_bridge_plug_register(obj, accessible); + } +} + static Eina_Bool _elm_atspi_bridge_id_parse(const char *id, struct dbus_address *addr) { - int written; - Eina_Bool ret = EINA_FALSE; + size_t source_len; + char *split; + int to_write; if (!addr || !id) return EINA_FALSE; - char *copy = strdup(id); - if (!copy) - return EINA_FALSE; - - char *split = strrchr(copy, ':'); + split = strrchr(id, ':'); if (!split) - goto exit; - - *split = '\0'; + return EINA_FALSE; - written = snprintf(addr->bus, sizeof(addr->bus), "%s", copy); - if ((written < 0) || (written >= (int)sizeof(addr->bus))) - goto exit; + to_write = split - id + 1; + if (to_write > (int)sizeof(addr->bus)) + return EINA_FALSE; - written = snprintf(addr->path, sizeof(addr->path), "%s", split + 1); - if ((written < 0) || (written >= (int)sizeof(addr->path))) - goto exit; + eina_strlcpy(addr->bus, id, to_write); - ret = EINA_TRUE; + source_len = eina_strlcpy(addr->path, split + 1, sizeof(addr->path)); + if (source_len >= (int)sizeof(addr->path)) + return EINA_FALSE; -exit: - free(copy); - return ret; + return EINA_TRUE; } static char* _elm_atspi_bridge_id_make(const struct dbus_address *address) { - char buf[256]; + char buf[512]; int written = snprintf(buf, sizeof(buf), "%s:%s", address->bus, address->path); if ((written < 0) || (written >= (int)sizeof(buf))) diff --git a/src/lib/elementary/elm_atspi_bridge.eo b/src/lib/elementary/elm_atspi_bridge.eo index a1fb6a1bfa..6256b3b44e 100644 --- a/src/lib/elementary/elm_atspi_bridge.eo +++ b/src/lib/elementary/elm_atspi_bridge.eo @@ -1,4 +1,4 @@ -class Elm.Atspi.Bridge (Efl.Object) +class Elm.Atspi.Bridge (Efl.Object, Elm.Interface.Accessible_Observer) { [[AT-SPI bridge class]] legacy_prefix: elm_atspi_bridge; @@ -37,6 +37,7 @@ class Elm.Atspi.Bridge (Efl.Object) implements { Efl.Object.constructor; Efl.Object.destructor; + Elm.Interface.Accessible_Observer.on_created; } events { connected; [[Connected with AT-SPI2 bus]] diff --git a/src/lib/elementary/elm_atspi_plug.c b/src/lib/elementary/elm_atspi_plug.c index dbcd83339f..5cf2e3a23e 100644 --- a/src/lib/elementary/elm_atspi_plug.c +++ b/src/lib/elementary/elm_atspi_plug.c @@ -8,18 +8,13 @@ typedef struct _Elm_Atspi_Plug_Data { - Elm_Atspi_Proxy *proxy_parent; // technical object for keep bridge coherent + const char *id; } Elm_Atspi_Plug_Data; EOLIAN Eo* _elm_atspi_plug_efl_object_constructor(Eo *obj, Elm_Atspi_Plug_Data *pd) { efl_constructor(efl_super(obj, ELM_ATSPI_PLUG_CLASS)); - - Elm_Atspi_Bridge *bridge = _elm_atspi_bridge_get(); - if (bridge) - elm_atspi_bridge_plug_register(bridge, obj); - elm_interface_atspi_accessible_role_set(obj, ELM_ATSPI_ROLE_FRAME); return obj; } @@ -30,16 +25,34 @@ _elm_atspi_plug_efl_object_destructor(Eo *obj EINA_UNUSED, Elm_Atspi_Plug_Data * efl_destructor(efl_super(obj, ELM_ATSPI_PLUG_CLASS)); } +EOLIAN const char* +_elm_atspi_plug_id_get(Eo *plug EINA_UNUSED, Elm_Atspi_Plug_Data *pd) +{ + return pd->id; +} + +EOLIAN void +_elm_atspi_plug_id_set(Eo *plug, Elm_Atspi_Plug_Data *pd, const char *new_id) +{ + const char *id = eina_stringshare_add(new_id); + if (pd->id != id) + { + eina_stringshare_del(pd->id); + pd->id = id; + efl_event_callback_call(socket, ELM_OBJ_ATSPI_PLUG_EVENT_ID_CHANGED, NULL); + } + else + eina_stringshare_del(id); +} + EOLIAN void -_elm_atspi_plug_elm_interface_atspi_socket_on_embedded(Eo *obj EINA_UNUSED, Elm_Atspi_Plug_Data *pd, Elm_Atspi_Proxy *proxy) +_elm_atspi_plug_on_connected(Eo *socket, Elm_Atspi_Plug_Data *pd EINA_UNUSED) { - ERR("On embedded"); } EOLIAN void -_elm_atspi_plug_elm_interface_atspi_socket_on_unembedded(Eo *obj EINA_UNUSED, Elm_Atspi_Plug_Data *pd, Elm_Atspi_Proxy *proxy) +_elm_atspi_plug_on_disconnected(Eo *socket, Elm_Atspi_Plug_Data *pd EINA_UNUSED) { - ERR("On unembedded"); } #include "elm_atspi_plug.eo.c" diff --git a/src/lib/elementary/elm_atspi_plug.eo b/src/lib/elementary/elm_atspi_plug.eo index e7c133f847..2f8d328ad7 100644 --- a/src/lib/elementary/elm_atspi_plug.eo +++ b/src/lib/elementary/elm_atspi_plug.eo @@ -1,13 +1,51 @@ -class Elm.Atspi.Plug (Efl.Object, Elm.Interface.Atspi_Accessible, - Elm.Interface.Atspi.Socket) +class Elm.Atspi.Plug (Efl.Object, Elm.Interface.Atspi_Accessible) { [[AT-SPI Plug class.]] legacy_prefix: elm_atspi_plug; eo_prefix: elm_obj_atspi_plug; + methods { + @property id { + get { + } set { + } + values { + ret: string; + } + } + embed_by { + [[ Embed accessible object as a child of remote object.]] + params { + @in proxy: Elm.Atspi.Proxy; + } + } + unembed_by { + // unembed + params { + @in proxy: Elm.Atspi.Proxy; + } + } + on_embedded { + params { + @in proxy: Elm.Atspi.Proxy; + } + } + on_unembedded { + params { + @in proxy: Elm.Atspi.Proxy; + } + } + on_connected { + } + on_disconnected { + } + } implements { Efl.Object.destructor; Efl.Object.constructor; - Elm.Interface.Atspi.Socket.on_embedded; - Elm.Interface.Atspi.Socket.on_unembedded; + } + events { + embedded; + unembedded; + id,changed; } } diff --git a/src/lib/elementary/elm_atspi_socket.c b/src/lib/elementary/elm_atspi_socket.c index c925d1d6cb..232987cbec 100644 --- a/src/lib/elementary/elm_atspi_socket.c +++ b/src/lib/elementary/elm_atspi_socket.c @@ -6,6 +6,7 @@ #include <elm_priv.h> typedef struct _Elm_Atspi_Socket_Data { + Eina_Bool occupied : 1; } Elm_Atspi_Socket_Data; EOLIAN void @@ -22,4 +23,17 @@ _elm_atspi_socket_efl_object_constructor(Eo *obj, Elm_Atspi_Socket_Data *pd EINA return obj; } + +EOLIAN Eina_Bool +_elm_atspi_socket_occupied_get(Eo *plug EINA_UNUSED, Elm_Atspi_Socket_Data *pd) +{ + return pd->occupied; +} + +EOLIAN void +_elm_atspi_socket_occupied_set(Eo *plug EINA_UNUSED, Elm_Atspi_Socket_Data *pd, Eina_Bool val) +{ + pd->occupied = val; +} + #include "elm_atspi_socket.eo.c" diff --git a/src/lib/elementary/elm_atspi_socket.eo b/src/lib/elementary/elm_atspi_socket.eo index 12ccab0a72..68a02e29d5 100644 --- a/src/lib/elementary/elm_atspi_socket.eo +++ b/src/lib/elementary/elm_atspi_socket.eo @@ -1,8 +1,31 @@ -class Elm.Atspi.Socket (Efl.Object, Elm.Interface.Atspi_Accessible, Elm.Interface.Atspi.Socket) +class Elm.Atspi.Socket (Efl.Object, Elm.Interface.Atspi_Accessible) { [[AT-SPI Socket class]] legacy_prefix: elm_atspi_socket; eo_prefix: elm_obj_atspi_socket; + methods { + @property occupied { + get { + } + set { + } + values { + ret: bool; + } + } + embed @pure_virtual { + [[ Embed remote accessible object as a child.]] + params { + @in proxy: Elm.Atspi.Proxy; + } + } + unembed @pure_virtual { + // unembed + params { + @in proxy: Elm.Atspi.Proxy; + } + } + } implements { Efl.Object.constructor; Efl.Object.destructor; diff --git a/src/lib/elementary/elm_interface_accessible_observer.c b/src/lib/elementary/elm_interface_accessible_observer.c new file mode 100644 index 0000000000..a3da4a9aae --- /dev/null +++ b/src/lib/elementary/elm_interface_accessible_observer.c @@ -0,0 +1,8 @@ +#ifdef HAVE_CONFIG_H + #include "elementary_config.h" +#endif + +#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED +#include <Elementary.h> + +#include "elm_interface_accessible_observer.eo.c" diff --git a/src/lib/elementary/elm_interface_accessible_observer.eo b/src/lib/elementary/elm_interface_accessible_observer.eo new file mode 100644 index 0000000000..0075a96423 --- /dev/null +++ b/src/lib/elementary/elm_interface_accessible_observer.eo @@ -0,0 +1,20 @@ +import elm_general; + +interface Elm.Interface.Accessible_Observer () +{ + methods { + @property root { + set { + } + values { + new_root: Efl.Object; + } + } + on_created { + params { + @in object: Efl.Object; + } + } + } +} + diff --git a/src/lib/elementary/elm_interface_accessible_observer.h b/src/lib/elementary/elm_interface_accessible_observer.h new file mode 100644 index 0000000000..3a3e0144b8 --- /dev/null +++ b/src/lib/elementary/elm_interface_accessible_observer.h @@ -0,0 +1,8 @@ +#ifndef ELM_INTERFACE_ACCESSIBLE_OBSERVER_H +#define ELM_INTERFACE_ACCESSIBLE_OBSERVER_H + +#ifdef EFL_EO_API_SUPPORT +#include "elm_interface_accessible_observer.eo.h" +#endif + +#endif diff --git a/src/lib/elementary/elm_interface_atspi_accessible.c b/src/lib/elementary/elm_interface_atspi_accessible.c index 5537b1e19a..da27c07795 100644 --- a/src/lib/elementary/elm_interface_atspi_accessible.c +++ b/src/lib/elementary/elm_interface_atspi_accessible.c @@ -131,16 +131,11 @@ struct _Elm_Interface_Atspi_Accessible_Data typedef struct _Elm_Interface_Atspi_Accessible_Data Elm_Interface_Atspi_Accessible_Data; -struct Accessibility_Plugin -{ - void *plugin_private_data; -}; - -static void _elm_interface_atspi_accessible_observers_notify(Eo *object); +static void _elm_interface_atspi_accessible_observers_notify_created(Eo *object); static Eo *root; -static Eina_List *plugins; +static Eina_List *observers; EOLIAN static int _elm_interface_atspi_accessible_index_in_parent_get(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED) @@ -515,6 +510,11 @@ _elm_interface_atspi_accessible_root_get(Eo *class EINA_UNUSED, void *pd EINA_UN } EOLIAN void +_elm_interface_atspi_accessible_root_set(Eo *class EINA_UNUSED, void *pd EINA_UNUSED, Eo *root) +{ +} + +EOLIAN void _elm_interface_atspi_accessible_efl_object_destructor(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd) { efl_destructor(efl_super(obj, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)); @@ -534,33 +534,36 @@ EOLIAN Eo * _elm_interface_atspi_accessible_efl_object_constructor(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd) { pd->self = obj; - _elm_interface_atspi_accessible_observers_notify(obj); + _elm_interface_atspi_accessible_observers_notify_created(obj); return efl_constructor(efl_super(obj, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)); } -static void -_elm_interface_atspi_accessible_observers_notify(Eo *object) +static void _elm_interface_atspi_accessible_observers_notify_created(Eo *object) { - if (observers) + Eina_List *l; + Elm_Interface_Accessible_Observer *observer; + + EINA_LIST_FOREACH(observers, l , observer) { - ERR("Query observer"); + elm_interface_accessible_observer_on_created(observer, object); } } EOLIAN void -_elm_interface_atspi_accessible_observer_install(Eo *socket_class, void *data) +_elm_interface_atspi_accessible_observer_install(Eo *socket_class, void *data, + Elm_Interface_Accessible_Observer *observer) { - ERR("Observer installed"); - observers = 0x1; - if (!observers) - observers = eina_array_new(1); + if (efl_isa(observer, ELM_INTERFACE_ACCESSIBLE_OBSERVER_INTERFACE)) + observers = eina_list_append(observers, observer); + else + ERR("Incorrct type: (%s) do not implement %s", + efl_class_name_get(observer), efl_class_name_get(ELM_INTERFACE_ACCESSIBLE_OBSERVER_INTERFACE)); } EOLIAN void -_elm_interface_atspi_accessible_observer_uninstall(Eo *socket_class, void *data) +_elm_interface_atspi_accessible_observer_uninstall(Eo *socket_class, void *data, Elm_Interface_Accessible_Observer *observer) { - ERR("Observer uninstalled"); - observers = NULL; + observers = eina_list_remove(observers, observer); } #include "elm_interface_atspi_accessible.eo.c" diff --git a/src/lib/elementary/elm_interface_atspi_accessible.eo b/src/lib/elementary/elm_interface_atspi_accessible.eo index 1999d59910..e1cf1186ff 100644 --- a/src/lib/elementary/elm_interface_atspi_accessible.eo +++ b/src/lib/elementary/elm_interface_atspi_accessible.eo @@ -384,12 +384,22 @@ mixin Elm.Interface.Atspi_Accessible (Efl.Interface, Efl.Object) @property root @class { get { [[Get's default root object of accessible object hierarchy]] - values { - ret: Efl.Object; [[Root object]] - } } set { } + values { + ret: Efl.Object; [[Root object]] + } + } + observer_install @class { + params { + @in observer: Elm.Interface.Accessible_Observer; + } + } + observer_uninstall @class { + params { + @in observer: Elm.Interface.Accessible_Observer; + } } } implements { diff --git a/src/lib/elementary/elm_interface_atspi_socket.c b/src/lib/elementary/elm_interface_atspi_socket.c deleted file mode 100644 index 0753306beb..0000000000 --- a/src/lib/elementary/elm_interface_atspi_socket.c +++ /dev/null @@ -1,69 +0,0 @@ -#ifdef HAVE_CONFIG_H - #include "elementary_config.h" -#endif - -#include <Elementary.h> -#include "elm_widget.h" -#include "elm_priv.h" - -typedef struct _Elm_Inteface_Atspi_Socket_Data -{ - const char *id; - Eina_Bool occupied : 1; -} Elm_Interface_Atspi_Socket_Data; - -EOLIAN const char* -_elm_interface_atspi_socket_id_get(Eo *socket EINA_UNUSED, Elm_Interface_Atspi_Socket_Data *pd) -{ - return pd->id; -} - -EOLIAN void -_elm_interface_atspi_socket_id_set(Eo *socket, Elm_Interface_Atspi_Socket_Data *pd, const char *new_id) -{ - const char *id = eina_stringshare_add(new_id); - if (pd->id != id) - { - eina_stringshare_del(pd->id); - pd->id = id; - efl_event_callback_call(socket, ELM_INTERFACE_ATSPI_SOCKET_EVENT_ID_CHANGED, NULL); - } - else - eina_stringshare_del(id); -} - -EOLIAN Eina_Bool -_elm_interface_atspi_socket_occupied_get(Eo *socket EINA_UNUSED, Elm_Interface_Atspi_Socket_Data *pd) -{ - return pd->occupied; -} - -EOLIAN void -_elm_interface_atspi_socket_occupied_set(Eo *socket EINA_UNUSED, Elm_Interface_Atspi_Socket_Data *pd, Eina_Bool val) -{ - pd->occupied = val; -} - -EOLIAN void -_elm_interface_atspi_socket_on_embedded(Eo *socket, Elm_Interface_Atspi_Socket_Data *pd EINA_UNUSED, Elm_Atspi_Proxy *proxy) -{ - efl_event_callback_call(socket, ELM_INTERFACE_ATSPI_SOCKET_EVENT_EMBEDDED, proxy); -} - -EOLIAN void -_elm_interface_atspi_socket_on_unembedded(Eo *socket, Elm_Interface_Atspi_Socket_Data *pd EINA_UNUSED, Elm_Atspi_Proxy *proxy) -{ - efl_event_callback_call(socket, ELM_INTERFACE_ATSPI_SOCKET_EVENT_UNEMBEDDED, proxy); -} - -EOLIAN void -_elm_interface_atspi_socket_on_connected(Eo *socket, Elm_Interface_Atspi_Socket_Data *pd EINA_UNUSED) -{ -} - -EOLIAN void -_elm_interface_atspi_socket_on_disconnected(Eo *socket, Elm_Interface_Atspi_Socket_Data *pd EINA_UNUSED) -{ -} - -#include "elm_interface_atspi_socket.eo.c" diff --git a/src/lib/elementary/elm_interface_atspi_socket.eo b/src/lib/elementary/elm_interface_atspi_socket.eo deleted file mode 100644 index 7efbfa4681..0000000000 --- a/src/lib/elementary/elm_interface_atspi_socket.eo +++ /dev/null @@ -1,69 +0,0 @@ -import elm_general; - -mixin Elm.Interface.Atspi.Socket(Efl.Interface, Efl.Object) -{ - [[Elementary AT-SPI socket interface]] - eo_prefix: elm_interface_atspi_socket; - methods { - @property id { - get { - } set { - } - values { - ret: string; - } - } - @property occupied { - get { - } - set { - } - values { - ret: bool; - } - } - embed @pure_virtual { - [[ Embed remote accessible object as a child.]] - params { - @in proxy: Elm.Atspi.Proxy; - } - } - unembed @pure_virtual { - // unembed - params { - @in proxy: Elm.Atspi.Proxy; - } - } - embed_by @pure_virtual { - [[ Embed accessible object as a child of remote object.]] - params { - @in proxy: Elm.Atspi.Proxy; - } - } - unembed_by @pure_virtual { - // unembed - params { - @in proxy: Elm.Atspi.Proxy; - } - } - on_embedded { - params { - @in proxy: Elm.Atspi.Proxy; - } - } - on_unembedded { - params { - @in proxy: Elm.Atspi.Proxy; - } - } - on_connected { - } - on_disconnected { - } - } - events { - embedded; - unembedded; - id,changed; - } -} diff --git a/src/lib/elementary/elm_interfaces.h b/src/lib/elementary/elm_interfaces.h index c0c5a8bfdb..fa9e85b55a 100644 --- a/src/lib/elementary/elm_interfaces.h +++ b/src/lib/elementary/elm_interfaces.h @@ -1,3 +1,4 @@ +#include "elm_interface_accessible_observer.h" #include "elm_interface_atspi_accessible.h" #include "elm_interface_atspi_text.h" #include "elm_interface_atspi_widget_action.h" @@ -11,7 +12,6 @@ #include "elm_interface_atspi_text_editable.eo.h" #include "elm_interface_atspi_image.eo.h" #include "elm_interface_atspi_selection.eo.h" -#include "elm_interface_atspi_socket.eo.h" #include "elm_interface_atspi_value.eo.h" #endif #endif @@ -22,7 +22,6 @@ #include "elm_interface_atspi_text_editable.eo.legacy.h" #include "elm_interface_atspi_image.eo.legacy.h" #include "elm_interface_atspi_selection.eo.legacy.h" -#include "elm_interface_atspi_socket.eo.legacy.h" #include "elm_interface_atspi_value.eo.legacy.h" #endif #endif |