#endif
// INTERNAL INCLUDES
-#include <dali/public-api/actors/renderable-actor.h>
#include <dali/public-api/math/vector2.h>
+#include <dali/public-api/signals/callback.h>
#include <dali/integration-api/debug.h>
#include <dali/integration-api/events/touch-event-integ.h>
#include <dali/internal/event/actors/actor-impl.h>
TouchEventProcessor::TouchEventProcessor( Stage& stage )
: mStage( stage ),
- mLastPrimaryHitActor(),
+ mLastPrimaryHitActor( MakeCallback( this, &TouchEventProcessor::OnObservedActorDisconnected ) ),
mLastConsumedActor(),
mTouchDownConsumedActor(),
mLastRenderTask()
}
}
+void TouchEventProcessor::OnObservedActorDisconnected( Actor* actor )
+{
+ if ( actor == mLastPrimaryHitActor.GetActor() )
+ {
+ Dali::Actor handle( actor );
+ TouchEvent touchEvent( 0 );
+ touchEvent.points.push_back( TouchPoint( 0, TouchPoint::Interrupted, 0.0f, 0.0f ) );
+ touchEvent.points[0].hitActor = handle;
+
+ Dali::Actor eventConsumer = EmitTouchSignals( handle, touchEvent );
+
+ if ( mLastConsumedActor.GetActor() != eventConsumer )
+ {
+ EmitTouchSignals( Dali::Actor( mLastConsumedActor.GetActor() ), touchEvent );
+ }
+
+ // Do not set mLastPrimaryHitActor to NULL we may be iterating through its observers
+
+ mLastConsumedActor.SetActor( NULL );
+ mLastRenderTask.Reset();
+ }
+}
+
} // namespace Internal
} // namespace Dali