[feature] check if application window supports screen reader 83/92383/1
authorShinwoo Kim <cinoo.kim@samsung.com>
Sat, 15 Oct 2016 10:13:54 +0000 (19:13 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Sat, 15 Oct 2016 10:13:54 +0000 (19:13 +0900)
If an window has attribute as below, the screen reader does not support the window.
elm_atspi_accessible_attribute_append(ad->win, "screen_reader_support", "no");

Change-Id: I10ee0814fba30a419d0f256fd8647b8274d76834

src/e_mod_main.c
src/e_screen_reader_gestures.c
src/e_screen_reader_private.h

index c9bdfd5..5635948 100644 (file)
@@ -17,6 +17,7 @@ static Eina_List *handlers;
 Eldbus_Connection *conn = NULL;
 Eldbus_Service_Interface *iface = NULL;
 Eina_Bool is_slider;
+Eina_Bool is_screen_reader_support;
 int highlighted_object_x, highlighted_object_y;
 
 EAPI E_Module_Api e_modapi =
@@ -29,6 +30,7 @@ EAPI E_Module_Api e_modapi =
 static Eldbus_Message *_sc_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
 static Eldbus_Message *_is_slider(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
 static Eldbus_Message *_highlighted_object_info(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
+static Eldbus_Message *_is_screen_reader_support(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
 
 static const Eldbus_Method methods[] = {
       { "ScreenReaderEnabled", ELDBUS_ARGS({"b", "bool"}), ELDBUS_ARGS({"b", "bool"}),
@@ -40,6 +42,9 @@ static const Eldbus_Method methods[] = {
       { "HighlightedObjectInfo", ELDBUS_ARGS({"i", "int"}, {"i", "int"}), NULL,
         _highlighted_object_info
       },
+      { "IsScreenReaderSupport", ELDBUS_ARGS({"b", "bool"}), NULL,
+        _is_screen_reader_support
+      },
       { }
 };
 
@@ -264,6 +269,16 @@ _is_slider(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
 }
 
 static Eldbus_Message *
+_is_screen_reader_support(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
+{
+   if (!eldbus_message_arguments_get(msg, "b", &is_screen_reader_support))
+     ERROR("eldbus_message_arguments_get() error\n");
+
+   DEBUG("screen reader support :%d", is_screen_reader_support);
+   return NULL;
+}
+
+static Eldbus_Message *
 _highlighted_object_info(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
 {
    if (!eldbus_message_arguments_get(msg, "ii", &highlighted_object_x, &highlighted_object_y))
index 893e5a1..edcd657 100644 (file)
@@ -1304,6 +1304,12 @@ _mouse_button_down(int type, Ecore_Event_Mouse_Button *event)
 static Eina_Bool
 _event_filter(void *data, void *loop_data, int type, void *event)
 {
+   if (!is_screen_reader_support)
+     {
+        DEBUG("screen reader is not supported");
+        return EINA_TRUE;
+     }
+
    if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN)
      {
         return _mouse_button_down(type, event);
@@ -1346,6 +1352,7 @@ _gesture_init()
         return;
      }
     is_slider = EINA_FALSE;
+    is_screen_reader_support = EINA_TRUE;
     highlighted_object_x = -1;
     highlighted_object_y = -1;
     scrolling = EINA_FALSE;
index a14b0e0..e2d3b08 100644 (file)
@@ -65,6 +65,7 @@ typedef struct {
 } Gesture_Info;
 
 extern Eina_Bool is_slider;
+extern Eina_Bool is_screen_reader_support;
 extern int highlighted_object_x, highlighted_object_y;
 
 int _e_mod_log_init(void);