AtspiAccessible *_directional_depth_first_search(AtspiAccessible * root, AtspiAccessible * start, int next_sibling_idx_modifier, Eina_Bool(*stop_condition) (AtspiAccessible *))
{
Eina_Bool start_is_not_defunct = EINA_FALSE;
+ AtspiStateSet *ss;
+
if (start) {
AtspiStateSet *ss = atspi_accessible_get_state_set(start);
start_is_not_defunct = !atspi_state_set_contains(ss, ATSPI_STATE_DEFUNCT);
g_object_unref(next_related_in_direction);
relation_mode = EINA_FALSE;
int cc = atspi_accessible_get_child_count(node, NULL);
- if (cc > 0) // walk down
+ ss = atspi_accessible_get_state_set(node);
+
+ if (cc > 0 && atspi_state_set_contains(ss, ATSPI_STATE_SHOWING)) // walk down
{
int idx = next_sibling_idx_modifier > 0 ? 0 : cc - 1;
g_object_unref(node);
if (!node || node == root) {
DEBUG("DFS END");
g_object_unref(node);
+ g_object_unref(ss);
return NULL;
}
g_object_unref(node);
node = atspi_accessible_get_child_at_index(atspi_accessible_get_parent(node, NULL), idx + next_sibling_idx_modifier, NULL); //... and next
DEBUG("DFS NEXT %d", idx + next_sibling_idx_modifier);
}
+ g_object_unref(ss);
}
}
DEBUG("DFS END");