ATSPI_ROLE_PANEL,
ATSPI_ROLE_PARAGRAPH,
ATSPI_ROLE_PASSWORD_TEXT,
+ ATSPI_ROLE_POPUP_MENU,
ATSPI_ROLE_PUSH_BUTTON,
ATSPI_ROLE_PROGRESS_BAR,
ATSPI_ROLE_RADIO_BUTTON,
if (_obj_state_visible_and_showing(obj, EINA_TRUE))
return EINA_TRUE;
break;
+ case ATSPI_ROLE_MENU_ITEM:
+ if (_obj_state_visible_and_showing(obj, EINA_TRUE))
+ return EINA_TRUE;
+ break;
case ATSPI_ROLE_PROGRESS_BAR:
if (_obj_state_visible_and_showing(obj, EINA_FALSE))
return EINA_TRUE;
case ATSPI_ROLE_PUSH_BUTTON:
if (_obj_state_visible_and_showing(obj, EINA_FALSE))
return EINA_TRUE;
+ case ATSPI_ROLE_POPUP_MENU:
+ if (_obj_state_visible_and_showing(obj, EINA_FALSE))
+ return EINA_TRUE;
break;
default:
return EINA_FALSE;
return EINA_TRUE;
}
+static Eina_Bool
+_check_if_object_has_modal_parent(AtspiAccessible *obj)
+{
+ DEBUG("START");
+
+ AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);
+
+ if (!parent)
+ return EINA_FALSE;
+
+ AtspiStateSet *ss = atspi_accessible_get_state_set(parent);
+
+ if (atspi_state_set_contains(ss, ATSPI_STATE_MODAL))
+ {
+ g_object_unref(ss);
+ return EINA_TRUE;
+ }
+ else if (_check_if_object_has_modal_parent(parent))
+ return EINA_TRUE;
+ else
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_filter_ctx_popup_child_cb(const void *container, void *data, void *fdata)
+{
+ DEBUG("START");
+ AtspiAccessible *obj = fdata;
+ AtspiRole role = atspi_accessible_get_role(obj, NULL);
+
+ if (role == ATSPI_ROLE_NOTIFICATION)
+ return EINA_TRUE;
+
+ if (role == ATSPI_ROLE_POPUP_MENU)
+ return EINA_TRUE;
+
+ if (_check_if_object_has_modal_parent(obj))
+ return EINA_TRUE;
+
+ return EINA_FALSE;
+}
+
static Eina_List*
_flat_review_candidates_get(AtspiAccessible *root)
{
Eina_List *l, *ln;
AtspiAccessible *obj;
+ AtspiRole role;
+ gboolean with_ctx_popup = EINA_FALSE;
+
// remove object that are not in root's viewport
const ObjectCache *oc = object_cache_get(root);
EINA_LIST_FOREACH_SAFE(ret, l, ln, obj)
{
DEBUG("Name:[%s] Role:[%s]", atspi_accessible_get_name(obj, NULL), atspi_accessible_get_role_name(obj, NULL));
+ role = atspi_accessible_get_role(obj, NULL);
+
+ if (role == ATSPI_ROLE_POPUP_MENU)
+ with_ctx_popup = EINA_TRUE;
}
+ if (with_ctx_popup)
+ {
+ with_ctx_popup = EINA_FALSE;
+ FilterResult fr3 = _accessible_list_split_with_filter(ret, _filter_ctx_popup_child_cb, NULL);
+ ret = fr3.success;
+ _accessible_list_free(fr3.failure);
+ }
return ret;
}
#define DISTANCE_NB 8
#define MENU_ITEM_TAB_INDEX_SIZE 16
-#define HOVERSEL_TRAIT_SIZE 70
+#define HOVERSEL_TRAIT_SIZE 200
#define TTS_MAX_TEXT_SIZE 2000
#define GESTURE_LIMIT 10
+
//Timeout in ms which will be used as interval for handling ongoing
//hoved gesture updates. It is introduced to improve performance.
//Even if user makes many mouse move events within hover gesture
GArray *states = atspi_state_set_get_states (st);
AtspiComponent *comp = atspi_accessible_get_component_iface(obj);
AtspiValue *value = atspi_accessible_get_value_iface(obj);
+ AtspiRect *rect_screen = atspi_component_get_extents(comp, ATSPI_COORD_TYPE_SCREEN, NULL);
+ AtspiRect *rect_win = atspi_component_get_extents(comp, ATSPI_COORD_TYPE_WINDOW, NULL);
DEBUG("NAME:%s", name);
DEBUG("ROLE:%s", role)
free(state_name);
}
DEBUG("LOCALE:%s", atspi_accessible_get_object_locale(obj, NULL));
+ DEBUG("SIZE ON SCREEN, width:%d, height:%d",rect_screen->width, rect_screen->height);
+ DEBUG("POSITION ON SCREEN: x:%d y:%d", rect_screen->x, rect_screen->y);
+ DEBUG("SIZE ON WIN, width:%d, height:%d",rect_win->width, rect_win->height);
+ DEBUG("POSITION ON WIN: x:%d y:%d", rect_win->x, rect_win->y);
DEBUG("------------------------");
DEBUG("END");
}
generate_description_for_subtrees(AtspiAccessible *obj)
{
DEBUG("START");
- if (!obj)
- return strdup("");
- int child_count = atspi_accessible_get_child_count(obj, NULL);
-
- DEBUG("There is %d children inside this filler", child_count);
- if (!child_count)
- return strdup("");
+ AtspiRole role;
+ int child_count;
int i;
char *name = NULL;
char *below = NULL;
char ret[TTS_MAX_TEXT_SIZE] = "\0";
AtspiAccessible *child = NULL;
+
+ if (!obj)
+ return strdup("");
+
+ role = atspi_accessible_get_role(obj, NULL);
+
+ // Do not generate that for popups
+ if (role == ATSPI_ROLE_POPUP_MENU)
+ return strdup("");
+
+ child_count = atspi_accessible_get_child_count(obj, NULL);
+
+ DEBUG("There is %d children inside this object", child_count);
+ if (!child_count)
+ return strdup("");
+
for (i=0; i < child_count; i++)
{
child = atspi_accessible_get_child_at_index(obj, i, NULL);
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);
}
+ else if (role == ATSPI_ROLE_POPUP_MENU)
+ {
+ char *role_name = atspi_accessible_get_localized_role_name(obj, NULL);
+ strncat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
+ strncat(ret, ", ", sizeof(ret) - strlen(ret) - 1);
+
+ int children_count = atspi_accessible_get_child_count(obj, NULL);
+ char trait[HOVERSEL_TRAIT_SIZE];
+
+ 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);
+ }
else if (role == ATSPI_ROLE_GLASS_PANE)
{
AtspiAccessible *parent = atspi_accessible_get_parent(obj, NULL);