forked from enlightenment/efl
eo2: eo2_add accepts non-defauld constructors
This commit is contained in:
parent
2d5baec80c
commit
42ad23c5c8
|
@ -822,7 +822,7 @@ EAPI void eo_error_set_internal(const Eo *obj, const char *file, int line);
|
|||
#define eo2_add(klass, parent, ...) \
|
||||
({ \
|
||||
const Eo_Class *_tmp_klass = klass; \
|
||||
eo_add_internal(__FILE__, __LINE__, _tmp_klass, parent, ## __VA_ARGS__, EO_NOOP); \
|
||||
eo_add_internal(__FILE__, __LINE__, _tmp_klass, parent, eo2_constructor, ## __VA_ARGS__, EO_NOOP); \
|
||||
})
|
||||
|
||||
/**
|
||||
|
|
|
@ -1405,10 +1405,24 @@ eo_add_internal(const char *file, int line, const Eo_Class *klass_id, Eo *parent
|
|||
|
||||
_eo_parent_internal_set(obj, parent_id);
|
||||
|
||||
if (klass->desc->version == EO2_VERSION)
|
||||
eo2_do((Eo *)obj_id, eo2_constructor());
|
||||
|
||||
/* Run the relevant do stuff. */
|
||||
if (klass->desc->version == EO2_VERSION)
|
||||
{
|
||||
eo2_constructor_type constr;
|
||||
va_list p_list;
|
||||
if(eo2_do_start((Eo *)obj_id, EINA_FALSE))
|
||||
{
|
||||
va_start(p_list, parent_id);
|
||||
while ((constr = va_arg(p_list, eo2_constructor_type)))
|
||||
constr();
|
||||
va_end(p_list);
|
||||
eo2_do_end(NULL);
|
||||
do_err = EINA_FALSE;
|
||||
}
|
||||
else
|
||||
do_err = EINA_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
va_list p_list;
|
||||
va_start(p_list, parent_id);
|
||||
|
|
|
@ -61,6 +61,7 @@ typedef struct _Eo_Class _Eo_Class;
|
|||
typedef struct _Eo_Object _Eo_Object;
|
||||
typedef struct _Eo_Base Eo_Base;
|
||||
typedef struct _Eo_Internal _Eo;
|
||||
typedef void (*eo2_constructor_type)(void);
|
||||
|
||||
/* Retrieves the pointer to the object from the id */
|
||||
static inline _Eo_Object *_eo_obj_pointer_get(const Eo_Id obj_id);
|
||||
|
|
Loading…
Reference in New Issue