bdilly pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=23278816b6b75e2ce0c9e0d2f07bfaae8ad230f1
commit 23278816b6b75e2ce0c9e0d2f07bfaae8ad230f1 Author: Guilherme Iscaro <[email protected]> Date: Tue Dec 6 19:27:15 2016 -0200 Efl.Canvas.Object: Override efl_event_callback_[legacy]_call. In order to properly block events from a given seat, Efl.Canvas.Object must override the efl_event_callback_[legacy]_call to check if the event is allowed or not. --- src/lib/evas/canvas/efl_canvas_object.eo | 2 ++ src/lib/evas/canvas/evas_object_main.c | 49 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/lib/evas/canvas/efl_canvas_object.eo b/src/lib/evas/canvas/efl_canvas_object.eo index c2f6550..24a706b 100644 --- a/src/lib/evas/canvas/efl_canvas_object.eo +++ b/src/lib/evas/canvas/efl_canvas_object.eo @@ -624,6 +624,8 @@ 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.set; Efl.Gfx.visible.get; diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index 050356d..07518b6 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -933,6 +933,55 @@ _efl_canvas_object_efl_input_interface_seat_event_filter_set(Eo *eo_obj, } } +static Eina_Bool +_is_event_blocked(Eo *eo_obj, const Efl_Event_Description *desc, + void *event_info) +{ + if ((desc == EFL_EVENT_FOCUS_IN) || + (desc == EFL_EVENT_FOCUS_OUT) || + (desc == EFL_EVENT_KEY_DOWN) || + (desc == EFL_EVENT_KEY_UP) || + (desc == EFL_EVENT_HOLD) || + (desc == EFL_EVENT_POINTER_IN) || + (desc == EFL_EVENT_POINTER_OUT) || + (desc == EFL_EVENT_POINTER_DOWN) || + (desc == EFL_EVENT_POINTER_UP) || + (desc == EFL_EVENT_POINTER_MOVE) || + (desc == EFL_EVENT_POINTER_WHEEL) || + (desc == EFL_EVENT_POINTER_CANCEL) || + (desc == EFL_EVENT_POINTER_AXIS) || + (desc == EFL_EVENT_FINGER_MOVE) || + (desc == EFL_EVENT_FINGER_DOWN) || + (desc == EFL_EVENT_FINGER_UP)) + { + Efl_Input_Device *seat = efl_input_device_seat_get(efl_input_device_get(event_info)); + return !efl_input_seat_event_filter_get(eo_obj, seat); + } + return EINA_FALSE; +} + +EOLIAN static Eina_Bool +_efl_canvas_object_efl_object_event_callback_call(Eo *eo_obj, + Evas_Object_Protected_Data *obj EINA_UNUSED, + const Efl_Event_Description *desc, + void *event_info) +{ + if (_is_event_blocked(eo_obj, desc, event_info)) return EINA_FALSE; + return efl_event_callback_call(efl_super(eo_obj, MY_CLASS), + desc, event_info); +} + +EOLIAN static Eina_Bool +_efl_canvas_object_efl_object_event_callback_legacy_call(Eo *eo_obj, + Evas_Object_Protected_Data *obj EINA_UNUSED, + const Efl_Event_Description *desc, + void *event_info) +{ + if (_is_event_blocked(eo_obj, desc, event_info)) return EINA_FALSE; + return efl_event_callback_legacy_call(efl_super(eo_obj, MY_CLASS), + desc, event_info); +} + EOLIAN static void _efl_canvas_object_efl_object_destructor(Eo *eo_obj, Evas_Object_Protected_Data *obj) { --
