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, ...) \
|
#define eo2_add(klass, parent, ...) \
|
||||||
({ \
|
({ \
|
||||||
const Eo_Class *_tmp_klass = klass; \
|
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);
|
_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. */
|
/* 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_list p_list;
|
||||||
va_start(p_list, parent_id);
|
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_Object _Eo_Object;
|
||||||
typedef struct _Eo_Base Eo_Base;
|
typedef struct _Eo_Base Eo_Base;
|
||||||
typedef struct _Eo_Internal _Eo;
|
typedef struct _Eo_Internal _Eo;
|
||||||
|
typedef void (*eo2_constructor_type)(void);
|
||||||
|
|
||||||
/* Retrieves the pointer to the object from the id */
|
/* Retrieves the pointer to the object from the id */
|
||||||
static inline _Eo_Object *_eo_obj_pointer_get(const Eo_Id obj_id);
|
static inline _Eo_Object *_eo_obj_pointer_get(const Eo_Id obj_id);
|
||||||
|
|
Loading…
Reference in New Issue