Evas events: Added evas_event_refeed_event.

Patch by Aharon Hillel.

SVN revision: 61117
This commit is contained in:
Tom Hacohen 2011-07-07 13:59:50 +00:00
parent 7221f62185
commit ba9e8ca113
2 changed files with 92 additions and 1 deletions

View File

@ -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);
/**
* @}
*/

View File

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