q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=b780cf2af299ce17be260486bb7ab64badddbaec
commit b780cf2af299ce17be260486bb7ab64badddbaec Author: Daniel Kolesa <d.kol...@osg.samsung.com> Date: Thu Apr 20 18:24:38 2017 +0200 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. --- src/lib/elementary/elc_fileselector.c | 3 + src/lib/elementary/elm_fileselector.eo | 1 - src/lib/eo/Eo.h | 86 +++++++++++++++++++++++++++++ src/lib/eo/efl_object.eo | 78 -------------------------- src/lib/eo/eo_base_class.c | 37 +++++++++++++ src/lib/evas/canvas/efl_canvas_object.eo | 2 - src/lib/evas/canvas/evas_canvas3d_object.c | 4 ++ src/lib/evas/canvas/evas_canvas3d_object.eo | 2 - src/lib/evas/canvas/evas_object_main.c | 4 ++ 9 files changed, 134 insertions(+), 83 deletions(-) diff --git a/src/lib/elementary/elc_fileselector.c b/src/lib/elementary/elc_fileselector.c index bcafeb5..74e84a3 100644 --- a/src/lib/elementary/elc_fileselector.c +++ b/src/lib/elementary/elc_fileselector.c @@ -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" diff --git a/src/lib/elementary/elm_fileselector.eo b/src/lib/elementary/elm_fileselector.eo index 426c85d..befb014 100644 --- a/src/lib/elementary/elm_fileselector.eo +++ b/src/lib/elementary/elm_fileselector.eo @@ -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; diff --git a/src/lib/eo/Eo.h b/src/lib/eo/Eo.h index 178308a..fe67aa0 100644 --- a/src/lib/eo/Eo.h +++ b/src/lib/eo/Eo.h @@ -234,6 +234,92 @@ struct _Efl_Event { }; /** + * @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. * @{ */ diff --git a/src/lib/eo/efl_object.eo b/src/lib/eo/efl_object.eo index 1d47eba..c55ed76 100644 --- a/src/lib/eo/efl_object.eo +++ b/src/lib/eo/efl_object.eo @@ -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. diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c index f8a12c9..fe3dc28 100644 --- a/src/lib/eo/eo_base_class.c +++ b/src/lib/eo/eo_base_class.c @@ -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" diff --git a/src/lib/evas/canvas/efl_canvas_object.eo b/src/lib/evas/canvas/efl_canvas_object.eo index b152657..85557a2 100644 --- a/src/lib/evas/canvas/efl_canvas_object.eo +++ b/src/lib/evas/canvas/efl_canvas_object.eo @@ -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; } diff --git a/src/lib/evas/canvas/evas_canvas3d_object.c b/src/lib/evas/canvas/evas_canvas3d_object.c index 9dde9f8..2e36a9f 100644 --- a/src/lib/evas/canvas/evas_canvas3d_object.c +++ b/src/lib/evas/canvas/evas_canvas3d_object.c @@ -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" diff --git a/src/lib/evas/canvas/evas_canvas3d_object.eo b/src/lib/evas/canvas/evas_canvas3d_object.eo index abec916..681e282 100644 --- a/src/lib/evas/canvas/evas_canvas3d_object.eo +++ b/src/lib/evas/canvas/evas_canvas3d_object.eo @@ -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 { diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index 6ec47de..9501fb2 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -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" --