On 21 April 2017 at 11:12, Gustavo Sverzut Barbieri <barbi...@gmail.com> wrote:
> Em qui, 20 de abr de 2017 às 22:14, Jean-Philippe André <j...@videolan.org > > > escreveu: > > > Hi Daniel (q66), > > > > On 21 April 2017 at 01:26, Daniel Kolesa <dan...@octaforge.org> wrote: > > > > > 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. > > > > > > > Is this kind of trick a solution for internal only APIs? > > As you know I've marked a few APIs as beta and/or protected when really I > > wanted them to be just internal functions (that can be overriden, so not > > just C functions). > > > > If so, the alternative was to have either an @internal tag which > generates > > apis in another header, or have separated eolian files that expand > existing > > classes, etc... Quite ugly as well :) > > > His goal is to remove voidptr from Eo. These APIs that needs them will have > manual bindings, like event callbacks, data get, etc. > > Makes total sense to me. > Absolutely. Just wondering if the technique can be used for my needs :) I think it would work just fine as I want no bindings and no visibility in public headers. > > > > > TIA, > > > > > > > --- > > > 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" > > > > > > -- > > > > > > -- > > > Jean-Philippe André > > > > > > > > > > ------------------------------------------------------------ > ------------------ > > Check out the vibrant tech community on one of the world's most > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > > _______________________________________________ > > enlightenment-devel mailing list > > enlightenment-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > > > -- > Gustavo Sverzut Barbieri > -------------------------------------- > Mobile: +55 (16) 99354-9890 > ------------------------------------------------------------ > ------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- Jean-Philippe André ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel