X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fevents%2Ftouch-event-processor.cpp;h=94722266c3e7da852e7ec78e8987e8e9a85c7ffb;hb=054aa42421fc5a0d206b612d2e8f385b884ab12a;hp=9a139f5466f9e9ffda92fb395ec35815cfb5a96e;hpb=a04ad53f2c8d43f9a4beed306f68804bbe578c84;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/events/touch-event-processor.cpp b/dali/internal/event/events/touch-event-processor.cpp index 9a139f5..9472226 100644 --- a/dali/internal/event/events/touch-event-processor.cpp +++ b/dali/internal/event/events/touch-event-processor.cpp @@ -493,18 +493,21 @@ bool TouchEventProcessor::ProcessTouchEvent(const Integration::TouchEvent& event { if(isGeometry) { - Actor* touchConsumedActor(mLastConsumedActor.GetActor()); Actor* interceptedTouchActor(mInterceptedTouchActor.GetActor()); - if(touchConsumedActor) // If there is a consultative actor, send events only to the consultative actor. - { - RenderTask& currentRenderTaskImpl = *currentRenderTask.Get(); - consumedActor = EmitTouchSignals(touchConsumedActor, currentRenderTaskImpl, touchEventImpl, primaryPointState, isGeometry); - } - else if(interceptedTouchActor) // If there is an intercepted actor, send a touch event starting from the intercepted actor. + if(interceptedTouchActor) { - Dali::Actor interceptedTouchActorHandle(interceptedTouchActor); - std::list interceptActorLists = mInterceptedActorLists; - consumedActor = EmitGeoTouchSignals(interceptActorLists, touchEventHandle); + Actor* touchConsumedActor(mLastConsumedActor.GetActor()); + if(touchConsumedActor) // If there is a consumed actor, send events only to the consumed actor. + { + RenderTask& currentRenderTaskImpl = *currentRenderTask.Get(); + consumedActor = EmitTouchSignals(touchConsumedActor, currentRenderTaskImpl, touchEventImpl, primaryPointState, isGeometry); + } + else // If there is an intercepted actor, send a touch event starting from the intercepted actor. + { + Dali::Actor interceptedTouchActorHandle(interceptedTouchActor); + std::list interceptActorLists = mInterceptedActorLists; + consumedActor = EmitGeoTouchSignals(interceptActorLists, touchEventHandle); + } } else { @@ -530,22 +533,26 @@ bool TouchEventProcessor::ProcessTouchEvent(const Integration::TouchEvent& event mLastRenderTask && mLastPrimaryPointState != PointState::FINISHED) { - std::list internalActorLists = mCandidateActorLists; - while(!internalActorLists.empty()) + std::list::reverse_iterator rIter = mCandidateActorLists.rbegin(); + for (; rIter != mCandidateActorLists.rend(); rIter++) { - Actor* actorImpl = internalActorLists.back(); - // Only emit the signal if the actor's touch signal has connections (or derived actor implementation requires touch). - if(actorImpl->GetTouchRequired()) - { - EmitTouchSignals(actorImpl, *mLastRenderTask.Get(), touchEventImpl, PointState::INTERRUPTED, isGeometry); - } - internalActorLists.pop_back(); + Actor* actorImpl(*rIter); + EmitTouchSignals(actorImpl, *mLastRenderTask.Get(), touchEventImpl, PointState::INTERRUPTED, isGeometry); } } } - // Let's propagate touch events from the intercepted actor or start propagating touch events from the leaf actor. - consumedActor = EmitGeoTouchSignals(interceptedActor ? mInterceptedActorLists : mCandidateActorLists, touchEventHandle); + Actor* touchConsumedActor(mLastConsumedActor.GetActor()); + if(touchConsumedActor) // If there is a consumed actor, send events only to the consumed actor. + { + RenderTask& currentRenderTaskImpl = *currentRenderTask.Get(); + consumedActor = EmitTouchSignals(touchConsumedActor, currentRenderTaskImpl, touchEventImpl, primaryPointState, isGeometry); + } + else + { + // Let's propagate touch events from the intercepted actor or start propagating touch events from the leaf actor. + consumedActor = EmitGeoTouchSignals(interceptedActor ? mInterceptedActorLists : mCandidateActorLists, touchEventHandle); + } } } else