jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=1c739cada9a82d9cc4cdb67a38114f8e1cb8591e

commit 1c739cada9a82d9cc4cdb67a38114f8e1cb8591e
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Wed May 11 20:26:07 2016 +0900

    evas_events: Propagate more eo pointer events
    
    This covers mouse in,out,cancel. Axis (joystick) is still
    todo.
---
 src/lib/ecore_evas/ecore_evas.c   | 78 +++++++++++++++++++++++++--------------
 src/lib/evas/canvas/evas_events.c | 20 +++++++---
 2 files changed, 66 insertions(+), 32 deletions(-)

diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index ce17903..7f25117 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -4291,18 +4291,6 @@ ecore_evas_psl1ght_new(const char* name, int w, int h)
  *  3. let evas send legacy & eo events to the objects
  */
 
-static Eina_Bool
-_direct_key_down_cb(Ecore_Evas *ee EINA_UNUSED, const Ecore_Event_Key *info 
EINA_UNUSED)
-{
-   return EINA_FALSE;
-}
-
-static Eina_Bool
-_direct_key_up_cb(Ecore_Evas *ee EINA_UNUSED, const Ecore_Event_Key *info 
EINA_UNUSED)
-{
-   return EINA_FALSE;
-}
-
 #define EVENT_XY_SET(EV, X, Y, MX, MY, FX, FY) do { \
    EV->cur.x = (X) - (FX); EV->cur.xsub = (MX) - (FX); \
    EV->cur.y = (Y) - (FY); EV->cur.ysub = (MY) - (FY); \
@@ -4379,10 +4367,9 @@ _direct_mouse_up_cb(Ecore_Evas *ee, const 
Ecore_Event_Mouse_Button *info)
 }
 
 static Eina_Bool
-_direct_mouse_cancel_cb(Ecore_Evas *ee EINA_UNUSED, const 
Ecore_Event_Mouse_Button *info EINA_UNUSED)
+_direct_mouse_cancel_cb(Ecore_Evas *ee, const Ecore_Event_Mouse_Button *info)
 {
-   /* TODO: Add cancel event type. */
-   return EINA_FALSE;
+   return _direct_mouse_updown(ee, info, EFL_POINTER_ACTION_CANCEL);
 }
 
 static Eina_Bool
@@ -4457,16 +4444,53 @@ _direct_mouse_wheel_cb(Ecore_Evas *ee, const 
Ecore_Event_Mouse_Wheel *info)
 }
 
 static Eina_Bool
-_direct_mouse_in_cb(Ecore_Evas *ee EINA_UNUSED, const Ecore_Event_Mouse_IO 
*info EINA_UNUSED)
+_direct_mouse_inout(Ecore_Evas *ee, const Ecore_Event_Mouse_IO *info, 
Efl_Pointer_Action action)
+{
+   Efl_Pointer_Event_Data *ev;
+   Efl_Pointer_Event *evt;
+   Evas *e = ee->evas;
+   Eina_Bool processed;
+
+   /* Unused information:
+    * event_window
+    * modifiers
+    */
+
+   evt = efl_pointer_event_instance_get(EFL_POINTER_EVENT_CLASS, e, (void **) 
&ev);
+   if (!evt) return EINA_FALSE;
+
+   ev->action = action;
+   ev->timestamp = info->timestamp;
+   _pointer_position_set(ev, ee, info->x, info->y, info->x, info->y);
+
+   eo_event_callback_call(e, EVAS_CANVAS_EVENT_POINTER, evt);
+   processed = ev->evas_done;
+   eo_del(evt);
+
+   return processed;
+}
+
+static Eina_Bool
+_direct_mouse_in_cb(Ecore_Evas *ee, const Ecore_Event_Mouse_IO *info)
+{
+   return _direct_mouse_inout(ee, info, EFL_POINTER_ACTION_IN);
+}
+
+static Eina_Bool
+_direct_mouse_out_cb(Ecore_Evas *ee, const Ecore_Event_Mouse_IO *info)
+{
+   return _direct_mouse_inout(ee, info, EFL_POINTER_ACTION_OUT);
+}
+
+static Eina_Bool
+_direct_key_down_cb(Ecore_Evas *ee EINA_UNUSED, const Ecore_Event_Key *info 
EINA_UNUSED)
 {
-   /* TODO: Add mouse in event type. */
    return EINA_FALSE;
 }
 
 static Eina_Bool
-_direct_mouse_out_cb(Ecore_Evas *ee EINA_UNUSED, const Ecore_Event_Mouse_IO 
*info EINA_UNUSED)
+_direct_key_up_cb(Ecore_Evas *ee EINA_UNUSED, const Ecore_Event_Key *info 
EINA_UNUSED)
 {
-   /* TODO: Add mouse out event type. */
    return EINA_FALSE;
 }
 
@@ -4482,24 +4506,24 @@ _ecore_evas_input_direct_cb(void *window, int type, 
const void *info)
 {
    Ecore_Evas *ee = window;
 
-   if (type == ECORE_EVENT_KEY_DOWN)
-     return _direct_key_down_cb(ee, (const Ecore_Event_Key *) info);
-   else if (type == ECORE_EVENT_KEY_UP)
-     return _direct_key_up_cb(ee, (const Ecore_Event_Key *) info);
+   if (type == ECORE_EVENT_MOUSE_MOVE)
+     return _direct_mouse_move_cb(ee, (const Ecore_Event_Mouse_Move *) info);
    else if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN)
      return _direct_mouse_down_cb(ee, (const Ecore_Event_Mouse_Button *) info);
    else if (type == ECORE_EVENT_MOUSE_BUTTON_UP)
      return _direct_mouse_up_cb(ee, (const Ecore_Event_Mouse_Button *) info);
-   else if (type == ECORE_EVENT_MOUSE_BUTTON_CANCEL)
-     return _direct_mouse_cancel_cb(ee, (const Ecore_Event_Mouse_Button *) 
info);
-   else if (type == ECORE_EVENT_MOUSE_MOVE)
-     return _direct_mouse_move_cb(ee, (const Ecore_Event_Mouse_Move *) info);
    else if (type == ECORE_EVENT_MOUSE_WHEEL)
      return _direct_mouse_wheel_cb(ee, (const Ecore_Event_Mouse_Wheel *) info);
    else if (type == ECORE_EVENT_MOUSE_IN)
      return _direct_mouse_in_cb(ee, (const Ecore_Event_Mouse_IO *) info);
    else if (type == ECORE_EVENT_MOUSE_OUT)
      return _direct_mouse_out_cb(ee, (const Ecore_Event_Mouse_IO *) info);
+   else if (type == ECORE_EVENT_KEY_DOWN)
+     return _direct_key_down_cb(ee, (const Ecore_Event_Key *) info);
+   else if (type == ECORE_EVENT_MOUSE_BUTTON_CANCEL)
+     return _direct_mouse_cancel_cb(ee, (const Ecore_Event_Mouse_Button *) 
info);
+   else if (type == ECORE_EVENT_KEY_UP)
+     return _direct_key_up_cb(ee, (const Ecore_Event_Key *) info);
    else if (type == ECORE_EVENT_AXIS_UPDATE)
      return _direct_axis_update_cb(ee, (const Ecore_Event_Axis_Update *) info);
    else
diff --git a/src/lib/evas/canvas/evas_events.c 
b/src/lib/evas/canvas/evas_events.c
index 7095836..4d95a8b 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -3052,6 +3052,7 @@ _evas_canvas_event_pointer_cb(void *data, const Eo_Event 
*event)
     * - implement legacy over eo instead of this
     */
 
+   ev->evas_done = EINA_TRUE;
    switch (ev->action)
      {
       case EFL_POINTER_ACTION_MOVE:
@@ -3068,7 +3069,6 @@ _evas_canvas_event_pointer_cb(void *data, const Eo_Event 
*event)
                                                     ev->cur.xsub, ev->cur.ysub,
                                                     ev->timestamp, ev->data);
           }
-        ev->evas_done = EINA_TRUE;
         break;
 
       case EFL_POINTER_ACTION_DOWN:
@@ -3084,7 +3084,6 @@ _evas_canvas_event_pointer_cb(void *data, const Eo_Event 
*event)
                                         ev->cur.xsub, ev->cur.ysub, 
ev->button_flags,
                                         ev->timestamp, ev->data);
           }
-        ev->evas_done = EINA_TRUE;
         break;
 
       case EFL_POINTER_ACTION_UP:
@@ -3100,18 +3099,29 @@ _evas_canvas_event_pointer_cb(void *data, const 
Eo_Event *event)
                                       ev->cur.xsub, ev->cur.ysub, 
ev->button_flags,
                                       ev->timestamp, ev->data);
           }
-        ev->evas_done = EINA_TRUE;
+        break;
+
+      case EFL_POINTER_ACTION_CANCEL:
+        evas_event_feed_mouse_cancel(eo_e, ev->timestamp, ev->data);
+        break;
+
+      case EFL_POINTER_ACTION_IN:
+        evas_event_feed_mouse_in(eo_e, ev->timestamp, ev->data);
+        break;
+
+      case EFL_POINTER_ACTION_OUT:
+        evas_event_feed_mouse_out(eo_e, ev->timestamp, ev->data);
         break;
 
       case EFL_POINTER_ACTION_WHEEL:
         evas_event_feed_mouse_wheel(eo_e,
                                     (ev->wheel.dir == EFL_ORIENT_HORIZONTAL) ? 
1 : 0,
                                     ev->wheel.z, ev->timestamp, ev->data);
-        ev->evas_done = EINA_TRUE;
         break;
 
       default:
-        ERR("not implemented yet");
+        ERR("unsupported event type: %d", ev->action);
+        ev->evas_done = EINA_FALSE;
         break;
      }
 

-- 


Reply via email to