efl/src/lib/ecore/ecore_event_message.c

82 lines
2.1 KiB
C

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <Ecore.h>
#include "ecore_private.h"
#define MY_CLASS ECORE_EVENT_MESSAGE_CLASS
//////////////////////////////////////////////////////////////////////////
typedef struct _Ecore_Event_Message_Data Ecore_Event_Message_Data;
struct _Ecore_Event_Message_Data
{
int type;
void *ev;
Ecore_End_Cb free_func;
void *data;
};
//////////////////////////////////////////////////////////////////////////
EOLIAN static void
_ecore_event_message_data_set(Eo *obj EINA_UNUSED, Ecore_Event_Message_Data *pd, int type, void *data, void *free_func, void *free_data)
{
pd->type = type;
pd->ev = data;
pd->free_func = free_func;
pd->data = free_data;
}
EOLIAN static void
_ecore_event_message_data_get(const Eo *obj EINA_UNUSED, Ecore_Event_Message_Data *pd, int *type, void **data, void **free_func, void **free_data)
{
if (type) *type = pd->type;
if (data) *data = pd->ev;
if (free_func) *free_func = pd->free_func;
if (free_data) *free_data = pd->data;
}
EOLIAN static void
_ecore_event_message_data_steal(Eo *obj EINA_UNUSED, Ecore_Event_Message_Data *pd, int *type, void **data, void **free_func, void **free_data)
{
if (type) *type = pd->type;
if (data) *data = pd->ev;
if (free_func) *free_func = pd->free_func;
if (free_data) *free_data = pd->data;
pd->type = -1;
pd->ev = NULL;
pd->free_func = NULL;
pd->data = NULL;
}
EOLIAN static Efl_Object *
_ecore_event_message_efl_object_constructor(Eo *obj, Ecore_Event_Message_Data *pd EINA_UNUSED)
{
obj = efl_constructor(efl_super(obj, MY_CLASS));
pd->type = -1;
return obj;
}
EOLIAN static void
_ecore_event_message_efl_object_destructor(Eo *obj EINA_UNUSED, Ecore_Event_Message_Data *pd EINA_UNUSED)
{
if (pd->ev)
{
Ecore_End_Cb fn_free = pd->free_func;
void *ev = pd->ev;
pd->ev = NULL;
if (fn_free) fn_free(pd->data, ev);
else free(ev);
}
efl_destructor(efl_super(obj, MY_CLASS));
}
//////////////////////////////////////////////////////////////////////////
#include "ecore_event_message.eo.c"