snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_SLIDER_VALUE"), accuracy, val, accuracy, max_val);
strncat(dest, trait, dest_size - strlen(dest) - 1);
- if (_widget_has_state(obj, ATSPI_STATE_ENABLED)) {
- strncat(dest, _("IDS_TRAIT_SLIDER_SWIPE_COMMUNICATE"), dest_size - strlen(dest) - 1);
- }
g_object_unref(value_iface);
}
-char *generate_trait(AtspiAccessible * obj)
+char *generate_role_trait(AtspiAccessible * obj)
{
if (!obj)
return strdup("");
AtspiRole role = atspi_accessible_get_role(obj, NULL);
AtspiStateSet *state_set = atspi_accessible_get_state_set(obj);
- char ret[TTS_MAX_TEXT_SIZE] = "\0";
+ char ret[TTS_MAX_TEXT_SIZE] = { [TTS_MAX_TEXT_SIZE - 1] = 0 };
switch (role) {
case ATSPI_ROLE_ENTRY:
case ATSPI_ROLE_PASSWORD_TEXT: {
gchar *role_name = atspi_accessible_get_localized_role_name(obj, NULL);
if (role_name) {
- strncat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
- strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
- if (atspi_state_set_contains(state_set, ATSPI_STATE_FOCUSED))
- strncat(ret, _("IDS_TRAIT_TEXT_EDIT_FOCUSED"), sizeof(ret) - strlen(ret) - 1);
- else
- strncat(ret, _("IDS_TRAIT_TEXT_EDIT"), sizeof(ret) - strlen(ret) - 1);
+ snprintf(ret, sizeof(ret), "%s", role_name);
g_free(role_name);
}
break;
}
- case ATSPI_ROLE_MENU_ITEM: {
- AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);
- AtspiRole parent_role = atspi_accessible_get_role(parent, NULL);
- GError *err = NULL;
- if (parent_role == ATSPI_ROLE_TOOL_BAR) {
- int children_count = atspi_accessible_get_child_count(parent, NULL);
- int index = atspi_accessible_get_index_in_parent(obj, NULL);
- AtspiSelection* selection = atspi_accessible_get_selection_iface(parent);
- gboolean is_selected = atspi_selection_is_child_selected(selection, index, &err);
- GERROR_CHECK(err);
- char tab_index[MENU_ITEM_TAB_INDEX_SIZE];
- snprintf(tab_index, MENU_ITEM_TAB_INDEX_SIZE, _("IDS_TRAIT_MENU_ITEM_TAB_INDEX"), index + 1, children_count);
- strncat(ret, tab_index, sizeof(ret) - strlen(ret) - 1);
- strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
- if (!is_selected)
- strncat(ret, _("IDS_TRAIT_ITEM_SELECT"), sizeof(ret) - strlen(ret) - 1);
- g_object_unref(selection);
- }
- g_object_unref(parent);
- break;
- }
case ATSPI_ROLE_POPUP_MENU: {
AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);
AtspiRole parent_role = atspi_accessible_get_role(parent, NULL);
if (parent_role == ATSPI_ROLE_COMBO_BOX) break;
int children_count;
- char trait[HOVERSEL_TRAIT_SIZE];
-
children_count = atspi_accessible_get_child_count(obj, NULL);
-
- snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_SHOWING"));
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
- strncat(ret, " ", sizeof(ret) - strlen(ret) - 1);
-
- snprintf(trait, HOVERSEL_TRAIT_SIZE, "%d", children_count);
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
- strncat(ret, " ", sizeof(ret) - strlen(ret) - 1);
-
- snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_ITEMS"));
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
- strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
-
- snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_POPUP_CLOSE"));
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
- g_object_unref(parent);
+ snprintf(ret, sizeof(ret), "%s, %s %d %s", _("IDS_TRAIT_CTX_POPUP"),
+ _("IDS_TRAIT_SHOWING"), children_count, _("IDS_TRAIT_ITEMS"));
break;
}
case ATSPI_ROLE_DIALOG: {
int children_count = _find_popup_list_children_count(obj);
- char trait[HOVERSEL_TRAIT_SIZE];
-
- if (children_count > 0) {
- snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_SHOWING"));
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
- strncat(ret, " ", sizeof(ret) - strlen(ret) - 1);
-
- snprintf(trait, HOVERSEL_TRAIT_SIZE, "%d", children_count);
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
- strncat(ret, " ", sizeof(ret) - strlen(ret) - 1);
-
- snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_ITEMS"));
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
- strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
- }
- if (_has_activate_action(obj)) {
- snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_POPUP_CLOSE"));
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
- }
+ if (children_count > 0)
+ snprintf(ret, sizeof(ret), "%s %d %s",
+ _("IDS_TRAIT_SHOWING"), children_count, _("IDS_TRAIT_ITEMS"));
break;
}
case ATSPI_ROLE_COMBO_BOX: {
int children_count = atspi_accessible_get_child_count(obj, NULL);
- char trait[HOVERSEL_TRAIT_SIZE];
- snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_PD_HOVERSEL"), children_count);
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
+ snprintf(ret, sizeof(ret), _("IDS_TRAIT_PD_HOVERSEL"), children_count);
break;
}
case ATSPI_ROLE_GLASS_PANE: {
AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);
int children_count = atspi_accessible_get_child_count(parent, NULL);
- char trait[HOVERSEL_TRAIT_SIZE];
- snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_PD_HOVERSEL"), children_count);
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
+ snprintf(ret, sizeof(ret), _("IDS_TRAIT_PD_HOVERSEL"), children_count);
+ g_object_unref(parent);
+ break;
+ }
+ case ATSPI_ROLE_LIST_ITEM: {
+ AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);
+ AtspiStateSet *parent_state_set = atspi_accessible_get_state_set(parent);
+ if (atspi_state_set_contains(parent_state_set, ATSPI_STATE_ANIMATED)) {
+ strncpy(ret, _("IDS_TRAIT_REORDER_ITEM_NAME"), sizeof(ret) - strlen(ret) - 1);
+ }
+ g_object_unref(parent_state_set);
+ g_object_unref(parent);
+ break;
+ }
+ case ATSPI_ROLE_PUSH_BUTTON: {
+ strncpy(ret, _("IDS_TRAIT_PUSH_BUTTON"), sizeof(ret) - strlen(ret) - 1);
+ break;
+ }
+ case ATSPI_ROLE_PROGRESS_BAR: {
+ AtspiValue *value = atspi_accessible_get_value_iface(obj);
+ if (value) {
+ double val = atspi_value_get_current_value(value, NULL);
+ if (val > 0)
+ snprintf(ret, sizeof(ret), _("IDS_TRAIT_PD_PROGRESSBAR_PERCENT"), val * 100);
+ g_object_unref(value);
+ }
+ break;
+ }
+ case ATSPI_ROLE_TOGGLE_BUTTON: {
+ snprintf(ret, sizeof(ret), "%s", _("IDS_TRAIT_TOGGLE_BUTTON"));
+ break;
+ }
+ case ATSPI_ROLE_SLIDER: {
+ add_slider_description(ret, sizeof(ret), obj);
+ break;
+ }
+ case ATSPI_ROLE_HEADING:
+ case ATSPI_ROLE_PAGE_TAB:
+ case ATSPI_ROLE_SCROLL_BAR:
+ case ATSPI_ROLE_EDITBAR:
+ case ATSPI_ROLE_CHECK_BOX:
+ case ATSPI_ROLE_MENU_ITEM:
+ case ATSPI_ROLE_RADIO_MENU_ITEM:
+ case ATSPI_ROLE_RADIO_BUTTON:
+ case ATSPI_ROLE_GROUPING: {
+ break;
+ }
+ default: {
+ gchar *role_name = atspi_accessible_get_localized_role_name(obj, NULL);
+ if (role_name) {
+ strncpy(ret, role_name, sizeof(ret) - strlen(ret) - 1);
+ g_free(role_name);
+ }
+ }
+ }
+
+ if (state_set)
+ g_object_unref(state_set);
+
+ return strdup(ret);
+}
+
+char *generate_description_trait(AtspiAccessible * obj) {
+ if (!obj)
+ return strdup("");
+
+ AtspiRole role = atspi_accessible_get_role(obj, NULL);
+ AtspiStateSet *state_set = atspi_accessible_get_state_set(obj);
+ char ret[TTS_MAX_TEXT_SIZE] = { [TTS_MAX_TEXT_SIZE - 1] = 0 };
+ switch (role) {
+ case ATSPI_ROLE_ENTRY:
+ case ATSPI_ROLE_PASSWORD_TEXT: {
+ if (atspi_state_set_contains(state_set, ATSPI_STATE_FOCUSED))
+ strncpy(ret, _("IDS_TRAIT_TEXT_EDIT_FOCUSED"), sizeof(ret) - strlen(ret) - 1);
+ else
+ strncpy(ret, _("IDS_TRAIT_TEXT_EDIT"), sizeof(ret) - strlen(ret) - 1);
+ break;
+ }
+ case ATSPI_ROLE_MENU_ITEM: {
+ AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);
+ AtspiRole parent_role = atspi_accessible_get_role(parent, NULL);
+ GError *err = NULL;
+ if (parent_role == ATSPI_ROLE_TOOL_BAR) {
+ int children_count = atspi_accessible_get_child_count(parent, NULL);
+ int index = atspi_accessible_get_index_in_parent(obj, NULL);
+ AtspiSelection* selection = atspi_accessible_get_selection_iface(parent);
+ gboolean is_selected = atspi_selection_is_child_selected(selection, index, &err);
+ GERROR_CHECK(err);
+ snprintf(ret, sizeof(ret), _("IDS_TRAIT_MENU_ITEM_TAB_INDEX"), index + 1, children_count);
+ if (!is_selected)
+ snprintf(ret + strlen(ret), sizeof(ret), ", %s", _("IDS_TRAIT_ITEM_SELECT"));
+ g_object_unref(selection);
+ }
g_object_unref(parent);
break;
}
if(parent_role == ATSPI_ROLE_TREE_TABLE) {
strncat(ret, _("IDS_TRAIT_ITEM_SELECTED_IMAGE"), sizeof(ret) - strlen(ret) - 1);
- AtspiStateSet *state_set = atspi_accessible_get_state_set(obj);
- gboolean is_selected = atspi_state_set_contains(state_set, ATSPI_STATE_SELECTED);
- g_object_unref(state_set);
-
- if(is_selected) {
- strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
- strncat(ret, _("IDS_TRAIT_ITEM_SELECTED"), sizeof(ret) - strlen(ret) - 1);
- }
-
AtspiStateSet *parent_state_set = atspi_accessible_get_state_set(parent);
bool is_parent_multiselectable = atspi_state_set_contains(parent_state_set, ATSPI_STATE_MULTISELECTABLE);
g_object_unref(parent);
if(is_parent_multiselectable) {
- char buf[200];
-
AtspiSelection *parent_selection = atspi_accessible_get_selection(parent);
int selected_children_count = atspi_selection_get_n_selected_children(parent_selection, NULL);
-
- strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
-
- snprintf(buf, 200, _("IDS_TRAIT_ITEM_SELECTED_COUNT"), selected_children_count);
- strncat(ret, buf, sizeof(ret) - strlen(ret) - 1);
-
+ snprintf(ret + strlen(ret), sizeof(ret), _("IDS_TRAIT_ITEM_SELECTED_COUNT"), selected_children_count);
g_object_unref(parent_selection);
}
}
AtspiRole child_role = atspi_accessible_get_role(child_iter, &err);
GERROR_CHECK(err);
if(child_role == ATSPI_ROLE_CHECK_BOX) {
- strncat(ret, _("IDS_TRAIT_GROUP_INDEX_IN_CHECK_BOX"), sizeof(ret) - strlen(ret) - 1);
+ strncpy(ret, _("IDS_TRAIT_GROUP_INDEX_IN_CHECK_BOX"), sizeof(ret) - strlen(ret) - 1);
g_object_unref(child_iter);
break;
}
else if (atspi_state_set_contains(state_set, ATSPI_STATE_EXPANDABLE)) {
//ELM_GENLIST_ITEM_TREE
if (atspi_state_set_contains(state_set, ATSPI_STATE_EXPANDED)) {
- strncat(ret, _("IDS_TRAIT_GROUP_INDEX_EXPANDED"), sizeof(ret) - strlen(ret) - 1);
+ strncpy(ret, _("IDS_TRAIT_GROUP_INDEX_EXPANDED"), sizeof(ret) - strlen(ret) - 1);
} else {
- strncat(ret, _("IDS_TRAIT_GROUP_INDEX_COLLAPSED"), sizeof(ret) - strlen(ret) - 1);
+ strncpy(ret, _("IDS_TRAIT_GROUP_INDEX_COLLAPSED"), sizeof(ret) - strlen(ret) - 1);
}
}
else if (atspi_state_set_contains(parent_state_set, ATSPI_STATE_ANIMATED)) {
- strncat(ret, _("IDS_TRAIT_REORDER_ITEM_SELECT"), sizeof(ret) - strlen(ret) - 1);
+ strncpy(ret, _("IDS_TRAIT_REORDER_ITEM_SELECT"), sizeof(ret) - strlen(ret) - 1);
}
g_object_unref(parent_state_set);
g_object_unref(parent);
break;
}
+ case ATSPI_ROLE_POPUP_MENU: {
+ if (!_has_activate_action(obj)) break;
+ AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);
+ AtspiRole parent_role = atspi_accessible_get_role(parent, NULL);
+ if (parent_role == ATSPI_ROLE_COMBO_BOX) break;
+ strncpy(ret, _("IDS_TRAIT_POPUP_CLOSE"), sizeof(ret) - strlen(ret) - 1);
+ g_object_unref(parent);
+ break;
+ }
+ case ATSPI_ROLE_DIALOG: {
+ AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);
+ strncpy(ret, _("IDS_TRAIT_POPUP_CLOSE"), sizeof(ret) - strlen(ret) - 1);
+ g_object_unref(parent);
+ break;
+ }
+ case ATSPI_ROLE_COMBO_BOX:
+ case ATSPI_ROLE_GLASS_PANE: {
+ strncpy(ret, _("IDS_TRAIT_PD_HOVERSEL_OPEN"), sizeof(ret) - strlen(ret) - 1);
+ break;
+ }
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);
- }
- else {
- if (atspi_state_set_contains(state_set, ATSPI_STATE_EDITABLE)) {
- strncat(ret, _("IDS_TRAIT_ITEM_EDIT"), sizeof(ret) - strlen(ret) - 1);
- }
- else if (parent_role != ATSPI_ROLE_COLOR_CHOOSER)
- strncat(ret, _("IDS_TRAIT_CHECK_BOX_NOT_SELECTED"), sizeof(ret) - strlen(ret) - 1);
- }
+ if (!atspi_state_set_contains(state_set, ATSPI_STATE_CHECKED) && atspi_state_set_contains(state_set, ATSPI_STATE_EDITABLE))
+ strncpy(ret, _("IDS_TRAIT_ITEM_EDIT"), 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: {
- strncat(ret, _("IDS_TRAIT_PUSH_BUTTON"), sizeof(ret) - strlen(ret) - 1);
+ case ATSPI_ROLE_PROGRESS_BAR: {
+ strncpy(ret, _("IDS_TRAIT_PD_PROGRESSBAR"), sizeof(ret) - strlen(ret) - 1);
break;
}
- case ATSPI_ROLE_PROGRESS_BAR: {
- AtspiValue *value = atspi_accessible_get_value_iface(obj);
- if (value) {
- double val = atspi_value_get_current_value(value, NULL);
- char trait[HOVERSEL_TRAIT_SIZE];
- if (val > 0) {
- snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_PD_PROGRESSBAR_PERCENT"), val * 100);
- strncat(ret, trait, sizeof(ret) - strlen(ret) - 1);
- } else {
- strncat(ret, _("IDS_TRAIT_PD_PROGRESSBAR"), sizeof(ret) - strlen(ret) - 1);
+ case ATSPI_ROLE_SLIDER: {
+ if (atspi_state_set_contains(state_set, ATSPI_STATE_ENABLED))
+ strncpy(ret, _("IDS_TRAIT_SLIDER_SWIPE_COMMUNICATE"), sizeof(ret) - strlen(ret) - 1);
+ break;
+ }
+ default:
+ break;
+ }
+
+ if (state_set)
+ g_object_unref(state_set);
+
+ return strdup(ret);
+}
+
+char *generate_state_trait(AtspiAccessible * obj)
+{
+ if (!obj)
+ return strdup("");
+
+ AtspiRole role = atspi_accessible_get_role(obj, NULL);
+ AtspiStateSet *state_set = atspi_accessible_get_state_set(obj);
+ char ret[TTS_MAX_TEXT_SIZE] = "\0";
+ switch (role) {
+ case ATSPI_ROLE_LIST_ITEM: {
+ AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);
+ AtspiRole parent_role = atspi_accessible_get_role(parent, NULL);
+ AtspiStateSet *parent_state_set = atspi_accessible_get_state_set(parent);
+ if(parent_role == ATSPI_ROLE_TREE_TABLE) {
+
+ AtspiStateSet *state_set = atspi_accessible_get_state_set(obj);
+ gboolean is_selected = atspi_state_set_contains(state_set, ATSPI_STATE_SELECTED);
+ g_object_unref(state_set);
+
+ if(is_selected) {
+ strncpy(ret, _("IDS_TRAIT_ITEM_SELECTED"), sizeof(ret) - strlen(ret) - 1);
}
- g_object_unref(value);
+
}
+ g_object_unref(parent_state_set);
+ g_object_unref(parent);
+ break;
+ }
+ 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))
+ strncpy(ret, _("IDS_TRAIT_CHECK_BOX_SELECTED"), sizeof(ret) - strlen(ret) - 1);
+ else if (!atspi_state_set_contains(state_set, ATSPI_STATE_EDITABLE) && (parent_role != ATSPI_ROLE_COLOR_CHOOSER))
+ strncpy(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_TOGGLE_BUTTON: {
- strncat(ret, _("IDS_TRAIT_TOGGLE_BUTTON"), sizeof(ret) - strlen(ret) - 1);
- strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
if (atspi_state_set_contains(state_set, ATSPI_STATE_CHECKED)) {
- strncat(ret, _("IDS_TRAIT_TOGGLE_BUTTON_ON"), sizeof(ret) - strlen(ret) - 1);
+ strncpy(ret, _("IDS_TRAIT_TOGGLE_BUTTON_ON"), sizeof(ret) - strlen(ret) - 1);
} else {
- strncat(ret, _("IDS_TRAIT_TOGGLE_BUTTON_OFF"), sizeof(ret) - strlen(ret) - 1);
+ strncpy(ret, _("IDS_TRAIT_TOGGLE_BUTTON_OFF"), sizeof(ret) - strlen(ret) - 1);
}
break;
}
- case ATSPI_ROLE_SLIDER: {
- add_slider_description(ret, sizeof(ret), obj);
- break;
- }
- case ATSPI_ROLE_HEADING:
- case ATSPI_ROLE_PAGE_TAB:
- case ATSPI_ROLE_SCROLL_BAR:
- case ATSPI_ROLE_EDITBAR:
- case ATSPI_ROLE_GROUPING: {
- break;
- }
case ATSPI_ROLE_RADIO_MENU_ITEM: {
- strncat(ret, _("IDS_TRAIT_CHECK_BOX_SELECTED"), sizeof(ret) - strlen(ret) - 1);
+ strncpy(ret, _("IDS_TRAIT_CHECK_BOX_SELECTED"), sizeof(ret) - strlen(ret) - 1);
break;
}
- default: {
- gchar *role_name = atspi_accessible_get_localized_role_name(obj, NULL);
- if (role_name) {
- strncat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
- g_free(role_name);
- }
- }
+ default:
+ break;
}
if (state_set)
static char *generate_description_from_relation_object(AtspiAccessible *obj)
{
GError *err = NULL;
- char *ret = generate_trait(obj);
+ char *ret = NULL;
+ char trait[TTS_MAX_TEXT_SIZE] = "\0";
+ char *role_name = generate_role_trait(obj);
+ char *description_from_role = generate_description_trait(obj);
+ char *state_from_role = generate_state_trait(obj);
+ if (role_name && strlen(role_name) > 0)
+ strncat(trait, role_name, sizeof(trait) - strlen(trait) - 1);
+ if (description_from_role && strlen(description_from_role) > 0) {
+ if (strlen(trait) > 0)
+ strncat(trait, ", ", sizeof(trait) - strlen(trait) - 1);
+ strncat(trait, description_from_role, sizeof(trait) - strlen(trait) - 1);
+ }
+ if (state_from_role && strlen(state_from_role) > 0) {
+ if (strlen(trait) > 0)
+ strncat(trait, ", ", sizeof(trait) - strlen(trait) - 1);
+ strncat(trait, state_from_role, sizeof(trait) - strlen(trait) - 1);
+ }
+
char *desc = atspi_accessible_get_description(obj, &err);
if (err)
{
g_error_free(err);
g_free(desc);
- return ret;
+ return strdup(trait);
}
- if (desc) {
- if (desc[0] != '\0') {
- char *tmp = ret;
- if (asprintf(&ret, "%s, %s", desc, ret) < 0)
- ERROR("asprintf failed.");
- free(tmp);
- }
+ if (desc && desc[0]!= '\0') {
+ if (asprintf(&ret, "%s, %s", desc, trait) < 0)
+ ERROR("asprintf failed.");
+ return strdup(ret);
g_free(desc);
}
- return ret;
+ return strdup(trait);
}
static char *generate_name_from_relation_object(AtspiAccessible *obj)
char *text = NULL;
char ret[TTS_MAX_TEXT_SIZE] = "\0";
char *description_from_relation = NULL;
- char *name_from_relation = NULL;;
+ char *name_from_relation = NULL;
+ char *description_from_role = NULL;
+ char *state_from_role = NULL;
GHashTable *hash_table = NULL;
gchar *reading_info = NULL;
gchar *type = NULL;
SCREEN_READER_SAFE_FREE(names, free);
}
if (attribute & ACCESSIBLE_READING_INFO_TYPE_ROLE) {
- role_name = generate_trait(obj);
+ role_name = generate_role_trait(obj);
if (role_name && strlen(role_name) > 0) {
if (strlen(ret) > 0)
strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
SCREEN_READER_SAFE_FREE(role_name, free);
}
if (attribute & ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION) {
+ description_from_role = generate_description_trait(obj);
description = atspi_accessible_get_description(obj, NULL);
description_from_relation = generate_text_for_relation_objects(obj, ATSPI_RELATION_DESCRIBED_BY,
generate_description_from_relation_object);
DEBUG("Description:%s VALUE %d", description, read_description);
+
+ if (description_from_role && strlen(description_from_role) > 0) {
+ if (strlen(ret) > 0)
+ strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
+ strncat(ret, description_from_role, sizeof(ret) - strlen(ret) - 1);
+ }
if (description && strlen(description) > 0) {
/* If description reading is enabled */
if (read_description) {
strncat(ret, description, sizeof(ret) - strlen(ret) - 1);
}
}
- if (description_from_relation && (description_from_relation[0] != '\n')) {
+ if (description_from_relation && strlen(description_from_relation)) {
if (strlen(ret) > 0)
strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
strncat(ret, description_from_relation, sizeof(ret) - strlen(ret) - 1);
}
SCREEN_READER_SAFE_FREE(description, free);
SCREEN_READER_SAFE_FREE(description_from_relation, free);
+ SCREEN_READER_SAFE_FREE(description_from_role, free);
}
if (attribute & ACCESSIBLE_READING_INFO_TYPE_STATE) {
+ state_from_role = generate_state_trait(obj);
+ if (state_from_role && strlen(state_from_role) > 0) {
+ if (strlen(ret) > 0)
+ strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
+ strncat(ret, state_from_role, sizeof(ret) - strlen(ret) - 1);
+ }
if (!_widget_has_state(obj, ATSPI_STATE_ENABLED)) {
strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
strncat(ret, _("IDS_TRAIT_DISABLED"), sizeof(ret) - strlen(ret) - 1);
}
+ SCREEN_READER_SAFE_FREE(state_from_role, free);
}
DEBUG("RESULT: %s", ret);
return strdup(ret);