derekf pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=d47688ba27c8334b01b2553829be7bc1e7b2a82a
commit d47688ba27c8334b01b2553829be7bc1e7b2a82a Author: Derek Foreman <[email protected]> Date: Thu Jan 24 12:57:19 2019 -0600 gesture_manager: Filter events we add hooks for Gesture manager doesn't care about focus manager events, animation events, and various other things it's currently hooking. We can save a lot of pointer indirection nonsense by only paying attention to events it can actually do something with. Differential Revision: https://phab.enlightenment.org/D7764 Signed-off-by: Derek Foreman <[email protected]> --- src/lib/evas/canvas/evas_callbacks.c | 6 ++++-- src/lib/evas/gesture/efl_canvas_gesture_manager.c | 18 ++++++++++++++++++ src/lib/evas/include/evas_private.h | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/evas_callbacks.c b/src/lib/evas/canvas/evas_callbacks.c index 37e62976ff..2cd1f51fd9 100644 --- a/src/lib/evas/canvas/evas_callbacks.c +++ b/src/lib/evas/canvas/evas_callbacks.c @@ -797,7 +797,8 @@ _check_event_catcher_add(void *data, const Efl_Event *event) for (i = 0; array[i].desc != NULL; i++) { - if (obj->layer->evas->gesture_manager) + if (obj->layer->evas->gesture_manager && + _efl_canvas_gesture_manager_watches(array[i].desc)) { if (!gd) gd = _efl_canvas_gesture_manager_private_data_get(obj->layer->evas->gesture_manager); @@ -833,7 +834,8 @@ _check_event_catcher_del(void *data, const Efl_Event *event) for (i = 0; array[i].desc != NULL; i++) { - if (obj->layer->evas->gesture_manager) + if (obj->layer->evas->gesture_manager && + _efl_canvas_gesture_manager_watches(array[i].desc)) { if (!gd) gd = _efl_canvas_gesture_manager_private_data_get(obj->layer->evas->gesture_manager); diff --git a/src/lib/evas/gesture/efl_canvas_gesture_manager.c b/src/lib/evas/gesture/efl_canvas_gesture_manager.c index cce00dfe19..b174e49b7b 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_manager.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_manager.c @@ -352,5 +352,23 @@ _cleanup_cached_gestures(Efl_Canvas_Gesture_Manager_Data *pd, } } +Eina_Bool +_efl_canvas_gesture_manager_watches(const Efl_Event_Description *ev) +{ + /* These are a subset of _elm_win_evas_feed_fake_callbacks + * in efl_ui_win.c */ + if ((ev == EFL_EVENT_POINTER_MOVE) || + (ev == EFL_EVENT_POINTER_DOWN) || + (ev == EFL_EVENT_POINTER_UP) || + (ev == EFL_EVENT_POINTER_IN) || + (ev == EFL_EVENT_POINTER_OUT) || + (ev == EFL_EVENT_POINTER_CANCEL) || + (ev == EFL_EVENT_POINTER_WHEEL) || + (ev == EFL_EVENT_FINGER_MOVE) || + (ev == EFL_EVENT_FINGER_DOWN) || + (ev == EFL_EVENT_FINGER_UP)) + return EINA_TRUE; + return EINA_FALSE; +} #include "efl_canvas_gesture_manager.eo.c" diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 8599369ae9..0382639a01 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1900,6 +1900,7 @@ void *_efl_canvas_gesture_manager_private_data_get(Eo *obj); void _efl_canvas_gesture_manager_filter_event(Eo *gesture_manager, Eo *target, void *event); void _efl_canvas_gesture_manager_callback_del_hook(void *data, Eo *target, const Efl_Event_Description *type); void _efl_canvas_gesture_manager_callback_add_hook(void *data, Eo *target, const Efl_Event_Description *type); +Eina_Bool _efl_canvas_gesture_manager_watches(const Efl_Event_Description *ev); //evas focus functions void evas_focus_init(void); --
