Evas events: Forward more pointer events

This continues the work started in the previous commit:
forward full event info (Efl_Pointer_Event) from evas to
the upper layers.

This also includes more support for IN and OUT.
This commit is contained in:
Jean-Philippe Andre 2016-05-27 16:21:13 +09:00
parent 37d894abb1
commit 7658ed7ae3
4 changed files with 288 additions and 117 deletions

View File

@ -375,6 +375,7 @@ struct _Evas_Event_Mouse_Down /** Mouse button press event */
Evas_Event_Flags event_flags; Evas_Event_Flags event_flags;
Evas_Device *dev; Evas_Device *dev;
Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */ Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
}; };
struct _Evas_Event_Mouse_Up /** Mouse button release event */ struct _Evas_Event_Mouse_Up /** Mouse button release event */
@ -393,6 +394,7 @@ struct _Evas_Event_Mouse_Up /** Mouse button release event */
Evas_Event_Flags event_flags; Evas_Event_Flags event_flags;
Evas_Device *dev; Evas_Device *dev;
Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */ Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
}; };
struct _Evas_Event_Mouse_In /** Mouse enter event */ struct _Evas_Event_Mouse_In /** Mouse enter event */
@ -409,6 +411,7 @@ struct _Evas_Event_Mouse_In /** Mouse enter event */
Evas_Event_Flags event_flags; Evas_Event_Flags event_flags;
Evas_Device *dev; Evas_Device *dev;
Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */ Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
}; };
struct _Evas_Event_Mouse_Out /** Mouse leave event */ struct _Evas_Event_Mouse_Out /** Mouse leave event */
@ -425,6 +428,7 @@ struct _Evas_Event_Mouse_Out /** Mouse leave event */
Evas_Event_Flags event_flags; Evas_Event_Flags event_flags;
Evas_Device *dev; Evas_Device *dev;
Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */ Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
}; };
struct _Evas_Event_Mouse_Move /** Mouse move event */ struct _Evas_Event_Mouse_Move /** Mouse move event */
@ -441,7 +445,7 @@ struct _Evas_Event_Mouse_Move /** Mouse move event */
Evas_Event_Flags event_flags; Evas_Event_Flags event_flags;
Evas_Device *dev; Evas_Device *dev;
Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */ Evas_Object *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */
void *reserved; /* internal use only */ void *reserved; /**< Reserved field for internal use only. @since 1.18 */
}; };
struct _Evas_Event_Mouse_Wheel /** Wheel event */ struct _Evas_Event_Mouse_Wheel /** Wheel event */
@ -458,6 +462,7 @@ struct _Evas_Event_Mouse_Wheel /** Wheel event */
unsigned int timestamp; unsigned int timestamp;
Evas_Event_Flags event_flags; Evas_Event_Flags event_flags;
Evas_Device *dev; Evas_Device *dev;
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
}; };
struct _Evas_Event_Multi_Down /** Multi button press event */ struct _Evas_Event_Multi_Down /** Multi button press event */
@ -477,6 +482,7 @@ struct _Evas_Event_Multi_Down /** Multi button press event */
unsigned int timestamp; unsigned int timestamp;
Evas_Event_Flags event_flags; Evas_Event_Flags event_flags;
Evas_Device *dev; Evas_Device *dev;
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
}; };
struct _Evas_Event_Multi_Up /** Multi button release event */ struct _Evas_Event_Multi_Up /** Multi button release event */
@ -496,6 +502,7 @@ struct _Evas_Event_Multi_Up /** Multi button release event */
unsigned int timestamp; unsigned int timestamp;
Evas_Event_Flags event_flags; Evas_Event_Flags event_flags;
Evas_Device *dev; Evas_Device *dev;
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
}; };
struct _Evas_Event_Multi_Move /** Multi button down event */ struct _Evas_Event_Multi_Move /** Multi button down event */
@ -512,6 +519,7 @@ struct _Evas_Event_Multi_Move /** Multi button down event */
unsigned int timestamp; unsigned int timestamp;
Evas_Event_Flags event_flags; Evas_Event_Flags event_flags;
Evas_Device *dev; Evas_Device *dev;
void *reserved; /**< Reserved field for internal use only. @since 1.18 */
}; };
struct _Evas_Event_Key_Down /** Key press event */ struct _Evas_Event_Key_Down /** Key press event */

View File

@ -62,13 +62,26 @@ static inline void *
_pointer_event_get(const _eo_evas_object_cb_info *info, const Eo_Event *event) _pointer_event_get(const _eo_evas_object_cb_info *info, const Eo_Event *event)
{ {
if (!info->data) return NULL; if (!info->data) return NULL;
/* See also evas_events.c: _pointer_event_create() */
#define EV_CASE(TYPE, Type) \
case EVAS_CALLBACK_ ## TYPE: return ((Evas_Event_ ## Type *) event->info)->reserved
switch (info->type) switch (info->type)
{ {
case EVAS_CALLBACK_MOUSE_MOVE: EV_CASE(MOUSE_MOVE, Mouse_Move);
return ((Evas_Event_Mouse_Move *) event->info)->reserved; EV_CASE(MOUSE_OUT, Mouse_Out);
default: EV_CASE(MOUSE_IN, Mouse_In);
return NULL; EV_CASE(MOUSE_DOWN, Mouse_Down);
EV_CASE(MOUSE_UP, Mouse_Up);
EV_CASE(MULTI_MOVE, Multi_Move);
EV_CASE(MULTI_DOWN, Multi_Down);
EV_CASE(MULTI_UP, Multi_Up);
EV_CASE(MOUSE_WHEEL, Mouse_Wheel);
default: return NULL;
} }
#undef EV_CASE
} }
static Eina_Bool static Eina_Bool

View File

@ -13,6 +13,14 @@ static Eina_List *
evas_event_list_copy(Eina_List *list); evas_event_list_copy(Eina_List *list);
static void
_canvas_event_feed_multi_up_internal(Evas *eo_e, void *_pd, int d, int x, int y,
double rad, double radx, double rady, double pres, double ang,
double fx, double fy, Evas_Button_Flags flags,
unsigned int timestamp, const void *data,
Efl_Pointer_Event_Data *parent_pe);
static void static void
_evas_event_havemap_adjust(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, Evas_Coord *x, Evas_Coord *y, Eina_Bool mouse_grabbed) _evas_event_havemap_adjust(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, Evas_Coord *x, Evas_Coord *y, Eina_Bool mouse_grabbed)
{ {
@ -41,76 +49,51 @@ _pointer_event_create(Evas_Callback_Type type, void *ev,
Efl_Pointer_Event_Data **evdata) Efl_Pointer_Event_Data **evdata)
{ {
Efl_Pointer_Event *evt = NULL; Efl_Pointer_Event *evt = NULL;
Efl_Pointer_Event *pev = parentev ? parentev->eo : NULL;
if (!ev) return NULL; if (!ev) return NULL;
/* This function converts an existing evas info struct to the efl pointer /* This function converts an existing evas info struct to the efl pointer
* event. All pointers must be valid. * event. All pointers must be valid.
* *
* See also evas_callbacks.c: _pointer_event_get()
*
* FIXME: evas event logic should not use legacy structs anymore... this * FIXME: evas event logic should not use legacy structs anymore... this
* should be temporary code. Should be. * should be temporary code. Should be.
*/ */
#define EV_CASE(TYPE, Type) \
case EVAS_CALLBACK_ ## TYPE: \
evt = efl_pointer_event_instance_get(EFL_POINTER_EVENT_CLASS, \
parentev ? parentev->eo : NULL, (void **) evdata); \
efl_pointer_event_legacy_info_set(evt, ev, type); \
((Evas_Event_ ## Type *) ev)->reserved = evt; \
break;
switch (type) switch (type)
{ {
case EVAS_CALLBACK_MOUSE_MOVE: EV_CASE(MOUSE_MOVE, Mouse_Move);
evt = efl_pointer_event_instance_get(EFL_POINTER_EVENT_CLASS, pev, (void **) evdata); EV_CASE(MOUSE_OUT, Mouse_Out);
efl_pointer_event_legacy_info_set(evt, ev, type); EV_CASE(MOUSE_IN, Mouse_In);
((Evas_Event_Mouse_Move *) ev)->reserved = evt; EV_CASE(MOUSE_DOWN, Mouse_Down);
break; EV_CASE(MOUSE_UP, Mouse_Up);
EV_CASE(MULTI_MOVE, Multi_Move);
EV_CASE(MULTI_DOWN, Multi_Down);
EV_CASE(MULTI_UP, Multi_Up);
EV_CASE(MOUSE_WHEEL, Mouse_Wheel);
default: default:
DBG("Support for event type %d not implemented yet.", type); DBG("Support for event type %d not implemented yet.", type);
break; break;
} }
#undef EV_CASE
if (!evt && evdata) *evdata = NULL; if (!evt && evdata) *evdata = NULL;
return evt; return evt;
} }
static inline void
_pointer_event_adjust(Evas_Callback_Type type, void *ev,
Efl_Pointer_Event_Data *evdata)
{
if (!evdata) return;
/* FIXME: remove OR 1 */
#if defined(DEBUG) || 1
# define CHKACT(a) do { if (evdata->action != EFL_POINTER_ACTION_ ## a) abort(); } while (0)
#else
# define CHKACT(a) do {} while(0)
#endif
switch (type)
{
case EVAS_CALLBACK_MOUSE_MOVE:
CHKACT(MOVE);
evdata->cur.x = ((Evas_Event_Mouse_Move *) ev)->cur.canvas.x;
evdata->cur.y = ((Evas_Event_Mouse_Move *) ev)->cur.canvas.y;
evdata->cur.xsub = ((Evas_Event_Mouse_Move *) ev)->cur.canvas.x;
evdata->cur.ysub = ((Evas_Event_Mouse_Move *) ev)->cur.canvas.y;
break;
case EVAS_CALLBACK_MOUSE_OUT:
CHKACT(OUT);
evdata->cur.x = ((Evas_Event_Mouse_Out *) ev)->canvas.x;
evdata->cur.y = ((Evas_Event_Mouse_Out *) ev)->canvas.y;
evdata->cur.xsub = ((Evas_Event_Mouse_Out *) ev)->canvas.x;
evdata->cur.ysub = ((Evas_Event_Mouse_Out *) ev)->canvas.y;
break;
case EVAS_CALLBACK_MOUSE_IN:
CHKACT(IN);
evdata->cur.x = ((Evas_Event_Mouse_In *) ev)->canvas.x;
evdata->cur.y = ((Evas_Event_Mouse_In *) ev)->canvas.y;
evdata->cur.xsub = ((Evas_Event_Mouse_In *) ev)->canvas.x;
evdata->cur.ysub = ((Evas_Event_Mouse_In *) ev)->canvas.y;
break;
default: break;
}
}
#define EV_CALL(_eo_obj, _obj, _typ, _ev, _id, _pe) do { \ #define EV_CALL(_eo_obj, _obj, _typ, _ev, _id, _pe) do { \
if (!_pe) _pe = _pointer_event_create(_typ, _ev, parent_pe, & _pe ## data); \ if (!_pe) _pe = _pointer_event_create(_typ, _ev, parent_pe, & _pe ## data); \
else _pointer_event_adjust(_typ, _ev, _pe ## data); \ else efl_pointer_event_legacy_info_set(_pe, _ev, _typ); \
evas_object_event_callback_call(_eo_obj, _obj, _typ, _ev, _id); \ evas_object_event_callback_call(_eo_obj, _obj, _typ, _ev, _id); \
} while (0) } while (0)
#define EV_DEL(a) do { eo_unref(a); a = NULL; } while (0) #define EV_DEL(a) do { eo_unref(a); a = NULL; } while (0)
@ -1091,10 +1074,14 @@ evas_event_thaw_eval(Evas *eo_e)
} }
} }
EAPI void static void
evas_event_feed_mouse_down(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data) _canvas_event_feed_mouse_down_internal(Eo *eo_e, int b, Evas_Button_Flags flags,
unsigned int timestamp, const void *data,
Efl_Pointer_Event_Data *parent_pe)
{ {
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
Efl_Pointer_Event_Data *pedata = NULL;
Efl_Pointer_Event *pe = NULL;
Eina_List *l, *copy; Eina_List *l, *copy;
Evas_Event_Mouse_Down ev; Evas_Event_Mouse_Down ev;
Evas_Object *eo_obj; Evas_Object *eo_obj;
@ -1169,10 +1156,7 @@ evas_event_feed_mouse_down(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned in
ev.canvas.x = e->pointer.x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.y; ev.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed); _evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed);
EV_CALL(eo_obj, obj, EVAS_CALLBACK_MOUSE_DOWN, &ev, event_id, pe);
evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_DOWN, &ev,
event_id);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events)) if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
_evas_event_source_mouse_down_events(eo_obj, eo_e, &ev, _evas_event_source_mouse_down_events(eo_obj, eo_e, &ev,
event_id); event_id);
@ -1187,6 +1171,13 @@ evas_event_feed_mouse_down(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned in
_evas_touch_point_update(eo_e, 0, e->pointer.x, e->pointer.y, EVAS_TOUCH_POINT_STILL); _evas_touch_point_update(eo_e, 0, e->pointer.x, e->pointer.y, EVAS_TOUCH_POINT_STILL);
if (ev.dev) eo_unref(ev.dev); if (ev.dev) eo_unref(ev.dev);
_evas_unwalk(e); _evas_unwalk(e);
EV_DEL(pe);
}
EAPI void
evas_event_feed_mouse_down(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
{
_canvas_event_feed_mouse_down_internal(eo_e, b, flags, timestamp, data, NULL);
} }
static int static int
@ -1314,10 +1305,14 @@ _post_up_handle(Evas *eo_e, unsigned int timestamp, const void *data)
return post_called; return post_called;
} }
EAPI void static void
evas_event_feed_mouse_up(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data) _canvas_event_feed_mouse_up_internal(Eo *eo_e, int b, Evas_Button_Flags flags,
unsigned int timestamp, const void *data,
Efl_Pointer_Event_Data *parent_pe)
{ {
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
Efl_Pointer_Event_Data *pedata = NULL;
Efl_Pointer_Event *pe = NULL;
Eina_List *l, *copy; Eina_List *l, *copy;
INF("ButtonEvent:up time=%u x=%d y=%d button=%d downs=%d", timestamp, e->pointer.x, e->pointer.y, b, e->pointer.downs); INF("ButtonEvent:up time=%u x=%d y=%d button=%d downs=%d", timestamp, e->pointer.x, e->pointer.y, b, e->pointer.downs);
@ -1376,9 +1371,7 @@ evas_event_feed_mouse_up(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned int
_evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x, _evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x,
&ev.canvas.y, &ev.canvas.y,
obj->mouse_grabbed); obj->mouse_grabbed);
evas_object_event_callback_call(eo_obj, obj, EV_CALL(eo_obj, obj, EVAS_CALLBACK_MOUSE_UP, &ev, event_id, pe);
EVAS_CALLBACK_MOUSE_UP,
&ev, event_id);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events)) if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
_evas_event_source_mouse_up_events(eo_obj, eo_e, &ev, _evas_event_source_mouse_up_events(eo_obj, eo_e, &ev,
event_id); event_id);
@ -1411,10 +1404,18 @@ evas_event_feed_mouse_up(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned int
_evas_touch_point_remove(eo_e, 0); _evas_touch_point_remove(eo_e, 0);
_evas_unwalk(e); _evas_unwalk(e);
EV_DEL(pe);
} }
EAPI void EAPI void
evas_event_feed_mouse_cancel(Eo *eo_e, unsigned int timestamp, const void *data) evas_event_feed_mouse_up(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
{
_canvas_event_feed_mouse_up_internal(eo_e, b, flags, timestamp, data, NULL);
}
static void
_canvas_event_feed_mouse_cancel_internal(Eo *eo_e, unsigned int timestamp, const void *data,
Efl_Pointer_Event_Data *parent_pe)
{ {
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
Evas_Coord_Touch_Point *point; Evas_Coord_Touch_Point *point;
@ -1432,23 +1433,33 @@ evas_event_feed_mouse_cancel(Eo *eo_e, unsigned int timestamp, const void *data)
for (i = 0; i < 32; i++) for (i = 0; i < 32; i++)
{ {
if ((e->pointer.button & (1 << i))) if ((e->pointer.button & (1 << i)))
evas_event_feed_mouse_up(eo_e, i + 1, 0, timestamp, data); _canvas_event_feed_mouse_up_internal(eo_e, i + 1, 0, timestamp, data, parent_pe);
} }
EINA_LIST_FOREACH_SAFE(e->touch_points, l, ll, point) EINA_LIST_FOREACH_SAFE(e->touch_points, l, ll, point)
{ {
if ((point->state == EVAS_TOUCH_POINT_DOWN) || if ((point->state == EVAS_TOUCH_POINT_DOWN) ||
(point->state == EVAS_TOUCH_POINT_MOVE)) (point->state == EVAS_TOUCH_POINT_MOVE))
evas_event_feed_multi_up(eo_e, point->id, point->x, point->y, _canvas_event_feed_multi_up_internal(eo_e, e, point->id, point->x, point->y,
0, 0, 0, 0, 0, 0, 0, 0, timestamp, data); 0, 0, 0, 0, 0, 0, 0, 0, timestamp, data, NULL);
} }
evas_event_default_flags_set(eo_e, flags); evas_event_default_flags_set(eo_e, flags);
_evas_unwalk(e); _evas_unwalk(e);
} }
EAPI void EAPI void
evas_event_feed_mouse_wheel(Eo *eo_e, int direction, int z, unsigned int timestamp, const void *data) evas_event_feed_mouse_cancel(Eo *eo_e, unsigned int timestamp, const void *data)
{
_canvas_event_feed_mouse_cancel_internal(eo_e, timestamp, data, NULL);
}
static void
_canvas_event_feed_mouse_wheel_internal(Eo *eo_e, int direction, int z,
unsigned int timestamp, const void *data,
Efl_Pointer_Event_Data *parent_pe)
{ {
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
Efl_Pointer_Event_Data *pedata = NULL;
Efl_Pointer_Event *pe = NULL;
Eina_List *l, *copy; Eina_List *l, *copy;
Evas_Event_Mouse_Wheel ev; Evas_Event_Mouse_Wheel ev;
Evas_Object *eo_obj; Evas_Object *eo_obj;
@ -1486,9 +1497,7 @@ evas_event_feed_mouse_wheel(Eo *eo_e, int direction, int z, unsigned int timesta
ev.canvas.y = e->pointer.y; ev.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x, &ev.canvas.y, _evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x, &ev.canvas.y,
obj->mouse_grabbed); obj->mouse_grabbed);
evas_object_event_callback_call(eo_obj, obj, EV_CALL(eo_obj, obj, EVAS_CALLBACK_MOUSE_WHEEL, &ev, event_id, pe);
EVAS_CALLBACK_MOUSE_WHEEL, &ev,
event_id);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events)) if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
_evas_event_source_wheel_events(eo_obj, eo_e, &ev, event_id); _evas_event_source_wheel_events(eo_obj, eo_e, &ev, event_id);
if (e->delete_me || e->is_frozen) break; if (e->delete_me || e->is_frozen) break;
@ -1499,6 +1508,13 @@ evas_event_feed_mouse_wheel(Eo *eo_e, int direction, int z, unsigned int timesta
if (ev.dev) eo_unref(ev.dev); if (ev.dev) eo_unref(ev.dev);
_evas_unwalk(e); _evas_unwalk(e);
EV_DEL(pe);
}
EAPI void
evas_event_feed_mouse_wheel(Eo *eo_e, int direction, int z, unsigned int timestamp, const void *data)
{
_canvas_event_feed_mouse_wheel_internal(eo_e, direction, z, timestamp, data, NULL);
} }
static void static void
@ -2006,10 +2022,13 @@ evas_event_feed_mouse_move(Eo *eo_e, int x, int y, unsigned int timestamp, const
_canvas_event_feed_mouse_move_internal(eo_e, e, x, y, timestamp, data, NULL); _canvas_event_feed_mouse_move_internal(eo_e, e, x, y, timestamp, data, NULL);
} }
EAPI void static void
evas_event_feed_mouse_in(Eo *eo_e, unsigned int timestamp, const void *data) _canvas_event_feed_mouse_in_internal(Eo *eo_e, unsigned int timestamp, const void *data,
Efl_Pointer_Event_Data *parent_pe)
{ {
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
Efl_Pointer_Event_Data *pedata = NULL;
Efl_Pointer_Event *pe = NULL;
Eina_List *ins; Eina_List *ins;
Eina_List *l; Eina_List *l;
Evas_Event_Mouse_In ev; Evas_Event_Mouse_In ev;
@ -2053,9 +2072,7 @@ evas_event_feed_mouse_in(Eo *eo_e, unsigned int timestamp, const void *data)
ev.canvas.y = e->pointer.y; ev.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x, &ev.canvas.y, _evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x, &ev.canvas.y,
obj->mouse_grabbed); obj->mouse_grabbed);
evas_object_event_callback_call(eo_obj, obj, EV_CALL(eo_obj, obj, EVAS_CALLBACK_MOUSE_IN, &ev, event_id, pe);
EVAS_CALLBACK_MOUSE_IN, &ev,
event_id);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events)) if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
_evas_event_source_mouse_in_events(eo_obj, eo_e, &ev, event_id); _evas_event_source_mouse_in_events(eo_obj, eo_e, &ev, event_id);
if (e->delete_me || e->is_frozen) break; if (e->delete_me || e->is_frozen) break;
@ -2069,12 +2086,22 @@ evas_event_feed_mouse_in(Eo *eo_e, unsigned int timestamp, const void *data)
evas_event_feed_mouse_move(eo_e, e->pointer.x, e->pointer.y, timestamp, data); evas_event_feed_mouse_move(eo_e, e->pointer.x, e->pointer.y, timestamp, data);
if (ev.dev) eo_unref(ev.dev); if (ev.dev) eo_unref(ev.dev);
_evas_unwalk(e); _evas_unwalk(e);
EV_DEL(pe);
} }
EAPI void EAPI void
evas_event_feed_mouse_out(Eo *eo_e, unsigned int timestamp, const void *data) evas_event_feed_mouse_in(Eo *eo_e, unsigned int timestamp, const void *data)
{
_canvas_event_feed_mouse_in_internal(eo_e, timestamp, data, NULL);
}
static void
_canvas_event_feed_mouse_out_internal(Eo *eo_e, unsigned int timestamp, const void *data,
Efl_Pointer_Event_Data *parent_pe)
{ {
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
Efl_Pointer_Event_Data *pedata = NULL;
Efl_Pointer_Event *pe = NULL;
Evas_Event_Mouse_Out ev; Evas_Event_Mouse_Out ev;
int event_id = 0; int event_id = 0;
@ -2117,9 +2144,7 @@ evas_event_feed_mouse_out(Eo *eo_e, unsigned int timestamp, const void *data)
ev.canvas.y = e->pointer.y; ev.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x, &ev.canvas.y, _evas_event_havemap_adjust(eo_obj, obj, &ev.canvas.x, &ev.canvas.y,
obj->mouse_grabbed); obj->mouse_grabbed);
evas_object_event_callback_call(eo_obj, obj, EV_CALL(eo_obj, obj, EVAS_CALLBACK_MOUSE_OUT, &ev, event_id, pe);
EVAS_CALLBACK_MOUSE_OUT, &ev,
event_id);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events)) if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
_evas_event_source_mouse_out_events(eo_obj, eo_e, &ev, event_id); _evas_event_source_mouse_out_events(eo_obj, eo_e, &ev, event_id);
if (e->delete_me || e->is_frozen) break; if (e->delete_me || e->is_frozen) break;
@ -2134,6 +2159,13 @@ evas_event_feed_mouse_out(Eo *eo_e, unsigned int timestamp, const void *data)
_evas_post_event_callback_call(eo_e, e); _evas_post_event_callback_call(eo_e, e);
if (ev.dev) eo_unref(ev.dev); if (ev.dev) eo_unref(ev.dev);
_evas_unwalk(e); _evas_unwalk(e);
EV_DEL(pe);
}
EAPI void
evas_event_feed_mouse_out(Eo *eo_e, unsigned int timestamp, const void *data)
{
_canvas_event_feed_mouse_out_internal(eo_e, timestamp, data, NULL);
} }
static void static void
@ -2143,11 +2175,13 @@ _canvas_event_feed_multi_down_internal(Evas *eo_e, void *_pd,
double pres, double ang, double pres, double ang,
double fx, double fy, double fx, double fy,
Evas_Button_Flags flags, unsigned int timestamp, Evas_Button_Flags flags, unsigned int timestamp,
const void *data) const void *data, Efl_Pointer_Event_Data *parent_pe)
{ {
Evas_Public_Data *e = _pd; Evas_Public_Data *e = _pd;
Eina_List *l, *copy; Eina_List *l, *copy;
Evas_Event_Multi_Down ev; Evas_Event_Multi_Down ev;
Efl_Pointer_Event_Data *pedata = NULL;
Efl_Pointer_Event *pe = NULL;
Evas_Object *eo_obj; Evas_Object *eo_obj;
int addgrab = 0; int addgrab = 0;
int event_id = 0; int event_id = 0;
@ -2210,9 +2244,7 @@ _canvas_event_feed_multi_down_internal(Evas *eo_e, void *_pd,
ev.canvas.xsub = ev.canvas.x; // fixme - lost precision ev.canvas.xsub = ev.canvas.x; // fixme - lost precision
if (y != ev.canvas.y) if (y != ev.canvas.y)
ev.canvas.ysub = ev.canvas.y; // fixme - lost precision ev.canvas.ysub = ev.canvas.y; // fixme - lost precision
evas_object_event_callback_call(eo_obj, obj, EV_CALL(eo_obj, obj, EVAS_CALLBACK_MULTI_DOWN, &ev, event_id, pe);
EVAS_CALLBACK_MULTI_DOWN, &ev,
event_id);
if ((obj->proxy->is_proxy) || (obj->proxy->src_events)) if ((obj->proxy->is_proxy) || (obj->proxy->src_events))
_evas_event_source_multi_down_events(eo_obj, eo_e, &ev, event_id); _evas_event_source_multi_down_events(eo_obj, eo_e, &ev, event_id);
if (e->delete_me || e->is_frozen) break; if (e->delete_me || e->is_frozen) break;
@ -2224,6 +2256,7 @@ _canvas_event_feed_multi_down_internal(Evas *eo_e, void *_pd,
_evas_touch_point_update(eo_e, d, x, y, EVAS_TOUCH_POINT_STILL); _evas_touch_point_update(eo_e, d, x, y, EVAS_TOUCH_POINT_STILL);
if (ev.dev) eo_unref(ev.dev); if (ev.dev) eo_unref(ev.dev);
_evas_unwalk(e); _evas_unwalk(e);
EV_DEL(pe);
} }
EAPI void EAPI void
@ -2234,7 +2267,7 @@ evas_event_input_multi_down(Eo *eo_e, int d, int x, int y, double rad, double ra
x - e->framespace.x, x - e->framespace.x,
y - e->framespace.y, y - e->framespace.y,
rad, radx, rady, pres, ang, rad, radx, rady, pres, ang,
fx, fy, flags, timestamp, data); fx, fy, flags, timestamp, data, NULL);
} }
EAPI void EAPI void
@ -2243,7 +2276,7 @@ evas_event_feed_multi_down(Eo *eo_e, int d, int x, int y, double rad, double rad
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
_canvas_event_feed_multi_down_internal(eo_e, e, _canvas_event_feed_multi_down_internal(eo_e, e,
d, x, y, rad, radx, rady, pres, ang, d, x, y, rad, radx, rady, pres, ang,
fx, fy, flags, timestamp, data); fx, fy, flags, timestamp, data, NULL);
} }
static void static void
@ -2254,8 +2287,11 @@ _canvas_event_feed_multi_up_internal(Evas *eo_e, void *_pd,
double fx, double fy, double fx, double fy,
Evas_Button_Flags flags, Evas_Button_Flags flags,
unsigned int timestamp, unsigned int timestamp,
const void *data) const void *data,
Efl_Pointer_Event_Data *parent_pe)
{ {
Efl_Pointer_Event_Data *pedata = NULL;
Efl_Pointer_Event *pe = NULL;
Evas_Public_Data *e = _pd; Evas_Public_Data *e = _pd;
Eina_List *l, *copy; Eina_List *l, *copy;
Evas_Event_Multi_Up ev; Evas_Event_Multi_Up ev;
@ -2315,8 +2351,7 @@ _canvas_event_feed_multi_up_internal(Evas *eo_e, void *_pd,
obj->mouse_grabbed--; obj->mouse_grabbed--;
e->pointer.mouse_grabbed--; e->pointer.mouse_grabbed--;
} }
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_UP, EV_CALL(eo_obj, obj, EVAS_CALLBACK_MULTI_UP, &ev, event_id, pe);
&ev, event_id);
if ((obj->proxy->is_proxy) || (obj->proxy->src_events)) if ((obj->proxy->is_proxy) || (obj->proxy->src_events))
_evas_event_source_multi_up_events(eo_obj, eo_e, &ev, event_id); _evas_event_source_multi_up_events(eo_obj, eo_e, &ev, event_id);
if (e->delete_me || e->is_frozen) break; if (e->delete_me || e->is_frozen) break;
@ -2328,6 +2363,7 @@ _canvas_event_feed_multi_up_internal(Evas *eo_e, void *_pd,
_evas_touch_point_remove(eo_e, d); _evas_touch_point_remove(eo_e, d);
if (ev.dev) eo_unref(ev.dev); if (ev.dev) eo_unref(ev.dev);
_evas_unwalk(e); _evas_unwalk(e);
EV_DEL(pe);
} }
EAPI void EAPI void
@ -2339,7 +2375,7 @@ evas_event_input_multi_up(Eo *eo_e, int d, int x, int y, double rad, double radx
y - e->framespace.y, y - e->framespace.y,
rad, radx, rady, rad, radx, rady,
pres, ang, fx, fy, flags, timestamp, pres, ang, fx, fy, flags, timestamp,
data); data, NULL);
} }
EAPI void EAPI void
@ -2347,7 +2383,7 @@ evas_event_feed_multi_up(Eo *eo_e, int d, int x, int y, double rad, double radx,
{ {
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
_canvas_event_feed_multi_up_internal(eo_e, e, d, x, y, rad, radx, rady, _canvas_event_feed_multi_up_internal(eo_e, e, d, x, y, rad, radx, rady,
pres, ang, fx, fy, flags, timestamp, data); pres, ang, fx, fy, flags, timestamp, data, NULL);
} }
static void static void
@ -2356,9 +2392,12 @@ _canvas_event_feed_multi_move_internal(Eo *eo_e, void *_pd, int d, int x,
double rady, double pres, double ang, double rady, double pres, double ang,
double fx, double fy, double fx, double fy,
unsigned int timestamp, unsigned int timestamp,
const void *data) const void *data,
Efl_Pointer_Event_Data *parent_pe)
{ {
Evas_Public_Data *e = _pd; Evas_Public_Data *e = _pd;
Efl_Pointer_Event_Data *pedata = NULL;
Efl_Pointer_Event *pe = NULL;
if (e->is_frozen) return; if (e->is_frozen) return;
e->last_timestamp = timestamp; e->last_timestamp = timestamp;
@ -2421,7 +2460,7 @@ _canvas_event_feed_multi_move_internal(Eo *eo_e, void *_pd, int d, int x,
ev.cur.canvas.xsub = ev.cur.canvas.x; // fixme - lost precision ev.cur.canvas.xsub = ev.cur.canvas.x; // fixme - lost precision
if (y != ev.cur.canvas.y) if (y != ev.cur.canvas.y)
ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id); EV_CALL(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id, pe);
if ((obj->proxy->is_proxy) || (obj->proxy->src_events)) if ((obj->proxy->is_proxy) || (obj->proxy->src_events))
_evas_event_source_multi_move_events(eo_obj, eo_e, &ev, _evas_event_source_multi_move_events(eo_obj, eo_e, &ev,
event_id); event_id);
@ -2496,7 +2535,7 @@ _canvas_event_feed_multi_move_internal(Eo *eo_e, void *_pd, int d, int x,
ev.cur.canvas.xsub = ev.cur.canvas.x; // fixme - lost precision ev.cur.canvas.xsub = ev.cur.canvas.x; // fixme - lost precision
if (y != ev.cur.canvas.y) if (y != ev.cur.canvas.y)
ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id); EV_CALL(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id, pe);
if ((obj->proxy->is_proxy) || (obj->proxy->src_events)) if ((obj->proxy->is_proxy) || (obj->proxy->src_events))
_evas_event_source_multi_move_events(eo_obj, eo_e, &ev, _evas_event_source_multi_move_events(eo_obj, eo_e, &ev,
event_id); event_id);
@ -2520,6 +2559,7 @@ _canvas_event_feed_multi_move_internal(Eo *eo_e, void *_pd, int d, int x,
if (ev.dev) eo_unref(ev.dev); if (ev.dev) eo_unref(ev.dev);
} }
_evas_unwalk(e); _evas_unwalk(e);
EV_DEL(pe);
} }
EAPI void EAPI void
@ -2529,7 +2569,7 @@ evas_event_input_multi_move(Eo *eo_e, int d, int x, int y, double rad, double ra
_canvas_event_feed_multi_move_internal(eo_e, e, d, _canvas_event_feed_multi_move_internal(eo_e, e, d,
x - e->framespace.x, y - e->framespace.y, x - e->framespace.x, y - e->framespace.y,
rad, radx, rady, rad, radx, rady,
pres, ang, fx, fy, timestamp, data); pres, ang, fx, fy, timestamp, data, NULL);
} }
EAPI void EAPI void
@ -2537,7 +2577,7 @@ evas_event_feed_multi_move(Eo *eo_e, int d, int x, int y, double rad, double rad
{ {
Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
_canvas_event_feed_multi_move_internal(eo_e, e, d, x, y, rad, radx, rady, _canvas_event_feed_multi_move_internal(eo_e, e, d, x, y, rad, radx, rady,
pres, ang, fx, fy, timestamp, data); pres, ang, fx, fy, timestamp, data, NULL);
} }
static void static void
@ -3126,6 +3166,7 @@ _evas_canvas_event_pointer_cb(void *data, const Eo_Event *event)
Efl_Pointer_Event_Data *ev = eo_data_scope_get(event->info, EFL_POINTER_EVENT_CLASS); Efl_Pointer_Event_Data *ev = eo_data_scope_get(event->info, EFL_POINTER_EVENT_CLASS);
Evas_Public_Data *e = data; Evas_Public_Data *e = data;
Evas *eo_e = event->object; Evas *eo_e = event->object;
int dir;
if (!ev) return EO_CALLBACK_CONTINUE; if (!ev) return EO_CALLBACK_CONTINUE;
@ -3149,56 +3190,55 @@ _evas_canvas_event_pointer_cb(void *data, const Eo_Event *event)
ev->radius, ev->radius_x, ev->radius_y, ev->radius, ev->radius_x, ev->radius_y,
ev->pressure, ev->angle, ev->pressure, ev->angle,
ev->cur.xsub, ev->cur.ysub, ev->cur.xsub, ev->cur.ysub,
ev->timestamp, ev->data); ev->timestamp, ev->data, ev);
} }
break; break;
case EFL_POINTER_ACTION_DOWN: case EFL_POINTER_ACTION_DOWN:
if (ev->finger == 0) if (ev->finger == 0)
{ {
evas_event_feed_mouse_down(eo_e, ev->button, ev->button_flags, ev->timestamp, ev->data); _canvas_event_feed_mouse_down_internal(eo_e, ev->button, ev->button_flags, ev->timestamp, ev->data, ev);
} }
else else
{ {
evas_event_feed_multi_down(eo_e, ev->finger, ev->cur.x, ev->cur.y, _canvas_event_feed_multi_down_internal(eo_e, e, ev->finger, ev->cur.x, ev->cur.y,
ev->radius, ev->radius_x, ev->radius_y, ev->radius, ev->radius_x, ev->radius_y,
ev->pressure, ev->angle, ev->pressure, ev->angle,
ev->cur.xsub, ev->cur.ysub, ev->button_flags, ev->cur.xsub, ev->cur.ysub, ev->button_flags,
ev->timestamp, ev->data); ev->timestamp, ev->data, ev);
} }
break; break;
case EFL_POINTER_ACTION_UP: case EFL_POINTER_ACTION_UP:
if (ev->finger == 0) if (ev->finger == 0)
{ {
evas_event_feed_mouse_up(eo_e, ev->button, ev->button_flags, ev->timestamp, ev->data); _canvas_event_feed_mouse_up_internal(eo_e, ev->button, ev->button_flags, ev->timestamp, ev->data, ev);
} }
else else
{ {
evas_event_feed_multi_up(eo_e, ev->finger, ev->cur.x, ev->cur.y, _canvas_event_feed_multi_up_internal(eo_e, e, ev->finger, ev->cur.x, ev->cur.y,
ev->radius, ev->radius_x, ev->radius_y, ev->radius, ev->radius_x, ev->radius_y,
ev->pressure, ev->angle, ev->pressure, ev->angle,
ev->cur.xsub, ev->cur.ysub, ev->button_flags, ev->cur.xsub, ev->cur.ysub, ev->button_flags,
ev->timestamp, ev->data); ev->timestamp, ev->data, ev);
} }
break; break;
case EFL_POINTER_ACTION_CANCEL: case EFL_POINTER_ACTION_CANCEL:
evas_event_feed_mouse_cancel(eo_e, ev->timestamp, ev->data); _canvas_event_feed_mouse_cancel_internal(eo_e, ev->timestamp, ev->data, ev);
break; break;
case EFL_POINTER_ACTION_IN: case EFL_POINTER_ACTION_IN:
evas_event_feed_mouse_in(eo_e, ev->timestamp, ev->data); _canvas_event_feed_mouse_in_internal(eo_e, ev->timestamp, ev->data, ev);
break; break;
case EFL_POINTER_ACTION_OUT: case EFL_POINTER_ACTION_OUT:
evas_event_feed_mouse_out(eo_e, ev->timestamp, ev->data); _canvas_event_feed_mouse_out_internal(eo_e, ev->timestamp, ev->data, ev);
break; break;
case EFL_POINTER_ACTION_WHEEL: case EFL_POINTER_ACTION_WHEEL:
evas_event_feed_mouse_wheel(eo_e, dir = (ev->wheel.dir == EFL_ORIENT_HORIZONTAL) ? 1 : 0;
(ev->wheel.dir == EFL_ORIENT_HORIZONTAL) ? 1 : 0, _canvas_event_feed_mouse_wheel_internal(eo_e, dir, ev->wheel.z, ev->timestamp, ev->data, ev);
ev->wheel.z, ev->timestamp, ev->data);
break; break;
default: default:

View File

@ -24,11 +24,50 @@ efl_pointer_event_legacy_info_set(Efl_Pointer_Event *evt, const void *event_info
#warning Modifiers and locks not supported yet - very bad! #warning Modifiers and locks not supported yet - very bad!
#if defined(DEBUG)
# define CHKACT(a) do { if (evdata->action != EFL_POINTER_ACTION_ ## a) abort(); } while (0)
#else
# define CHKACT(a) do {} while(0)
#endif
switch (type) switch (type)
{ {
//cse EVAS_CALLBACK_MOUSE_IN: case EVAS_CALLBACK_MOUSE_IN:
//case EVAS_CALLBACK_MOUSE_OUT: CHKACT(IN);
{
const Evas_Event_Mouse_In *e = event_info;
ev->action = EFL_POINTER_ACTION_IN;
ev->cur.x = e->canvas.x;
ev->cur.y = e->canvas.y;
ev->cur.xsub = e->canvas.x;
ev->cur.ysub = e->canvas.y;
ev->data = e->data;
ev->timestamp = e->timestamp;
ev->event_flags = e->event_flags;
ev->device = e->dev;
ev->source = e->event_src;
break;
}
case EVAS_CALLBACK_MOUSE_OUT:
CHKACT(OUT);
{
const Evas_Event_Mouse_Out *e = event_info;
ev->action = EFL_POINTER_ACTION_OUT;
ev->cur.x = e->canvas.x;
ev->cur.y = e->canvas.y;
ev->cur.xsub = e->canvas.x;
ev->cur.ysub = e->canvas.y;
ev->data = e->data;
ev->timestamp = e->timestamp;
ev->event_flags = e->event_flags;
ev->device = e->dev;
ev->source = e->event_src;
break;
}
case EVAS_CALLBACK_MOUSE_DOWN: case EVAS_CALLBACK_MOUSE_DOWN:
CHKACT(DOWN);
{ {
const Evas_Event_Mouse_Down *e = event_info; const Evas_Event_Mouse_Down *e = event_info;
ev->action = EFL_POINTER_ACTION_DOWN; ev->action = EFL_POINTER_ACTION_DOWN;
@ -47,6 +86,7 @@ efl_pointer_event_legacy_info_set(Efl_Pointer_Event *evt, const void *event_info
} }
case EVAS_CALLBACK_MOUSE_UP: case EVAS_CALLBACK_MOUSE_UP:
CHKACT(UP);
{ {
const Evas_Event_Mouse_Up *e = event_info; const Evas_Event_Mouse_Up *e = event_info;
ev->action = EFL_POINTER_ACTION_UP; ev->action = EFL_POINTER_ACTION_UP;
@ -65,6 +105,7 @@ efl_pointer_event_legacy_info_set(Efl_Pointer_Event *evt, const void *event_info
} }
case EVAS_CALLBACK_MOUSE_MOVE: case EVAS_CALLBACK_MOUSE_MOVE:
CHKACT(MOVE);
{ {
const Evas_Event_Mouse_Move *e = event_info; const Evas_Event_Mouse_Move *e = event_info;
ev->action = EFL_POINTER_ACTION_MOVE; ev->action = EFL_POINTER_ACTION_MOVE;
@ -86,6 +127,7 @@ efl_pointer_event_legacy_info_set(Efl_Pointer_Event *evt, const void *event_info
} }
case EVAS_CALLBACK_MOUSE_WHEEL: case EVAS_CALLBACK_MOUSE_WHEEL:
CHKACT(WHEEL);
{ {
const Evas_Event_Mouse_Wheel *e = event_info; const Evas_Event_Mouse_Wheel *e = event_info;
ev->action = EFL_POINTER_ACTION_WHEEL; ev->action = EFL_POINTER_ACTION_WHEEL;
@ -103,6 +145,7 @@ efl_pointer_event_legacy_info_set(Efl_Pointer_Event *evt, const void *event_info
} }
case EVAS_CALLBACK_MULTI_DOWN: case EVAS_CALLBACK_MULTI_DOWN:
CHKACT(DOWN);
{ {
const Evas_Event_Multi_Down *e = event_info; const Evas_Event_Multi_Down *e = event_info;
ev->action = EFL_POINTER_ACTION_DOWN; ev->action = EFL_POINTER_ACTION_DOWN;
@ -125,6 +168,7 @@ efl_pointer_event_legacy_info_set(Efl_Pointer_Event *evt, const void *event_info
} }
case EVAS_CALLBACK_MULTI_UP: case EVAS_CALLBACK_MULTI_UP:
CHKACT(UP);
{ {
const Evas_Event_Multi_Up *e = event_info; const Evas_Event_Multi_Up *e = event_info;
ev->action = EFL_POINTER_ACTION_UP; ev->action = EFL_POINTER_ACTION_UP;
@ -147,6 +191,7 @@ efl_pointer_event_legacy_info_set(Efl_Pointer_Event *evt, const void *event_info
} }
case EVAS_CALLBACK_MULTI_MOVE: case EVAS_CALLBACK_MULTI_MOVE:
CHKACT(MOVE);
{ {
const Evas_Event_Multi_Move *e = event_info; const Evas_Event_Multi_Move *e = event_info;
ev->action = EFL_POINTER_ACTION_MOVE; ev->action = EFL_POINTER_ACTION_MOVE;
@ -183,12 +228,57 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
switch (ev->action) switch (ev->action)
{ {
case EFL_POINTER_ACTION_IN:
{
Evas_Event_Mouse_In *e = calloc(1, sizeof(*e));
if (ptype) *ptype = EVAS_CALLBACK_MOUSE_IN;
ev->legacy = e;
e->reserved = ev->eo;
e->buttons = ev->pressed_buttons;
e->canvas.x = ev->cur.x;
e->canvas.y = ev->cur.y;
e->output.x = ev->cur.x;
e->output.y = ev->cur.y;
e->data = ev->data;
e->timestamp = ev->timestamp;
e->event_flags = ev->event_flags;
e->dev = ev->device;
e->modifiers = NULL; /* FIXME */
e->locks = NULL; /* FIXME */
e->event_src = ev->source;
}
break;
case EFL_POINTER_ACTION_OUT:
{
Evas_Event_Mouse_Out *e = calloc(1, sizeof(*e));
if (ptype) *ptype = EVAS_CALLBACK_MOUSE_OUT;
ev->legacy = e;
e->reserved = ev->eo;
e->buttons = ev->pressed_buttons;
e->canvas.x = ev->cur.x;
e->canvas.y = ev->cur.y;
e->output.x = ev->cur.x;
e->output.y = ev->cur.y;
e->data = ev->data;
e->timestamp = ev->timestamp;
e->event_flags = ev->event_flags;
e->dev = ev->device;
e->event_src = ev->source;
e->modifiers = NULL; /* FIXME */
e->locks = NULL; /* FIXME */
}
break;
case EFL_POINTER_ACTION_DOWN: case EFL_POINTER_ACTION_DOWN:
if (!ev->finger || !multi) if (!ev->finger || !multi)
{ {
Evas_Event_Mouse_Down *e = calloc(1, sizeof(*e)); Evas_Event_Mouse_Down *e = calloc(1, sizeof(*e));
if (ptype) *ptype = EVAS_CALLBACK_MOUSE_DOWN; if (ptype) *ptype = EVAS_CALLBACK_MOUSE_DOWN;
ev->legacy = e; ev->legacy = e;
e->reserved = ev->eo;
e->button = ev->button; e->button = ev->button;
e->canvas.x = ev->cur.x; e->canvas.x = ev->cur.x;
@ -201,12 +291,15 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
e->event_flags = ev->event_flags; e->event_flags = ev->event_flags;
e->dev = ev->device; e->dev = ev->device;
e->event_src = ev->source; e->event_src = ev->source;
e->modifiers = NULL; /* FIXME */
e->locks = NULL; /* FIXME */
} }
else else
{ {
Evas_Event_Multi_Down *e = calloc(1, sizeof(*e)); Evas_Event_Multi_Down *e = calloc(1, sizeof(*e));
if (ptype) *ptype = EVAS_CALLBACK_MULTI_DOWN; if (ptype) *ptype = EVAS_CALLBACK_MULTI_DOWN;
ev->legacy = e; ev->legacy = e;
e->reserved = ev->eo;
e->device = ev->finger; e->device = ev->finger;
e->radius = ev->radius; e->radius = ev->radius;
@ -225,6 +318,8 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
e->timestamp = ev->timestamp; e->timestamp = ev->timestamp;
e->event_flags = ev->event_flags; e->event_flags = ev->event_flags;
e->dev = ev->device; e->dev = ev->device;
e->modifiers = NULL; /* FIXME */
e->locks = NULL; /* FIXME */
} }
break; break;
@ -234,6 +329,7 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
Evas_Event_Mouse_Up *e = calloc(1, sizeof(*e)); Evas_Event_Mouse_Up *e = calloc(1, sizeof(*e));
if (ptype) *ptype = EVAS_CALLBACK_MOUSE_UP; if (ptype) *ptype = EVAS_CALLBACK_MOUSE_UP;
ev->legacy = e; ev->legacy = e;
e->reserved = ev->eo;
e->button = ev->button; e->button = ev->button;
e->canvas.x = ev->cur.x; e->canvas.x = ev->cur.x;
@ -246,12 +342,15 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
e->event_flags = ev->event_flags; e->event_flags = ev->event_flags;
e->dev = ev->device; e->dev = ev->device;
e->event_src = ev->source; e->event_src = ev->source;
e->modifiers = NULL; /* FIXME */
e->locks = NULL; /* FIXME */
} }
else else
{ {
Evas_Event_Multi_Down *e = calloc(1, sizeof(*e)); Evas_Event_Multi_Down *e = calloc(1, sizeof(*e));
if (ptype) *ptype = EVAS_CALLBACK_MULTI_UP; if (ptype) *ptype = EVAS_CALLBACK_MULTI_UP;
ev->legacy = e; ev->legacy = e;
e->reserved = ev->eo;
e->device = ev->finger; e->device = ev->finger;
e->radius = ev->radius; e->radius = ev->radius;
@ -270,6 +369,8 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
e->timestamp = ev->timestamp; e->timestamp = ev->timestamp;
e->event_flags = ev->event_flags; e->event_flags = ev->event_flags;
e->dev = ev->device; e->dev = ev->device;
e->modifiers = NULL; /* FIXME */
e->locks = NULL; /* FIXME */
break; break;
} }
break; break;
@ -280,6 +381,7 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
Evas_Event_Mouse_Move *e = calloc(1, sizeof(*e)); Evas_Event_Mouse_Move *e = calloc(1, sizeof(*e));
if (ptype) *ptype = EVAS_CALLBACK_MOUSE_MOVE; if (ptype) *ptype = EVAS_CALLBACK_MOUSE_MOVE;
ev->legacy = e; ev->legacy = e;
e->reserved = ev->eo;
e->buttons = ev->pressed_buttons; e->buttons = ev->pressed_buttons;
e->cur.canvas.x = ev->cur.x; e->cur.canvas.x = ev->cur.x;
@ -295,12 +397,15 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
e->event_flags = ev->event_flags; e->event_flags = ev->event_flags;
e->dev = ev->device; e->dev = ev->device;
e->event_src = ev->source; e->event_src = ev->source;
e->modifiers = NULL; /* FIXME */
e->locks = NULL; /* FIXME */
} }
else else
{ {
Evas_Event_Multi_Move *e = calloc(1, sizeof(*e)); Evas_Event_Multi_Move *e = calloc(1, sizeof(*e));
if (ptype) *ptype = EVAS_CALLBACK_MULTI_MOVE; if (ptype) *ptype = EVAS_CALLBACK_MULTI_MOVE;
ev->legacy = e; ev->legacy = e;
e->reserved = ev->eo;
e->device = ev->finger; e->device = ev->finger;
e->radius = ev->radius; e->radius = ev->radius;
@ -318,6 +423,8 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
e->timestamp = ev->timestamp; e->timestamp = ev->timestamp;
e->event_flags = ev->event_flags; e->event_flags = ev->event_flags;
e->dev = ev->device; e->dev = ev->device;
e->modifiers = NULL; /* FIXME */
e->locks = NULL; /* FIXME */
} }
break; break;
@ -326,6 +433,7 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
Evas_Event_Mouse_Wheel *e = calloc(1, sizeof(*e)); Evas_Event_Mouse_Wheel *e = calloc(1, sizeof(*e));
if (ptype) *ptype = EVAS_CALLBACK_MOUSE_WHEEL; if (ptype) *ptype = EVAS_CALLBACK_MOUSE_WHEEL;
ev->legacy = e; ev->legacy = e;
e->reserved = ev->eo;
e->direction = (ev->wheel.dir == EFL_ORIENT_VERTICAL); e->direction = (ev->wheel.dir == EFL_ORIENT_VERTICAL);
e->z = ev->wheel.z; e->z = ev->wheel.z;
@ -337,6 +445,8 @@ efl_pointer_event_legacy_info_get(const Efl_Pointer_Event *evt, Evas_Callback_Ty
e->timestamp = ev->timestamp; e->timestamp = ev->timestamp;
e->event_flags = ev->event_flags; e->event_flags = ev->event_flags;
e->dev = ev->device; e->dev = ev->device;
e->modifiers = NULL; /* FIXME */
e->locks = NULL; /* FIXME */
break; break;
} }