}
static Eina_Bool
+_has_escape_action(AtspiAccessible *obj)
+{
+ Eina_Bool ret = EINA_FALSE;
+
+ AtspiAction *action = NULL;
+
+ action = atspi_accessible_get_action_iface(obj);
+ if(action)
+ {
+ int i = 0;
+ for (; i < atspi_action_get_n_actions(action, NULL); i++)
+ {
+ if (!strcmp(atspi_action_get_action_name(action, i, NULL), "escape"))
+ {
+ ret = EINA_TRUE;
+ break;
+ }
+ }
+ g_object_unref(action);
+ }
+ DEBUG("Obj %s %s escape action",atspi_accessible_get_role_name(obj, NULL), ret ? "has" : "doesn't have");
+ return ret;
+}
+
+static Eina_Bool
_no_need_for_focusable_state(AtspiAccessible *obj)
{
AtspiRole role = atspi_accessible_get_role(obj, NULL);
case ATSPI_ROLE_PUSH_BUTTON:
if (_obj_state_visible_and_showing(obj, EINA_FALSE))
return EINA_TRUE;
+ break;
case ATSPI_ROLE_POPUP_MENU:
if (_obj_state_visible_and_showing(obj, EINA_FALSE))
return EINA_TRUE;
AtspiRole role = atspi_accessible_get_role(obj, NULL);
AtspiAccessible *first_modal_ancestor = _first_modal_object_in_object_chain(obj);
- Eina_Bool ret = first_modal_ancestor != NULL || role == ATSPI_ROLE_DIALOG || role == ATSPI_ROLE_POPUP_MENU;
+ Eina_Bool ret = (first_modal_ancestor && first_modal_ancestor != obj)
+ || (role == ATSPI_ROLE_DIALOG && _has_escape_action(obj))
+ || role == ATSPI_ROLE_POPUP_MENU;
if (first_modal_ancestor)
g_object_unref(first_modal_ancestor);
return ret;
return 0;
}
+AtspiAction * atspi_accessible_get_action_iface (AtspiAccessible *obj)
+{
+ return NULL;
+}
+
+gint atspi_action_get_n_actions(AtspiAction *obj, GError **error)
+{
+ return 0;
+}
+
+gchar * atspi_action_get_action_name (AtspiAction *obj, gint i, GError **error)
+{
+ return strdup("");
+}
+
int atspi_exit(void)
{
return 1;
typedef struct _AtspiRect AtspiRect;
typedef struct _AtspiEditableText AtspiEditableText;
typedef struct _AtspiRelation AtspiRelation;
+typedef struct _AtspiAction AtspiAction;
typedef struct _AtspiAccessibleClass AtspiAccessibleClass;
typedef struct _AtspiComponentClass AtspiComponentClass;
GObjectClass parent_class;
};
+struct _AtspiAction
+{
+ GTypeInterface parent;
+};
+
struct _AtspiComponentClass
{
GObjectClass parent_class;
AtspiAccessible * atspi_accessible_get_parent (AtspiAccessible *obj, GError **error);
gboolean atspi_component_contains (AtspiComponent *obj, gint x, gint y, AtspiCoordType ctype, GError **error);
int atspi_component_get_highlight_index(AtspiComponent *obj, GError **error);
+AtspiAction * atspi_accessible_get_action_iface (AtspiAccessible *obj);
+gint atspi_action_get_n_actions (AtspiAction *obj, GError **error);
+gchar * atspi_action_get_action_name (AtspiAction *obj, gint i, GError **error);
int atspi_exit(void);