From 0ec01a2e42645b4fe9ce23335983d326249afff3 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Mon, 4 Jun 2012 13:15:13 +0200 Subject: [PATCH] events: Deliver touch events to actors https://bugzilla.gnome.org/show_bug.cgi?id=677390 --- clutter/clutter-main.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c index 7e4bef8c2..744301bb4 100644 --- a/clutter/clutter-main.c +++ b/clutter/clutter-main.c @@ -2614,6 +2614,40 @@ _clutter_process_event_details (ClutterActor *stage, case CLUTTER_TOUCH_BEGIN: case CLUTTER_TOUCH_UPDATE: case CLUTTER_TOUCH_END: + { + ClutterActor *actor; + gfloat x, y; + + clutter_event_get_coords (event, &x, &y); + + /* Only do a pick to find the source if source is not already set + * (as it could be in a synthetic event) + */ + if (event->any.source == NULL) + { + actor = _clutter_stage_do_pick (CLUTTER_STAGE (stage), + x, y, + CLUTTER_PICK_REACTIVE); + if (actor == NULL) + break; + + event->any.source = actor; + } + else + { + /* use the source already set in the synthetic event */ + actor = event->any.source; + } + + CLUTTER_NOTE (EVENT, + "Reactive event received at %.2f, %.2f - actor: %p", + x, y, + actor); + + emit_pointer_event (event, device); + break; + } + case CLUTTER_TOUCH_CANCEL: break;