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;
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);
}
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);
}
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: {