From ba9e8ca1131408169e3e32ab6f8e9160efc07c82 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Thu, 7 Jul 2011 13:59:50 +0000 Subject: [PATCH] Evas events: Added evas_event_refeed_event. Patch by Aharon Hillel. SVN revision: 61117 --- legacy/evas/src/lib/Evas.h | 16 ++++- legacy/evas/src/lib/canvas/evas_events.c | 77 ++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index 498c9bfac4..935bf6bb83 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -1193,7 +1193,6 @@ EAPI Evas *evas_new (void) EINA_WARN_UNUSED */ EAPI void evas_free (Evas *e) EINA_ARG_NONNULL(1); - /** * Inform to the evas that it got the focus. * @@ -2464,6 +2463,21 @@ EAPI void evas_event_feed_key_up (Evas *e, const char *k */ EAPI void evas_event_feed_hold (Evas *e, int hold, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1); +/** + * Re feed event. + * + * @param e The given canvas pointer. + * @param event_copy the event to refeed + * @param event_type Event type + * + * This function re-feeds the event pointed by event_copy + * + * This function call evas_event_feed_* functions, so it can + * cause havoc if not used wisely. Please use it responsibly. + */ +EAPI void evas_event_refeed_event (Evas *e, void *event_copy, Evas_Callback_Type event_type); EINA_ARG_NONNULL(1); + + /** * @} */ diff --git a/legacy/evas/src/lib/canvas/evas_events.c b/legacy/evas/src/lib/canvas/evas_events.c index 2919be63c6..d5290b6330 100644 --- a/legacy/evas/src/lib/canvas/evas_events.c +++ b/legacy/evas/src/lib/canvas/evas_events.c @@ -196,6 +196,7 @@ evas_event_thaw_eval(Evas *e) return; MAGIC_CHECK_END(); if (e->events_frozen != 0) return; + evas_event_feed_mouse_move(e, e->pointer.x, e->pointer.y, e->last_timestamp, NULL); } @@ -1466,3 +1467,79 @@ evas_object_pointer_mode_get(const Evas_Object *obj) MAGIC_CHECK_END(); return obj->pointer_mode; } + +EAPI void +evas_event_refeed_event(Evas *e, void *event_copy, Evas_Callback_Type event_type) +{ + switch(event_type) + { + case EVAS_CALLBACK_MOUSE_IN: + { + Evas_Event_Mouse_In *ev = event_copy; + evas_event_feed_mouse_in(e, ev->timestamp, ev->data); + break; + } + case EVAS_CALLBACK_MOUSE_OUT: + { + Evas_Event_Mouse_Out *ev = event_copy; + evas_event_feed_mouse_out(e, ev->timestamp, ev->data); + break; + } + case EVAS_CALLBACK_MOUSE_DOWN: + { + Evas_Event_Mouse_Down *ev = event_copy; + evas_event_feed_mouse_down(e, ev->button, ev->flags, ev-> timestamp, ev->data); + break; + } + case EVAS_CALLBACK_MOUSE_UP: + { + Evas_Event_Mouse_Up *ev = event_copy; + evas_event_feed_mouse_up(e, ev->button, ev->flags, ev-> timestamp, ev->data); + break; + } + case EVAS_CALLBACK_MOUSE_MOVE: + { + Evas_Event_Mouse_Move *ev = event_copy; + evas_event_feed_mouse_move(e, ev->cur.canvas.x, ev->cur.canvas.y, ev->timestamp, ev->data); + break; + } + case EVAS_CALLBACK_MOUSE_WHEEL: + { + Evas_Event_Mouse_Wheel *ev = event_copy; + evas_event_feed_mouse_wheel(e, ev->direction, ev-> z, ev->timestamp, ev->data); + break; + } + case EVAS_CALLBACK_MULTI_DOWN: + { + Evas_Event_Multi_Down *ev = event_copy; + evas_event_feed_multi_down(e, ev->device, ev->canvas.x, ev->canvas.y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, ev->canvas.xsub, ev->canvas.ysub, ev->flags, ev->timestamp, ev->data); + break; + } + case EVAS_CALLBACK_MULTI_UP: + { + Evas_Event_Multi_Up *ev = event_copy; + evas_event_feed_multi_up(e, ev->device, ev->canvas.x, ev->canvas.y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, ev->canvas.xsub, ev->canvas.ysub, ev->flags, ev->timestamp, ev->data); + break; + } + case EVAS_CALLBACK_MULTI_MOVE: + { + Evas_Event_Multi_Move *ev = event_copy; + evas_event_feed_multi_move(e, ev->device, ev->cur.canvas.x, ev->cur.canvas.y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, ev->cur.canvas.xsub, ev->cur.canvas.ysub, ev->timestamp, ev->data); + break; + } + case EVAS_CALLBACK_KEY_DOWN: + { + Evas_Event_Key_Down *ev = event_copy; + evas_event_feed_key_down(e, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, ev->data); + break; + } + case EVAS_CALLBACK_KEY_UP: + { + Evas_Event_Key_Up *ev = event_copy; + evas_event_feed_key_up(e, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, ev->data); + break; + } + default: /* All non-input events are not handeled */ + break; + } +}