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 <derek.foreman.samsung@gmail.com>
This commit is contained in:
Derek Foreman 2019-01-24 12:57:19 -06:00
parent 41a9e1c873
commit d47688ba27
3 changed files with 23 additions and 2 deletions

View File

@ -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);

View File

@ -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"

View File

@ -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);