From e6455d956aa6844f025a0f5da5f03da0214b7ea4 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Thu, 24 Jan 2019 12:57:19 -0600 Subject: [PATCH] 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 --- 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 37e6297..2cd1f51 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 cce00df..b174e49 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 d7218f9..011caab 100755 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1920,6 +1920,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); -- 2.7.4