forked from enlightenment/efl
Eobj: Added eobj_super_do instead of class_do.
SVN revision: 70003
This commit is contained in:
parent
9c4b436c69
commit
419145c72a
|
@ -25,7 +25,7 @@ _position_set(Eobj *obj, Eobj_Op op, va_list *list)
|
||||||
x = va_arg(*list, Evas_Coord);
|
x = va_arg(*list, Evas_Coord);
|
||||||
y = va_arg(*list, Evas_Coord);
|
y = va_arg(*list, Evas_Coord);
|
||||||
printf("But set position %d,%d\n", x, y);
|
printf("But set position %d,%d\n", x, y);
|
||||||
eobj_class_parent_do(obj, _my_class, EVAS_OBJ_POSITION_SET(x, y));
|
eobj_super_do(obj, EVAS_OBJ_POSITION_SET(x, y));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -87,13 +87,10 @@ EAPI Eina_Bool eobj_init(void);
|
||||||
EAPI Eina_Bool eobj_shutdown(void);
|
EAPI Eina_Bool eobj_shutdown(void);
|
||||||
|
|
||||||
#define eobj_do(object, ...) eobj_do_internal(object, __VA_ARGS__, NULL)
|
#define eobj_do(object, ...) eobj_do_internal(object, __VA_ARGS__, NULL)
|
||||||
/* FIXME: Change this to SUPER as well. */
|
|
||||||
#define eobj_class_do(object, klass, ...) eobj_class_do_internal(object, klass, __VA_ARGS__, NULL)
|
|
||||||
#define eobj_class_parent_do(object, klass, ...) eobj_class_do_internal(object, eobj_class_parent_get(klass), __VA_ARGS__, NULL)
|
|
||||||
|
|
||||||
EAPI Eina_Bool eobj_do_internal(Eobj *obj, ...);
|
EAPI Eina_Bool eobj_do_internal(Eobj *obj, ...);
|
||||||
|
|
||||||
EAPI Eina_Bool eobj_class_do_internal(Eobj *obj, const Eobj_Class *klass, ...);
|
EAPI Eina_Bool eobj_super_do(Eobj *obj, Eobj_Op op, ...);
|
||||||
|
|
||||||
EAPI const Eobj_Class *eobj_class_get(Eobj *obj);
|
EAPI const Eobj_Class *eobj_class_get(Eobj *obj);
|
||||||
EAPI const Eobj_Class *eobj_class_parent_get(const Eobj_Class *klass);
|
EAPI const Eobj_Class *eobj_class_parent_get(const Eobj_Class *klass);
|
||||||
|
|
|
@ -208,6 +208,12 @@ dich_func_clean_all(Eobj_Class *klass)
|
||||||
|
|
||||||
/* END OF DICH */
|
/* END OF DICH */
|
||||||
|
|
||||||
|
static void
|
||||||
|
_eobj_kls_itr_init(Eobj *obj)
|
||||||
|
{
|
||||||
|
obj->kls_itr = obj->klass->mro;
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: Decide if it should be fast, and if so, add a mapping.
|
/* FIXME: Decide if it should be fast, and if so, add a mapping.
|
||||||
* Otherwise, this is very slow. But since it's only for debugging... */
|
* Otherwise, this is very slow. But since it's only for debugging... */
|
||||||
static const Eobj_Op_Description *
|
static const Eobj_Op_Description *
|
||||||
|
@ -238,7 +244,7 @@ _eobj_op_id_desc_get(Eobj_Op op)
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_eobj_op_internal(Eobj *obj, const Eobj_Class *obj_klass, Eobj_Op op, va_list *p_list)
|
_eobj_op_internal(Eobj *obj, const Eobj_Class *obj_klass, Eobj_Op op, va_list *p_list, Eina_Bool recursive)
|
||||||
{
|
{
|
||||||
const Eobj_Class *klass = obj_klass;
|
const Eobj_Class *klass = obj_klass;
|
||||||
eobj_op_func_type func;
|
eobj_op_func_type func;
|
||||||
|
@ -261,6 +267,9 @@ _eobj_op_internal(Eobj *obj, const Eobj_Class *obj_klass, Eobj_Op op, va_list *p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!recursive)
|
||||||
|
return EINA_FALSE;
|
||||||
|
|
||||||
if (!klass)
|
if (!klass)
|
||||||
{
|
{
|
||||||
klass = obj_klass;
|
klass = obj_klass;
|
||||||
|
@ -270,7 +279,7 @@ _eobj_op_internal(Eobj *obj, const Eobj_Class *obj_klass, Eobj_Op op, va_list *p
|
||||||
Eobj_Extension_Node *itr;
|
Eobj_Extension_Node *itr;
|
||||||
EINA_INLIST_FOREACH(klass->extensions, itr)
|
EINA_INLIST_FOREACH(klass->extensions, itr)
|
||||||
{
|
{
|
||||||
if (_eobj_op_internal(obj, itr->klass, op, p_list))
|
if (_eobj_op_internal(obj, itr->klass, op, p_list, recursive))
|
||||||
{
|
{
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -283,7 +292,7 @@ _eobj_op_internal(Eobj *obj, const Eobj_Class *obj_klass, Eobj_Op op, va_list *p
|
||||||
Eobj *emb_obj;
|
Eobj *emb_obj;
|
||||||
EINA_LIST_FOREACH(obj->composite_objects, itr, emb_obj)
|
EINA_LIST_FOREACH(obj->composite_objects, itr, emb_obj)
|
||||||
{
|
{
|
||||||
if (_eobj_op_internal(emb_obj, eobj_class_get(emb_obj), op, p_list))
|
if (_eobj_op_internal(emb_obj, eobj_class_get(emb_obj), op, p_list, recursive))
|
||||||
{
|
{
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -306,7 +315,7 @@ _eobj_ops_internal(Eobj *obj, const Eobj_Class *obj_klass, va_list *p_list)
|
||||||
op = va_arg(*p_list, Eobj_Op);
|
op = va_arg(*p_list, Eobj_Op);
|
||||||
while (op)
|
while (op)
|
||||||
{
|
{
|
||||||
if (!_eobj_op_internal(obj, obj_klass, op, p_list))
|
if (!_eobj_op_internal(obj, obj_klass, op, p_list, EINA_TRUE))
|
||||||
{
|
{
|
||||||
const Eobj_Op_Description *desc = _eobj_op_id_desc_get(op);
|
const Eobj_Op_Description *desc = _eobj_op_id_desc_get(op);
|
||||||
const char *_id_name = (desc) ? desc->name : NULL;
|
const char *_id_name = (desc) ? desc->name : NULL;
|
||||||
|
@ -330,18 +339,30 @@ eobj_do_internal(Eobj *obj, ...)
|
||||||
Eina_Bool ret;
|
Eina_Bool ret;
|
||||||
va_list p_list;
|
va_list p_list;
|
||||||
va_start(p_list, obj);
|
va_start(p_list, obj);
|
||||||
|
_eobj_kls_itr_init(obj);
|
||||||
ret = _eobj_ops_internal(obj, eobj_class_get(obj), &p_list);
|
ret = _eobj_ops_internal(obj, eobj_class_get(obj), &p_list);
|
||||||
va_end(p_list);
|
va_end(p_list);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
eobj_class_do_internal(Eobj *obj, const Eobj_Class *klass, ...)
|
eobj_super_do(Eobj *obj, Eobj_Op op, ...)
|
||||||
{
|
{
|
||||||
Eina_Bool ret;
|
const Eobj_Class *obj_klass = *++(obj->kls_itr);
|
||||||
|
Eina_Bool ret = EINA_TRUE;
|
||||||
va_list p_list;
|
va_list p_list;
|
||||||
va_start(p_list, klass);
|
va_start(p_list, op);
|
||||||
ret = _eobj_ops_internal(obj, klass, &p_list);
|
if (!_eobj_op_internal(obj, obj_klass, op, &p_list, EINA_FALSE))
|
||||||
|
{
|
||||||
|
const Eobj_Op_Description *desc = _eobj_op_id_desc_get(op);
|
||||||
|
const char *_id_name = (desc) ? desc->name : NULL;
|
||||||
|
const Eobj_Class *op_klass = OP_CLASS_GET(op);
|
||||||
|
const char *_dom_name = (op_klass) ? op_klass->desc->name : NULL;
|
||||||
|
ERR("Can't find func for op %x ('%s' of domain '%s') for class '%s'. Aborting.",
|
||||||
|
op, _id_name, _dom_name,
|
||||||
|
obj_klass->desc->name);
|
||||||
|
ret = EINA_FALSE;
|
||||||
|
}
|
||||||
va_end(p_list);
|
va_end(p_list);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -606,12 +627,6 @@ _eobj_class_count_parents(const Eobj_Class *klass)
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_eobj_kls_itr_init(Eobj *obj)
|
|
||||||
{
|
|
||||||
obj->kls_itr = obj->klass->mro;
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI Eobj *
|
EAPI Eobj *
|
||||||
eobj_add(const Eobj_Class *klass, Eobj *parent)
|
eobj_add(const Eobj_Class *klass, Eobj *parent)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue