diff --git a/frameworks/core/common/event_manager.cpp b/frameworks/core/common/event_manager.cpp index d0b9919bcfca8b5e70252bddc61265ad79b0fc31..ffe2f08582ca833ab74e563567bcfb5c919c6f19 100644 --- a/frameworks/core/common/event_manager.cpp +++ b/frameworks/core/common/event_manager.cpp @@ -2039,6 +2039,14 @@ void EventManager::AddGestureSnapshot( info->nodeId = frameNode->GetId(); } info->depth = depth; + if (info->type == "TouchEventActuator") { + auto touchEventActuator = AceType::DynamicCast(target); + if (touchEventActuator) { + std::stringstream oss; + oss << "NeedProgation: " << std::to_string(touchEventActuator->IsNeedPropagation()); + info->customInfo = oss.str(); + } + } auto& eventTree = GetEventTreeRecord(type); eventTree.AddGestureSnapshot(finger, std::move(info)); diff --git a/frameworks/core/components_ng/event/touch_event.cpp b/frameworks/core/components_ng/event/touch_event.cpp index d01820bec22ede1849d56eeab9d5553ca79420cb..35fd1b596be1b50c49ee636d8ac4556f4d6b75d7 100644 --- a/frameworks/core/components_ng/event/touch_event.cpp +++ b/frameworks/core/components_ng/event/touch_event.cpp @@ -36,11 +36,15 @@ void TouchEventActuator::OnFlushTouchEventsEnd() bool TouchEventActuator::HandleEvent(const TouchEvent& point) { + bool isNeedPropagation = false; // if current node is forbidden by monopolize, upper nodes should not response either if (!ShouldResponse()) { + SetNeedPropagation(isNeedPropagation); return false; } - return TriggerTouchCallBack(point); + isNeedPropagation = TriggerTouchCallBack(point); + SetNeedPropagation(isNeedPropagation); + return isNeedPropagation; } bool TouchEventActuator::TriggerTouchCallBack(const TouchEvent& point) diff --git a/frameworks/core/components_ng/event/touch_event.h b/frameworks/core/components_ng/event/touch_event.h index 3fb8b6b6c9aad7ec1c05df73973d0424315a5af7..819e2590da034074fdbbc1744ba871ba77c824a6 100644 --- a/frameworks/core/components_ng/event/touch_event.h +++ b/frameworks/core/components_ng/event/touch_event.h @@ -154,6 +154,14 @@ public: commonTouchEventCallback_ = touchEventActuator->commonTouchEventCallback_; } + void SetNeedPropagation(bool isNeedPropagation) { + isNeedPropagation_ = isNeedPropagation; + } + + bool IsNeedPropagation() const { + return isNeedPropagation_; + } + private: bool TriggerTouchCallBack(const TouchEvent& changedPoint); bool ShouldResponse() override; @@ -172,6 +180,7 @@ private: // if isFlushTouchEventsEnd_ is true, web_pattern start to send touch event list to chromium bool isFlushTouchEventsEnd_ = false; std::map firstInputTimeWithId_; + bool isNeedPropagation_ = false; }; } // namespace OHOS::Ace::NG diff --git a/test/unittest/core/event/touch_event_test_ng.cpp b/test/unittest/core/event/touch_event_test_ng.cpp index 11c9395c242230e28194b9a92696a67f5c7c194b..c7e7956028e1857a94ead80b6cbedd5855698148 100644 --- a/test/unittest/core/event/touch_event_test_ng.cpp +++ b/test/unittest/core/event/touch_event_test_ng.cpp @@ -605,6 +605,32 @@ HWTEST_F(TouchEventTestNg, TouchEventTest006, TestSize.Level1) EXPECT_TRUE(touchEventActuator->TriggerTouchCallBack(touchEvent)); } +/** + * @tc.name: StopPass001 + * @tc.desc: test functions SetNeedPropagation IsNeedPropagation. + * @tc.type: FUNC + */ +HWTEST_F(TouchEventTestNg, StopPass001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create TouchEventActuator. + */ + auto touchEventActuator = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call IsNeedPropagation. + * @tc.expected: Execute function return value is false. + */ + EXPECT_FALSE(touchEventActuator->IsNeedPropagation()); + + /** + * @tc.steps: step3. call SetNeedPropagation(true). + * @tc.expected: Execute function return value is true. + */ + touchEventActuator->SetNeedPropagation(true); + EXPECT_TRUE(touchEventActuator->IsNeedPropagation()); +} + /** * @tc.name: TouchEventOriginalIdTest001 * @tc.desc: TriggerTouchCallBack.