Eolian: Integration of Widget Access Object

This commit is contained in:
Daniel Zaoui 2014-03-27 13:17:39 +02:00
parent 99b8105671
commit 550fca5d05
5 changed files with 56 additions and 80 deletions

View File

@ -662,7 +662,9 @@ BUILT_SOURCES = \
elm_video.eo.c \ elm_video.eo.c \
elm_video.eo.h \ elm_video.eo.h \
elm_web.eo.c \ elm_web.eo.c \
elm_web.eo.h elm_web.eo.h \
elm_widget_access_object.eo.c \
elm_widget_access_object.eo.h
EXTRA_DIST += \ EXTRA_DIST += \
elm_widget.eo \ elm_widget.eo \
@ -733,7 +735,8 @@ EXTRA_DIST += \
elm_thumb.eo \ elm_thumb.eo \
elm_toolbar.eo \ elm_toolbar.eo \
elm_video.eo \ elm_video.eo \
elm_web.eo elm_web.eo \
elm_widget_access_object.eo
nodist_includesunstable_HEADERS = \ nodist_includesunstable_HEADERS = \
elm_widget.eo.h \ elm_widget.eo.h \
@ -804,5 +807,6 @@ nodist_includesunstable_HEADERS = \
elm_thumb.eo.h \ elm_thumb.eo.h \
elm_toolbar.eo.h \ elm_toolbar.eo.h \
elm_video.eo.h \ elm_video.eo.h \
elm_web.eo.h elm_web.eo.h \
elm_widget_access_object.eo.h

View File

@ -413,11 +413,11 @@ _emit_atspi_state_changed_unfocused_event(void *data, Evas_Object *eo EINA_UNUSE
eo_do(ao, eo_event_callback_call(ELM_ATSPI_OBJECT_EVENT_STATE_CHANGED, &evdata[0], NULL)); eo_do(ao, eo_event_callback_call(ELM_ATSPI_OBJECT_EVENT_STATE_CHANGED, &evdata[0], NULL));
} }
static void EOLIAN static void
_widget_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) _elm_widget_access_object_eo_base_constructor(Eo *obj, void *_pd EINA_UNUSED)
{ {
Evas_Object *internal_obj = NULL; Evas_Object *internal_obj = NULL;
eo_do_super(obj, ELM_ATSPI_WIDGET_CLASS, eo_constructor()); eo_do_super(obj, ELM_WIDGET_ACCESS_OBJECT_CLASS, eo_constructor());
eo_do(obj, eo_parent_get(&internal_obj)); eo_do(obj, eo_parent_get(&internal_obj));
@ -428,27 +428,23 @@ _widget_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
evas_object_smart_callback_add(internal_obj, "unfocused", _emit_atspi_state_changed_unfocused_event, obj); evas_object_smart_callback_add(internal_obj, "unfocused", _emit_atspi_state_changed_unfocused_event, obj);
} }
static void EOLIAN static const char*
_widget_name_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elm_widget_access_object_elm_atspi_object_name_get(Eo *obj, void *_pd EINA_UNUSED)
{ {
EO_PARAMETER_GET(const char **, ret, list);
Evas_Object *widget = NULL; Evas_Object *widget = NULL;
const char *name = NULL;
eo_do(obj, elm_atspi_obj_object_get(&widget)); eo_do(obj, elm_atspi_obj_object_get(&widget));
name = elm_object_text_get(widget); return elm_object_text_get(widget);
if (ret) *ret = name;
} }
static void EOLIAN static AtspiRole
_widget_role_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elm_widget_access_object_elm_atspi_object_role_get(Eo *obj, void *_pd EINA_UNUSED)
{ {
EO_PARAMETER_GET(AtspiRole*, ret, list);
const char *type; const char *type;
AtspiRole role; AtspiRole role;
Evas_Object *widget = NULL; Evas_Object *widget = NULL;
eo_do(obj, elm_atspi_obj_object_get(&widget)); eo_do(obj, elm_atspi_obj_object_get(&widget));
if (!widget) return; if (!widget) return ATSPI_ROLE_INVALID;
type = evas_object_type_get(widget); type = evas_object_type_get(widget);
// FIXME make it hash or cast some first bytes to int. // FIXME make it hash or cast some first bytes to int.
@ -459,31 +455,26 @@ _widget_role_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
else else
role = ATSPI_ROLE_UNKNOWN; role = ATSPI_ROLE_UNKNOWN;
if (ret) *ret = role; return role;
} }
static void EOLIAN static Elm_Atspi_Object*
_widget_parent_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elm_widget_access_object_elm_atspi_object_parent_get(Eo *obj, void *_pd EINA_UNUSED)
{ {
EO_PARAMETER_GET(Elm_Atspi_Object **, ret, list);
Evas_Object *widget = NULL; Evas_Object *widget = NULL;
Elm_Atspi_Object *parent;
eo_do(obj, elm_atspi_obj_object_get(&widget)); eo_do(obj, elm_atspi_obj_object_get(&widget));
widget = elm_object_parent_widget_get(widget); widget = elm_object_parent_widget_get(widget);
if (widget) if (widget)
parent = _elm_atspi_factory_construct(widget); return _elm_atspi_factory_construct(widget);
else // if parent is not found, attach it to atspi root object. else // if parent is not found, attach it to atspi root object.
parent = _elm_atspi_root_object_get(); return _elm_atspi_root_object_get();
if (ret) *ret = parent;
} }
static void EOLIAN static Eina_List*
_widget_children_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elm_widget_access_object_elm_atspi_object_children_get(Eo *obj, void *_pd EINA_UNUSED)
{ {
EO_PARAMETER_GET(Eina_List **, ret, list);
Evas_Object *widget = NULL; Evas_Object *widget = NULL;
Eina_List *l, *accs = NULL; Eina_List *l, *accs = NULL;
Elm_Widget_Smart_Data *sd; Elm_Widget_Smart_Data *sd;
@ -492,7 +483,7 @@ _widget_children_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
eo_do(obj, elm_atspi_obj_object_get(&widget)); eo_do(obj, elm_atspi_obj_object_get(&widget));
sd = eo_data_scope_get(widget, ELM_OBJ_WIDGET_CLASS); sd = eo_data_scope_get(widget, ELM_OBJ_WIDGET_CLASS);
if (!sd) return; if (!sd) return NULL;
EINA_LIST_FOREACH(sd->subobjs, l, widget) EINA_LIST_FOREACH(sd->subobjs, l, widget)
{ {
@ -501,21 +492,17 @@ _widget_children_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
if (aobj) if (aobj)
accs = eina_list_append(accs, aobj); accs = eina_list_append(accs, aobj);
} }
if (ret) return accs;
*ret = accs;
else
eina_list_free(accs);
} }
static void EOLIAN static Elm_Atspi_State
_widget_state_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elm_widget_access_object_elm_atspi_object_state_get(Eo *obj, void *_pd EINA_UNUSED)
{ {
EO_PARAMETER_GET(Elm_Atspi_State *, ret, list);
Evas_Object *widget; Evas_Object *widget;
Elm_Atspi_State states; Elm_Atspi_State states;
eo_do(obj, elm_atspi_obj_object_get(&widget)); eo_do(obj, elm_atspi_obj_object_get(&widget));
eo_do_super(obj, ELM_ATSPI_WIDGET_CLASS, elm_atspi_obj_state_get(&states)); eo_do_super(obj, ELM_WIDGET_ACCESS_OBJECT_CLASS, elm_atspi_obj_state_get(&states));
if (elm_object_focus_get(widget)) if (elm_object_focus_get(widget))
BIT_FLAG_SET(states, ATSPI_STATE_FOCUSED); BIT_FLAG_SET(states, ATSPI_STATE_FOCUSED);
@ -524,58 +511,28 @@ _widget_state_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
if (!elm_object_disabled_get(widget)) if (!elm_object_disabled_get(widget))
BIT_FLAG_SET(states, ATSPI_STATE_ENABLED); BIT_FLAG_SET(states, ATSPI_STATE_ENABLED);
if (ret) *ret = states; return states;
} }
static void EOLIAN static Eina_Bool
_widget_comp_focus_grab(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elm_widget_access_object_elm_interface_atspi_component_focus_grab(Eo *obj, void *_pd EINA_UNUSED)
{ {
EO_PARAMETER_GET(Eina_Bool*, ret, list);
Evas_Object *evobj = NULL; Evas_Object *evobj = NULL;
if (ret) *ret = EINA_FALSE;
eo_do(obj, elm_atspi_obj_object_get(&evobj)); eo_do(obj, elm_atspi_obj_object_get(&evobj));
EINA_SAFETY_ON_NULL_RETURN(evobj); EINA_SAFETY_ON_NULL_RETURN_VAL(evobj, EINA_FALSE);
if (elm_object_focus_allow_get(evobj)) if (elm_object_focus_allow_get(evobj))
{ {
Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas_object_evas_get(evobj)); Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas_object_evas_get(evobj));
if (!ee) return; if (!ee) return EINA_FALSE;
ecore_evas_activate(ee); ecore_evas_activate(ee);
elm_object_focus_set(evobj, EINA_TRUE); elm_object_focus_set(evobj, EINA_TRUE);
if (ret) *ret = EINA_TRUE; return EINA_TRUE;
} }
return EINA_FALSE;
} }
static void #include "elm_widget_access_object.eo.c"
_widget_class_constructor(Eo_Class *klass)
{
const Eo_Op_Func_Description func_desc[] = {
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _widget_constructor),
EO_OP_FUNC(ELM_ATSPI_OBJ_ID(ELM_ATSPI_OBJ_SUB_ID_NAME_GET), _widget_name_get),
EO_OP_FUNC(ELM_ATSPI_OBJ_ID(ELM_ATSPI_OBJ_SUB_ID_ROLE_GET), _widget_role_get),
EO_OP_FUNC(ELM_ATSPI_OBJ_ID(ELM_ATSPI_OBJ_SUB_ID_PARENT_GET), _widget_parent_get),
EO_OP_FUNC(ELM_ATSPI_OBJ_ID(ELM_ATSPI_OBJ_SUB_ID_CHILDREN_GET), _widget_children_get),
EO_OP_FUNC(ELM_ATSPI_OBJ_ID(ELM_ATSPI_OBJ_SUB_ID_STATE_GET), _widget_state_get),
EO_OP_FUNC(ELM_INTERFACE_ATSPI_COMPONENT_ID(ELM_INTERFACE_ATSPI_COMPONENT_SUB_ID_FOCUS_GRAB), _widget_comp_focus_grab),
EO_OP_FUNC_SENTINEL
};
eo_class_funcs_set(klass, func_desc);
}
static const Eo_Class_Description widget_class_desc = {
EO_VERSION,
"Elm_Widget_Access_Object",
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
NULL,
0,
_widget_class_constructor,
NULL
};
EO_DEFINE_CLASS(elm_atspi_widget_obj_class_get, &widget_class_desc, ELM_ATSPI_OBJ_CLASS, NULL);
/// Elm_Atspi_App base class /// Elm_Atspi_App base class
#define ELM_ATSPI_APP_CLASS elm_atspi_app_obj_class_get() #define ELM_ATSPI_APP_CLASS elm_atspi_app_obj_class_get()
@ -739,7 +696,7 @@ static const Eo_Class_Description win_class_desc = {
NULL NULL
}; };
EO_DEFINE_CLASS(elm_atspi_win_obj_class_get, &win_class_desc, ELM_ATSPI_WIDGET_CLASS, ELM_INTERFACE_ATSPI_WINDOW_CLASS, NULL); EO_DEFINE_CLASS(elm_atspi_win_obj_class_get, &win_class_desc, ELM_WIDGET_ACCESS_OBJECT_CLASS, ELM_INTERFACE_ATSPI_WINDOW_CLASS, NULL);
Elm_Atspi_Object* Elm_Atspi_Object*
_elm_atspi_root_object_get(void) _elm_atspi_root_object_get(void)
@ -774,7 +731,7 @@ _elm_atspi_factory_construct(Evas_Object *obj)
else if (!strcmp(type, "elm_win")) else if (!strcmp(type, "elm_win"))
ret = eo_add(ELM_ATSPI_WIN_CLASS, obj); ret = eo_add(ELM_ATSPI_WIN_CLASS, obj);
else if (!strncmp(type, "elm_", 4)) // defaults to implementation for elm_widget class. else if (!strncmp(type, "elm_", 4)) // defaults to implementation for elm_widget class.
ret = eo_add(ELM_ATSPI_WIDGET_CLASS, obj); ret = eo_add(ELM_WIDGET_ACCESS_OBJECT_CLASS, obj);
if (ret) eo_unref(ret); // only evas_object should hold reference to atspi object if (ret) eo_unref(ret); // only evas_object should hold reference to atspi object

View File

@ -1,8 +1,11 @@
void _elm_atspi_object_global_callback_add(Eo_Event_Cb cv, void *user_data); void _elm_atspi_object_global_callback_add(Eo_Event_Cb cv, void *user_data);
void _elm_atspi_object_global_callback_del(Eo_Event_Cb cv); void _elm_atspi_object_global_callback_del(Eo_Event_Cb cv);
#include "elm_widget_access_object.eo.h"
#if 0
#define ELM_ATSPI_WIDGET_CLASS elm_atspi_widget_obj_class_get() #define ELM_ATSPI_WIDGET_CLASS elm_atspi_widget_obj_class_get()
const Eo_Class *elm_atspi_widget_obj_class_get(void) EINA_CONST; const Eo_Class *elm_atspi_widget_obj_class_get(void) EINA_CONST;
#endif
#include "elm_atspi_object.eo.h" #include "elm_atspi_object.eo.h"
#if 0 #if 0

View File

@ -74,9 +74,7 @@ mixin Elm_Interface_Atspi_Component ()
} }
focus_grab { focus_grab {
legacy null; legacy null;
params { return Eina_Bool;
@out Eina_Bool ret;
}
} }
accessible_at_point_get { accessible_at_point_get {
legacy null; legacy null;

View File

@ -0,0 +1,14 @@
class Elm_Widget_Access_Object (Elm_Atspi_Object)
{
data:null;
implements {
Eo_Base::constructor;
Elm_Interface_Atspi_Component::focus_grab;
Elm_Atspi_Object::name::get;
Elm_Atspi_Object::parent::get;
Elm_Atspi_Object::state::get;
Elm_Atspi_Object::role::get;
Elm_Atspi_Object::children::get;
}
}