Enable AT-SPI by default for suppressed screen-reader 62/275162/1
authorShinwoo Kim <cinoo.kim@samsung.com>
Tue, 17 May 2022 11:06:16 +0000 (20:06 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Tue, 17 May 2022 11:06:16 +0000 (20:06 +0900)
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

index 1eed5fa..123d17c 100644 (file)
@@ -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: