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