atspi: encapsulate common behaviour in atspi mixin class.
This patch moves some duplicated implementation from elm_widget and elm_widget_item classes into atspi base mixin. It allows to better share code and reduce maintainability. Change-Id: I8d264661e7ffade7da72299f29075a536d71eaa3
This commit is contained in:
parent
6606ad372a
commit
ca134076eb
|
@ -121,10 +121,21 @@ struct _Elm_Atspi_Event_Handler
|
|||
void *data;
|
||||
};
|
||||
|
||||
struct _Elm_Interface_Atspi_Accessible_Data
|
||||
{
|
||||
Elm_Atspi_Role role;
|
||||
const char *name;
|
||||
const char *description;
|
||||
Elm_Interface_Atspi_Accessible *parent;
|
||||
};
|
||||
|
||||
typedef struct _Elm_Interface_Atspi_Accessible_Data Elm_Interface_Atspi_Accessible_Data;
|
||||
|
||||
|
||||
static Eina_List *global_callbacks;
|
||||
|
||||
EOLIAN static int
|
||||
_elm_interface_atspi_accessible_index_in_parent_get(Eo *obj, void *pd EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_index_in_parent_get(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED)
|
||||
{
|
||||
Eina_List *l, *children = NULL;
|
||||
Eo *chld, *parent = NULL;
|
||||
|
@ -151,27 +162,24 @@ _elm_interface_atspi_accessible_index_in_parent_get(Eo *obj, void *pd EINA_UNUSE
|
|||
return ret;
|
||||
}
|
||||
|
||||
EOLIAN static Eo *
|
||||
_elm_interface_atspi_accessible_parent_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
EOLIAN static Elm_Interface_Atspi_Accessible *
|
||||
_elm_interface_atspi_accessible_parent_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd)
|
||||
{
|
||||
Eo *parent = NULL;
|
||||
|
||||
/* By default using Eo_Base object hierarchy */
|
||||
eo_do(obj, parent = eo_parent_get());
|
||||
if (!parent) return NULL;
|
||||
|
||||
return eo_isa(parent, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN) ? parent : NULL;
|
||||
return pd->parent;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_interface_atspi_accessible_parent_set(Eo *obj, void *priv EINA_UNUSED, Eo *new_parent EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_parent_set(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd, Elm_Interface_Atspi_Accessible *new_parent)
|
||||
{
|
||||
WRN("The %s object does not implement the \"accessible_parent_set\" function.",
|
||||
eo_class_name_get(eo_class_get(obj)));
|
||||
if (pd->parent != new_parent)
|
||||
{
|
||||
pd->parent = new_parent;
|
||||
elm_interface_atspi_accessible_parent_changed_signal_emit(obj);
|
||||
}
|
||||
}
|
||||
|
||||
EOLIAN Eina_List*
|
||||
_elm_interface_atspi_accessible_attributes_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_attributes_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED)
|
||||
{
|
||||
WRN("The %s object does not implement the \"accessible_attributes_set\" function.",
|
||||
eo_class_name_get(eo_class_get(obj)));
|
||||
|
@ -179,20 +187,23 @@ _elm_interface_atspi_accessible_attributes_get(Eo *obj EINA_UNUSED, void *pd EIN
|
|||
}
|
||||
|
||||
EOLIAN static Elm_Atspi_Role
|
||||
_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED)
|
||||
{
|
||||
return ELM_ATSPI_ROLE_UNKNOWN;
|
||||
return pd->role;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_interface_atspi_accessible_role_set(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Elm_Atspi_Role role EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_role_set(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED, Elm_Atspi_Role role)
|
||||
{
|
||||
WRN("The %s object does not implement the \"accessible_role_set\" function.",
|
||||
eo_class_name_get(eo_class_get(obj)));
|
||||
if (pd->role != role)
|
||||
{
|
||||
pd->role = role;
|
||||
elm_interface_atspi_accessible_role_changed_signal_emit(obj);
|
||||
}
|
||||
}
|
||||
|
||||
EOLIAN const char *
|
||||
_elm_interface_atspi_accessible_role_name_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_role_name_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED)
|
||||
{
|
||||
Elm_Atspi_Role role;
|
||||
|
||||
|
@ -202,36 +213,30 @@ _elm_interface_atspi_accessible_role_name_get(Eo *obj EINA_UNUSED, void *pd EINA
|
|||
}
|
||||
|
||||
EOLIAN char *
|
||||
_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd)
|
||||
{
|
||||
WRN("The %s object does not implement the \"accessible_name_get\" function.",
|
||||
eo_class_name_get(eo_class_get(obj)));
|
||||
return NULL;
|
||||
return pd->name ? strdup(pd->name) : NULL;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_interface_atspi_accessible_name_set(Eo *obj, void *pd EINA_UNUSED, char *val EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_name_set(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd, char *val)
|
||||
{
|
||||
WRN("The %s object does not implement the \"accessible_name_set\" function.",
|
||||
eo_class_name_get(eo_class_get(obj)));
|
||||
eina_stringshare_replace(&pd->name, val);
|
||||
}
|
||||
|
||||
const char * _elm_interface_atspi_accessible_description_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
const char * _elm_interface_atspi_accessible_description_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd)
|
||||
{
|
||||
WRN("The %s object does not implement the \"accessible_description_get\" function.",
|
||||
eo_class_name_get(eo_class_get(obj)));
|
||||
return NULL;
|
||||
return pd->description;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_interface_atspi_accessible_description_set(Eo *obj, void *pd EINA_UNUSED, const char *val EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_description_set(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd, const char *val)
|
||||
{
|
||||
WRN("The %s object does not implement the \"accessible_description_set\" function.",
|
||||
eo_class_name_get(eo_class_get(obj)));
|
||||
eina_stringshare_replace(&pd->description, val);
|
||||
}
|
||||
|
||||
EOLIAN static const char *
|
||||
_elm_interface_atspi_accessible_localized_role_name_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_localized_role_name_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED)
|
||||
{
|
||||
const char *ret = NULL;
|
||||
eo_do(obj, ret = elm_interface_atspi_accessible_role_name_get());
|
||||
|
@ -242,7 +247,7 @@ _elm_interface_atspi_accessible_localized_role_name_get(Eo *obj EINA_UNUSED, voi
|
|||
}
|
||||
|
||||
EOLIAN static Eina_List *
|
||||
_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED)
|
||||
{
|
||||
Eina_List *children = NULL;
|
||||
Eina_Iterator *iter = NULL;
|
||||
|
@ -263,14 +268,13 @@ _elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, void *pd EINA_
|
|||
}
|
||||
|
||||
EOLIAN static Elm_Atspi_State_Set
|
||||
_elm_interface_atspi_accessible_state_set_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_state_set_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED)
|
||||
{
|
||||
Elm_Atspi_State_Set ret = 0;
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
EOLIAN Eina_List*
|
||||
_elm_interface_atspi_accessible_relation_set_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
|
||||
_elm_interface_atspi_accessible_relation_set_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED)
|
||||
{
|
||||
WRN("The %s object does not implement the \"accessible_relation_set\" function.",
|
||||
eo_class_name_get(eo_class_get(obj)));
|
||||
|
|
|
@ -2,7 +2,7 @@ mixin Elm_Interface_Atspi_Accessible ()
|
|||
{
|
||||
legacy_prefix: null;
|
||||
eo_prefix: elm_interface_atspi_accessible;
|
||||
data: null;
|
||||
data: Elm_Interface_Atspi_Accessible_Data;
|
||||
methods {
|
||||
@property localized_role_name @protected {
|
||||
get {
|
||||
|
@ -45,7 +45,7 @@ mixin Elm_Interface_Atspi_Accessible ()
|
|||
[[Gets widget's accessible children.]]
|
||||
}
|
||||
values {
|
||||
children: free(own(list<Eo *> *), eina_list_free);
|
||||
children: free(own(list<Elm_Interface_Atspi_Accessible *> *), eina_list_free);
|
||||
}
|
||||
}
|
||||
@property role_name @protected {
|
||||
|
@ -91,7 +91,7 @@ mixin Elm_Interface_Atspi_Accessible ()
|
|||
[[Sets widget accessible parent.]]
|
||||
}
|
||||
values {
|
||||
parent: Eo *;
|
||||
parent: Elm_Interface_Atspi_Accessible *;
|
||||
}
|
||||
}
|
||||
@property state_set @protected {
|
||||
|
@ -118,7 +118,7 @@ mixin Elm_Interface_Atspi_Accessible ()
|
|||
}
|
||||
event_emit @class @protected {
|
||||
params {
|
||||
@in accessible: Eo*; [[Accessibility object.]]
|
||||
@in accessible: Elm_Interface_Atspi_Accessible *; [[Accessibility object.]]
|
||||
@in event: const(Eo_Event_Description)*; [[Accessibility event type.]]
|
||||
@in event_info: void*; [[Accessibility event details.]]
|
||||
}
|
||||
|
|
|
@ -4431,8 +4431,8 @@ _elm_widget_item_eo_base_destructor(Eo *eo_item, Elm_Widget_Item_Data *item)
|
|||
}
|
||||
eina_hash_free(item->labels);
|
||||
|
||||
if (item->description)
|
||||
eina_stringshare_del(item->description);
|
||||
eo_do(eo_item, elm_interface_atspi_accessible_description_set(NULL));
|
||||
eo_do(eo_item, elm_interface_atspi_accessible_name_set(NULL));
|
||||
|
||||
if (_elm_config->atspi_mode)
|
||||
elm_interface_atspi_accessible_children_changed_del_signal_emit(item->widget, eo_item);
|
||||
|
@ -4561,34 +4561,6 @@ _elm_widget_item_widget_get(const Eo *eo_item EINA_UNUSED, Elm_Widget_Item_Data
|
|||
return item->widget;
|
||||
}
|
||||
|
||||
EOLIAN static const char*
|
||||
_elm_widget_item_elm_interface_atspi_accessible_description_get(Eo *eo_item EINA_UNUSED,
|
||||
Elm_Widget_Item_Data *item)
|
||||
{
|
||||
return item->description;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_widget_item_elm_interface_atspi_accessible_description_set(Eo *eo_item EINA_UNUSED,
|
||||
Elm_Widget_Item_Data *item,
|
||||
const char *descr)
|
||||
{
|
||||
eina_stringshare_replace(&item->description, descr);
|
||||
}
|
||||
|
||||
EOLIAN static Elm_Atspi_Role
|
||||
_elm_widget_item_elm_interface_atspi_accessible_role_get(Eo *eo_item EINA_UNUSED, Elm_Widget_Item_Data *item)
|
||||
{
|
||||
return item->role;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_widget_item_elm_interface_atspi_accessible_role_set(Eo *eo_item EINA_UNUSED, Elm_Widget_Item_Data *item,
|
||||
Elm_Atspi_Role role)
|
||||
{
|
||||
item->role = role;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
_elm_widget_onscreen_is(Evas_Object *widget)
|
||||
{
|
||||
|
@ -5713,7 +5685,7 @@ elm_widget_tree_dot_dump(const Evas_Object *top,
|
|||
}
|
||||
|
||||
EOLIAN static Eo *
|
||||
_elm_widget_eo_base_constructor(Eo *obj, Elm_Widget_Smart_Data *sd)
|
||||
_elm_widget_eo_base_constructor(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED)
|
||||
{
|
||||
Eo *parent = NULL;
|
||||
|
||||
|
@ -5726,15 +5698,15 @@ _elm_widget_eo_base_constructor(Eo *obj, Elm_Widget_Smart_Data *sd)
|
|||
eo_do(obj, elm_obj_widget_parent_set(parent));
|
||||
sd->on_create = EINA_FALSE;
|
||||
|
||||
sd->role = ELM_ATSPI_ROLE_UNKNOWN;
|
||||
eo_do(obj, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_UNKNOWN));
|
||||
return obj;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_widget_eo_base_destructor(Eo *obj, Elm_Widget_Smart_Data *sd)
|
||||
_elm_widget_eo_base_destructor(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED)
|
||||
{
|
||||
if (sd->description) eina_stringshare_del(sd->description);
|
||||
|
||||
eo_do(obj, elm_interface_atspi_accessible_description_set(NULL));
|
||||
eo_do(obj, elm_interface_atspi_accessible_name_set(NULL));
|
||||
elm_interface_atspi_accessible_removed(obj);
|
||||
|
||||
eo_do_super(obj, ELM_WIDGET_CLASS, eo_destructor());
|
||||
|
@ -5836,30 +5808,6 @@ _elm_widget_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Wid
|
|||
return _elm_util_mkup_to_text(ret);
|
||||
}
|
||||
|
||||
EOLIAN static const char*
|
||||
_elm_widget_elm_interface_atspi_accessible_description_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd)
|
||||
{
|
||||
return _pd->description;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_widget_elm_interface_atspi_accessible_description_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd, const char *descr)
|
||||
{
|
||||
eina_stringshare_replace(&_pd->description, descr);
|
||||
}
|
||||
|
||||
EOLIAN static Elm_Atspi_Role
|
||||
_elm_widget_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd EINA_UNUSED)
|
||||
{
|
||||
return pd->role;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_widget_elm_interface_atspi_accessible_role_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd, Elm_Atspi_Role role)
|
||||
{
|
||||
pd->role = role;
|
||||
}
|
||||
|
||||
EOLIAN static Eina_List*
|
||||
_elm_widget_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd EINA_UNUSED)
|
||||
{
|
||||
|
@ -5882,16 +5830,10 @@ _elm_widget_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, Elm
|
|||
EOLIAN static Eo*
|
||||
_elm_widget_elm_interface_atspi_accessible_parent_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd)
|
||||
{
|
||||
if (pd->atspi_custom_parent)
|
||||
return pd->atspi_custom_parent;
|
||||
else
|
||||
return pd->parent_obj;
|
||||
}
|
||||
Eo *ret;
|
||||
eo_do_super(obj, ELM_WIDGET_CLASS, ret = elm_interface_atspi_accessible_parent_get());
|
||||
|
||||
EOLIAN static void
|
||||
_elm_widget_elm_interface_atspi_accessible_parent_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd, Eo *parent)
|
||||
{
|
||||
pd->atspi_custom_parent = parent;
|
||||
return ret ? ret : pd->parent_obj;
|
||||
}
|
||||
|
||||
EOLIAN static Elm_Atspi_State_Set
|
||||
|
|
|
@ -767,14 +767,9 @@ abstract Elm.Widget (Evas.Object_Smart, Elm_Interface_Atspi_Accessible, Elm_Inte
|
|||
@virtual .focus_next;
|
||||
@virtual .parent_widget.get;
|
||||
Elm_Interface_Atspi_Accessible.name.get;
|
||||
Elm_Interface_Atspi_Accessible.description.get;
|
||||
Elm_Interface_Atspi_Accessible.description.set;
|
||||
Elm_Interface_Atspi_Accessible.role.get;
|
||||
Elm_Interface_Atspi_Accessible.role.set;
|
||||
Elm_Interface_Atspi_Accessible.state_set.get;
|
||||
Elm_Interface_Atspi_Accessible.children.get;
|
||||
Elm_Interface_Atspi_Accessible.parent.get;
|
||||
Elm_Interface_Atspi_Accessible.parent.set;
|
||||
Elm_Interface_Atspi_Accessible.attributes.get;
|
||||
Elm_Interface_Atspi_Accessible.relation_set.get;
|
||||
Elm_Interface_Atspi_Component.focus_grab;
|
||||
|
|
|
@ -411,10 +411,6 @@ typedef struct _Elm_Widget_Smart_Data
|
|||
Eina_List *focus_chain;
|
||||
Eina_List *event_cb;
|
||||
|
||||
int role; /**< Accessibility role */
|
||||
const char *description; /**< Accessibility description */
|
||||
Eo *atspi_custom_parent; /**< Accessibility parent if different then parent_obj */
|
||||
|
||||
/* this is a hook to be set on-the-fly on widgets. this is code
|
||||
* handling the request of showing a specific region from an inner
|
||||
* widget (mainly issued by entries, on cursor moving) */
|
||||
|
@ -625,10 +621,6 @@ struct _Elm_Widget_Item_Data
|
|||
Eina_Hash *labels;
|
||||
Evas_Object *track_obj;
|
||||
|
||||
/**< A11Y info */
|
||||
const char *description;
|
||||
int role;
|
||||
|
||||
Eina_Bool disabled : 1;
|
||||
Eina_Bool on_deletion : 1;
|
||||
Eina_Bool on_translate : 1;
|
||||
|
|
|
@ -529,10 +529,6 @@ class Elm.Widget_Item(Eo.Base, Elm_Interface_Atspi_Accessible,
|
|||
implements {
|
||||
Eo.Base.constructor;
|
||||
Eo.Base.destructor;
|
||||
Elm_Interface_Atspi_Accessible.description.get;
|
||||
Elm_Interface_Atspi_Accessible.description.set;
|
||||
Elm_Interface_Atspi_Accessible.role.get;
|
||||
Elm_Interface_Atspi_Accessible.role.set;
|
||||
Elm_Interface_Atspi_Accessible.state_set.get;
|
||||
Elm_Interface_Atspi_Accessible.parent.get;
|
||||
Elm_Interface_Atspi_Component.extents.get;
|
||||
|
|
Loading…
Reference in New Issue