[Screen-Reader]: When radio, colorchooser, toolbar, multibutton items are selected 79/77779/4
authorShilpa Singh <shilpa.singh@samsung.com>
Fri, 1 Jul 2016 05:50:40 +0000 (11:20 +0530)
committerShilpa Singh <shilpa.singh@samsung.com>
Mon, 4 Jul 2016 06:27:59 +0000 (11:57 +0530)
inform user about selection.

Change-Id: Ib046967695ce115a271e10218cdf46e8e6c1d7be

src/app_tracker.c
src/navigator.c [changed mode: 0644->0755]

index 5265aca4046157a6edc38f19b29345dfd1f26c1f..af879f0e80ea62fc6fa35c6bde7adf4c358999cf 100644 (file)
@@ -247,13 +247,38 @@ static void _on_atspi_event_cb(const AtspiEvent * event)
                g_error_free(err);
        }
 
-       if (!strcmp(event->type, "object:state-changed:checked") && (atspi_accessible_get_role(event->source, NULL) == ATSPI_ROLE_CHECK_BOX)) {
-               char buf[16] = "\0";
+       if (!strcmp(event->type, "object:state-changed:checked")) {
+               char buf[256] = "\0";
+               gchar *name = atspi_accessible_get_name(event->source, NULL);
+               strncat(buf, name, sizeof(buf) - strlen(buf) - 1);
+               strncat(buf, ", ", sizeof(buf) - strlen(buf) - 1);
                if (event->detail1)
-                       snprintf(buf, sizeof(buf), "%s", _("IDS_TRAIT_CHECK_BOX_SELECTED"));
+                       strncat(buf, _("IDS_TRAIT_CHECK_BOX_SELECTED"), sizeof(buf) - strlen(buf) - 1);
                else
-                       snprintf(buf, sizeof(buf), "%s", _("IDS_TRAIT_CHECK_BOX_NOT_SELECTED"));
+                       strncat(buf, _("IDS_TRAIT_CHECK_BOX_NOT_SELECTED"), sizeof(buf) - strlen(buf) - 1);
+               tts_speak(buf, EINA_TRUE);
+               g_free(name);
+       }
+
+       if (!strcmp(event->type, "object:state-changed:selected") && (atspi_accessible_get_role(event->source, NULL) == ATSPI_ROLE_MENU_ITEM)) {
+               char buf[256] = "\0";
+               char tab_index[16] = "\0";
+               AtspiAccessible *parent = atspi_accessible_get_parent(event->source, NULL);
+               int children_count = atspi_accessible_get_child_count(parent, NULL);
+               int index = atspi_accessible_get_index_in_parent(event->source, NULL);
+               gchar *name = atspi_accessible_get_name(event->source, NULL);
+               strncat(buf, name, sizeof(buf) - strlen(buf) - 1);
+               strncat(buf, ", ", sizeof(buf) - strlen(buf) - 1);
+               snprintf(tab_index, sizeof(tab_index), _("IDS_TRAIT_MENU_ITEM_TAB_INDEX"), index + 1, children_count);
+               strncat(buf, tab_index, sizeof(buf) - strlen(buf) - 1);
+               strncat(buf, ", ", sizeof(buf) - strlen(buf) - 1);
+               if (event->detail1) {
+                       strncat(buf, _("IDS_TRAIT_ITEM_SELECTED"), sizeof(buf) - strlen(buf) - 1);
+               }
+               else strncat(buf, _("IDS_TRAIT_ITEM_SELECT"), sizeof(buf) - strlen(buf) - 1);
                tts_speak(buf, EINA_TRUE);
+               g_object_unref(parent);
+               g_free(name);
        }
 
        AtspiAccessible *new_highlighted_obj = NULL;
@@ -308,6 +333,7 @@ static int _app_tracker_init_internal(void)
        atspi_event_listener_register(_listener, "object:state-changed:highlighted", NULL);
        atspi_event_listener_register(_listener, "object:state-changed:animated", NULL);
        atspi_event_listener_register(_listener, "object:state-changed:checked", NULL);
+       atspi_event_listener_register(_listener, "object:state-changed:selected", NULL);
        atspi_event_listener_register(_listener, "object:bounds-changed", NULL);
        atspi_event_listener_register(_listener, "object:visible-data-changed", NULL);
        atspi_event_listener_register(_listener, "object:active-descendant-changed", NULL);
old mode 100644 (file)
new mode 100755 (executable)
index 178f1fd..73740c5
@@ -632,6 +632,10 @@ char *generate_trait(AtspiAccessible * obj)
        }
        case ATSPI_ROLE_CHECK_BOX:
        case ATSPI_ROLE_RADIO_BUTTON: {
+               AtspiAccessible *parent;
+               AtspiRole parent_role;
+               parent = atspi_accessible_get_parent(obj, NULL);
+               parent_role = atspi_accessible_get_role(parent, NULL);
                if (atspi_state_set_contains(state_set, ATSPI_STATE_CHECKED)) {
                        strncat(ret, _("IDS_TRAIT_CHECK_BOX_SELECTED"), sizeof(ret) - strlen(ret) - 1);
                }
@@ -639,26 +643,11 @@ char *generate_trait(AtspiAccessible * obj)
                        if (atspi_state_set_contains(state_set, ATSPI_STATE_EDITABLE)) {
                                strncat(ret, _("IDS_TRAIT_TEXT_EDIT"), sizeof(ret) - strlen(ret) - 1);
                        }
-                       else strncat(ret, _("IDS_TRAIT_CHECK_BOX_NOT_SELECTED"), sizeof(ret) - strlen(ret) - 1);
-               }
-
-               if (role == ATSPI_ROLE_RADIO_BUTTON) {
-                       /* Say role name ("radio button"), but only if it's not a color chooser or multibuttonentry items */
-                       AtspiAccessible *parent;
-                       AtspiRole parent_role;
-                       parent = atspi_accessible_get_parent(obj, NULL);
-                       parent_role = atspi_accessible_get_role(parent, NULL);
-                       if (parent_role != ATSPI_ROLE_COLOR_CHOOSER && parent_role != ATSPI_ROLE_PANEL) {
-                               gchar *role_name;
-                               role_name = atspi_accessible_get_localized_role_name(obj, NULL);
-                               if (role_name) {
-                                       strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
-                                       strncat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
-                                       g_free(role_name);
-                               }
-                       }
-                       g_object_unref(parent);
+                       else if (parent_role != ATSPI_ROLE_COLOR_CHOOSER)
+                               strncat(ret, _("IDS_TRAIT_CHECK_BOX_NOT_SELECTED"), sizeof(ret) - strlen(ret) - 1);
                }
+               g_object_unref(parent);
+               //Role name should not be read for radio button, color selector, multibuttonentry items
                break;
        }
        case ATSPI_ROLE_PUSH_BUTTON: {