eo: move unbindable event APIs to C

In a few classes, this requires some manual expansion. This should
not break anything but it's also fairly ugly; a better solution
would be appreciated, for now we do this.

Similar changes will be done to a few other Efl.Object APIs as
well at later point.
This commit is contained in:
Daniel Kolesa 2017-04-20 18:24:38 +02:00
parent da982535f6
commit b780cf2af2
9 changed files with 134 additions and 83 deletions

View File

@ -3188,4 +3188,7 @@ _elm_fileselector_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA
return &atspi_actions[0];
}
#define ELM_FILESELECTOR_EXTRA_OPS \
EFL_OBJECT_OP_FUNC(efl_event_callback_legacy_call, _elm_fileselector_efl_object_event_callback_legacy_call)
#include "elm_fileselector.eo.c"

View File

@ -35,7 +35,6 @@ class Elm.Fileselector (Elm.Layout, Elm.Interface.Fileselector,
class.constructor;
class.destructor;
Efl.Object.constructor;
Efl.Object.event_callback_legacy_call;
Efl.Canvas.Group.group_add;
Efl.Canvas.Group.group_del;
Elm.Widget.focus_next;

View File

@ -233,6 +233,92 @@ struct _Efl_Event {
void *info; /**< Extra event information passed by the event caller. */
};
/**
* @brief Add a callback for an event with a specific priority.
*
* callbacks of the same priority are called in reverse order of creation.
*
* A callback is only executed on events emitted after this call finished.
*
* @param[in] desc The description of the event to listen to
* @param[in] priority The priority of the callback
* @param[in] cb the callback to call
* @param[in] data additional data to pass to the callback
*
* @return Return @c true when the callback has been successfully added.
*/
EOAPI Eina_Bool efl_event_callback_priority_add(Eo *obj, const Efl_Event_Description *desc, Efl_Callback_Priority priority, Efl_Event_Cb cb, const void *data);
/**
* @brief Delete a callback with a specific data associated to it for an event.
*
* The callback will never be emitted again after this call, even if a event
* emission is going on.
*
* @param[in] desc The description of the event to listen to
* @param[in] func The callback to delete
* @param[in] user_data The data to compare
*
* @return Return @c true when the callback has been successfully removed.
*/
EOAPI Eina_Bool efl_event_callback_del(Eo *obj, const Efl_Event_Description *desc, Efl_Event_Cb func, const void *user_data);
/**
* @brief Add an array of callbacks created by @ref EFL_CALLBACKS_ARRAY_DEFINE
* for an event with a specific priority. The array need to be sorted with @ref
* efl_callbacks_cmp if you are not using the @ref EFL_CALLBACKS_ARRAY_DEFINE
* macro.
*
* callbacks of the same priority are called in reverse order of creation.
*
* A callback from the array is only executed on events emitted after this
* call finished.
*
* @param[in] array An #Efl_Callback_Array_Item of events to listen to
* @param[in] priority The priority of the callback
* @param[in] data Additional data to pass to the callback
*
* @return Return @c true when the callback has been successfully added.
*/
EOAPI Eina_Bool efl_event_callback_array_priority_add(Eo *obj, const Efl_Callback_Array_Item *array, Efl_Callback_Priority priority, const void *data);
/**
* @brief Del a callback array with a specific data associated to it for an
* event. The callbacks from the array will never be emitted again after this
* call, even if a event emission is going on.
*
* @param[in] array An #Efl_Callback_Array_Item of events to listen to
* @param[in] user_data The data to compare
*
* @return Return @c true when the callback has been successfully removed.
*/
EOAPI Eina_Bool efl_event_callback_array_del(Eo *obj, const Efl_Callback_Array_Item *array, const void *user_data);
/**
* @brief Call the callbacks for an event of an object.
*
* @param[in] desc The description of the event to call
* @param[in] event_info Extra event info to pass to the callbacks
*
* @return @c false if one of the callbacks aborted the call, @c true otherwise
*/
EOAPI Eina_Bool efl_event_callback_call(Eo *obj, const Efl_Event_Description *desc, void *event_info);
/**
* @brief Call the callbacks for an event of an object.
*
* Like @ref efl_event_callback_call, but also call legacy smart callbacks that
* have the same name of the given event.
*
* @param[in] desc The description of the event to call
* @param[in] event_info Extra event info to pass to the callbacks
*
* @return @c false if one of the callbacks aborted the call, @c true otherwise
*
* @since 1.19
*/
EOAPI Eina_Bool efl_event_callback_legacy_call(Eo *obj, const Efl_Event_Description *desc, void *event_info);
/**
* @addtogroup Eo_Debug_Information Eo's Debug information helper.
* @{

View File

@ -309,84 +309,6 @@ abstract Efl.Object ()
Prevents event callbacks from being called for the object.
]]
}
event_callback_priority_add {
[[Add a callback for an event with a specific priority.
callbacks of the same priority are called in reverse order of
creation.
A callback is only executed on events emitted after this call finished.
]]
return: bool; [[Return $true when the callback has been successfully added.]]
params {
@in desc: ptr(const(Efl.Event.Description)); [[The description of the event to listen to]]
@in priority: Efl.Callback_Priority; [[The priority of the callback]]
@in cb: Efl.Event_Cb; [[the callback to call]]
@in data: const(void_ptr); [[additional data to pass to the callback]]
}
}
event_callback_del {
[[Delete a callback with a specific data associated to it for an event.
The callback will never be emitted again after this call, even if a event emission is going on.
]]
return: bool; [[Return $true when the callback has been successfully removed.]]
params {
@in desc: ptr(const(Efl.Event.Description)); [[The description of the event to listen to]]
@in func: Efl.Event_Cb; [[The callback to delete]]
@in user_data: const(void_ptr); [[The data to compare]]
}
}
event_callback_array_priority_add {
[[Add an array of callbacks created by \@ref EFL_CALLBACKS_ARRAY_DEFINE for an event
with a specific priority. The array need to be sorted with \@ref efl_callbacks_cmp
if you are not using the \@ref EFL_CALLBACKS_ARRAY_DEFINE macro.
callbacks of the same priority are called in reverse order of
creation.
A callback from the array is only executed on events emitted after this call finished.
]]
return: bool; [[Return $true when the callback has been successfully added.]]
params {
@in array: ptr(const(Efl.Callback_Array_Item)); [[An #Efl_Callback_Array_Item of events to listen to]]
@in priority: Efl.Callback_Priority; [[The priority of the callback]]
@in data: const(void_ptr); [[Additional data to pass to the callback]]
}
}
event_callback_array_del {
[[Del a callback array with a specific data associated to it for an
event.
The callbacks from the array will never be emitted again after this call, even if a event emission is going on.
]]
return: bool; [[Return $true when the callback has been successfully removed.]]
params {
@in array: ptr(const(Efl.Callback_Array_Item)); [[An #Efl_Callback_Array_Item of events to listen to]]
@in user_data: const(void_ptr); [[The data to compare]]
}
}
event_callback_call {
[[Call the callbacks for an event of an object.]]
params {
@in desc: ptr(const(Efl.Event.Description)); [[The description of the event to call]]
@in event_info: void_ptr; [[Extra event info to pass to the callbacks]]
}
return: bool; [[$false if one of the callbacks aborted the call, $true otherwise]]
}
event_callback_legacy_call {
[[Call the callbacks for an event of an object.
Like @.event_callback_call, but also call legacy smart callbacks
that have the same name of the given event.
@since 1.19
]]
params {
@in desc: ptr(const(Efl.Event.Description)); [[The description of the event to call]]
@in event_info: void_ptr; [[Extra event info to pass to the callbacks]]
}
return: bool; [[$false if one of the callbacks aborted the call, $true otherwise]]
}
event_callback_stop {
[[Stop the current callback call.

View File

@ -1219,6 +1219,12 @@ err:
return EINA_FALSE;
}
EOAPI EFL_FUNC_BODYV(efl_event_callback_priority_add,
Eina_Bool, 0, EFL_FUNC_CALL(desc, priority, cb, data),
const Efl_Event_Description *desc,
Efl_Callback_Priority priority,
Efl_Event_Cb cb, const void *data);
static void
_efl_object_event_callback_clean(Eo *obj, Efl_Object_Data *pd,
const Efl_Callback_Array_Item *array,
@ -1262,6 +1268,11 @@ _efl_object_event_callback_del(Eo *obj, Efl_Object_Data *pd,
return EINA_FALSE;
}
EOAPI EFL_FUNC_BODYV(efl_event_callback_del,
Eina_Bool, 0, EFL_FUNC_CALL(desc, func, user_data),
const Efl_Event_Description *desc,
Efl_Event_Cb func, const void *user_data);
EOLIAN static Eina_Bool
_efl_object_event_callback_array_priority_add(Eo *obj, Efl_Object_Data *pd,
const Efl_Callback_Array_Item *array,
@ -1314,6 +1325,11 @@ err:
return EINA_FALSE;
}
EOAPI EFL_FUNC_BODYV(efl_event_callback_array_priority_add,
Eina_Bool, 0, EFL_FUNC_CALL(array, priority, data),
const Efl_Callback_Array_Item *array,
Efl_Callback_Priority priority, const void *data);
EOLIAN static Eina_Bool
_efl_object_event_callback_array_del(Eo *obj, Efl_Object_Data *pd,
const Efl_Callback_Array_Item *array,
@ -1339,6 +1355,11 @@ _efl_object_event_callback_array_del(Eo *obj, Efl_Object_Data *pd,
return EINA_FALSE;
}
EOAPI EFL_FUNC_BODYV(efl_event_callback_array_del,
Eina_Bool, 0, EFL_FUNC_CALL(array, user_data),
const Efl_Callback_Array_Item *array,
const void *user_data);
static Eina_Bool
_cb_desc_match(const Efl_Event_Description *a, const Efl_Event_Description *b, Eina_Bool legacy_compare)
{
@ -1506,6 +1527,10 @@ _efl_object_event_callback_call(Eo *obj_id, Efl_Object_Data *pd,
return _event_callback_call(obj_id, pd, desc, event_info, EINA_FALSE);
}
EOAPI EFL_FUNC_BODYV(efl_event_callback_call,
Eina_Bool, 0, EFL_FUNC_CALL(desc, event_info),
const Efl_Event_Description *desc, void *event_info);
EOLIAN static Eina_Bool
_efl_object_event_callback_legacy_call(Eo *obj_id, Efl_Object_Data *pd,
const Efl_Event_Description *desc,
@ -1514,6 +1539,10 @@ _efl_object_event_callback_legacy_call(Eo *obj_id, Efl_Object_Data *pd,
return _event_callback_call(obj_id, pd, desc, event_info, EINA_TRUE);
}
EOAPI EFL_FUNC_BODYV(efl_event_callback_legacy_call,
Eina_Bool, 0, EFL_FUNC_CALL(desc, event_info),
const Efl_Event_Description *desc, void *event_info);
EOLIAN static void
_efl_object_event_callback_stop(Eo *obj EINA_UNUSED, Efl_Object_Data *pd)
{
@ -1933,4 +1962,12 @@ _efl_object_future_link(Eo *obj EINA_UNUSED, Efl_Object_Data *pd, Efl_Future *li
return !!efl_future_then(link, _efl_object_future_link_tracking_end, _efl_object_future_link_tracking_end, NULL, obj);
}
#define EFL_OBJECT_EXTRA_OPS \
EFL_OBJECT_OP_FUNC(efl_event_callback_priority_add, _efl_object_event_callback_priority_add), \
EFL_OBJECT_OP_FUNC(efl_event_callback_del, _efl_object_event_callback_del), \
EFL_OBJECT_OP_FUNC(efl_event_callback_array_priority_add, _efl_object_event_callback_array_priority_add), \
EFL_OBJECT_OP_FUNC(efl_event_callback_array_del, _efl_object_event_callback_array_del), \
EFL_OBJECT_OP_FUNC(efl_event_callback_call, _efl_object_event_callback_call), \
EFL_OBJECT_OP_FUNC(efl_event_callback_legacy_call, _efl_object_event_callback_legacy_call)
#include "efl_object.eo.c"

View File

@ -638,8 +638,6 @@ abstract Efl.Canvas.Object (Efl.Object, Efl.Gfx, Efl.Gfx.Stack, Efl.Animator,
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Object.dbg_info_get;
Efl.Object.event_callback_legacy_call;
Efl.Object.event_callback_call;
Efl.Object.provider_find;
Efl.Gfx.visible { get; set; }
Efl.Gfx.color { get; set; }

View File

@ -94,4 +94,8 @@ _evas_canvas3d_object_efl_object_event_callback_del(Eo *obj, Evas_Canvas3D_Objec
return r;
}
#define EVAS_CANVAS3D_OBJECT_EXTRA_OPS \
EFL_OBJECT_OP_FUNC(efl_event_callback_priority_add, _evas_canvas3d_object_efl_object_event_callback_priority_add), \
EFL_OBJECT_OP_FUNC(efl_event_callback_del, _evas_canvas3d_object_efl_object_event_callback_del)
#include "canvas/evas_canvas3d_object.eo.c"

View File

@ -67,8 +67,6 @@ class Evas.Canvas3D.Object (Efl.Object)
implements {
Efl.Object.constructor;
Efl.Object.event_callback_priority_add;
Efl.Object.event_callback_del;
Efl.Object.provider_find;
}
events {

View File

@ -2565,4 +2565,8 @@ evas_object_size_hint_display_mode_get(const Evas_Object *obj)
return efl_gfx_size_hint_display_mode_get(obj);
}
#define EFL_CANVAS_OBJECT_EXTRA_OPS \
EFL_OBJECT_OP_FUNC(efl_event_callback_legacy_call, _efl_canvas_object_efl_object_event_callback_legacy_call), \
EFL_OBJECT_OP_FUNC(efl_event_callback_call, _efl_canvas_object_efl_object_event_callback_call)
#include "canvas/efl_canvas_object.eo.c"