From d954c09bcb446f75c560b56363f07d4d90a743f4 Mon Sep 17 00:00:00 2001 From: Shinwoo Kim Date: Tue, 17 May 2022 20:06:16 +0900 Subject: [PATCH] Enable AT-SPI by default for suppressed screen-reader The ELM_SUPPRESSED_SCREEN_READER is enabled if the application wants to speak directly without going through the screen-reader. In an environment where the ELM_SUPPRESSED_SCREEN_READER is enabled, the screen-reader does not use "IsEnabled" property but only "ScreenReaderEnabled" property. The "IsEnabled" is enabled by another AT-client such as the Aurum. So this patch makes the AT-SPI bridge be enabled only if the "IsEnabled" property is enabled, and ignore the changes of "ScreenReaderEnabled". Change-Id: I9a006b559083ed19eb6985d7faa75ffac6edc3e5 --- src/lib/elementary/elm_atspi_bridge.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/lib/elementary/elm_atspi_bridge.c b/src/lib/elementary/elm_atspi_bridge.c index 1eed5fa..123d17c 100644 --- a/src/lib/elementary/elm_atspi_bridge.c +++ b/src/lib/elementary/elm_atspi_bridge.c @@ -7417,7 +7417,12 @@ _properties_changed_cb(void *data, Eldbus_Proxy *proxy EINA_UNUSED, void *event) Eo *bridge = data; Eina_Bool val; const char *ifc = eldbus_proxy_interface_get(ev->proxy); - if (ev->name && !strcmp(ev->name, "ScreenReaderEnabled" ) && + + //TIZEN_ONLY(20220517) Enable AT-SPI by default for suppressed screen-reader + ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(data, pd); + if (!pd->suppress_screen_reader && + // + ev->name && !strcmp(ev->name, "ScreenReaderEnabled" ) && ifc && !strcmp(A11Y_DBUS_STATUS_INTERFACE, ifc)) { if (!eina_value_get(ev->value, &val)) @@ -7531,6 +7536,11 @@ _elm_atspi_bridge_efl_object_constructor(Eo *obj, Elm_Atspi_Bridge_Data *pd) Eldbus_Proxy *proxy; Eldbus_Pending *req; + //TIZEN_ONLY(20210416) - Suppress screen reader + const char *suppress = getenv("ELM_SUPPRESS_SCREEN_READER"); + pd->suppress_screen_reader = suppress ? !!atoi(suppress) : EINA_FALSE; + // + efl_constructor(efl_super(obj, ELM_ATSPI_BRIDGE_CLASS)); elm_need_eldbus(); @@ -7550,12 +7560,19 @@ _elm_atspi_bridge_efl_object_constructor(Eo *obj, Elm_Atspi_Bridge_Data *pd) ERR("Could not get proxy object for %s interface", A11Y_DBUS_STATUS_INTERFACE); goto proxy_err; } - if (!(req = eldbus_proxy_property_get(proxy, "ScreenReaderEnabled", _screen_reader_enabled_get, obj))) + + //TIZEN_ONLY(20220517) Enable AT-SPI by default for suppressed screen-reader + if (!pd->suppress_screen_reader) { - ERR("Could not send PropertyGet request"); - goto proxy_err; + // + if (!(req = eldbus_proxy_property_get(proxy, "ScreenReaderEnabled", _screen_reader_enabled_get, obj))) + { + ERR("Could not send PropertyGet request"); + goto proxy_err; + } + pd->pending_requests = eina_list_append(pd->pending_requests, req); } - pd->pending_requests = eina_list_append(pd->pending_requests, req); + // TIZEN_ONLY(20170516): connect to at-spi dbus based on org.a11y.Status.IsEnabled property if (!(req = eldbus_proxy_property_get(proxy, A11Y_DBUS_ENABLED_PROPERTY, _at_spi_client_enabled_get, obj))) { @@ -7574,11 +7591,6 @@ _elm_atspi_bridge_efl_object_constructor(Eo *obj, Elm_Atspi_Bridge_Data *pd) ecore_fork_reset_callback_add(_on_fork_reset, obj); // - //TIZEN_ONLY(20210416) - Suppress screen reader - const char *suppress = getenv("ELM_SUPPRESS_SCREEN_READER"); - pd->suppress_screen_reader = suppress ? !!atoi(suppress) : EINA_FALSE; - // - return obj; proxy_err: -- 2.7.4