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

-- 


Reply via email to