From af0888dfdd3d22100fd32072e74b8bc72ab9d944 Mon Sep 17 00:00:00 2001 From: z-hf Date: Wed, 20 Aug 2025 11:54:03 +0800 Subject: [PATCH 1/4] Multi-finger inject Signed-off-by: z-hf --- .../src/multimodal_event_handler.cpp | 1 + .../message_handle/src/server_msg_handler.cpp | 48 +++++++++++-------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/frameworks/proxy/event_handler/src/multimodal_event_handler.cpp b/frameworks/proxy/event_handler/src/multimodal_event_handler.cpp index c3a4629fa3..e280f7c2fd 100644 --- a/frameworks/proxy/event_handler/src/multimodal_event_handler.cpp +++ b/frameworks/proxy/event_handler/src/multimodal_event_handler.cpp @@ -232,6 +232,7 @@ int32_t MultimodalEventHandler::InjectPointerEvent(std::shared_ptr int32_t useCoordinate) { CHKPR(pointerEvent, ERROR_NULL_POINTER); + EventLogHelper::PrintEventData(pointerEvent, MMI_LOG_HEADER); CHKPR(MULTIMODAL_INPUT_CONNECT_MGR, RET_ERR); int32_t ret = MULTIMODAL_INPUT_CONNECT_MGR->InjectPointerEvent(pointerEvent, isNativeInject, useCoordinate); if (ret != 0) { diff --git a/service/message_handle/src/server_msg_handler.cpp b/service/message_handle/src/server_msg_handler.cpp index 7490001291..8623935c9c 100644 --- a/service/message_handle/src/server_msg_handler.cpp +++ b/service/message_handle/src/server_msg_handler.cpp @@ -319,18 +319,24 @@ void ServerMsgHandler::DealGesturePointers(std::shared_ptr pointer MMI_HILOGI("Check : current PointerEvent's info :Id=>%{public}d, pointerId=>%{public}d", pointerEvent->GetId(), pointerEvent->GetPointerId()); std::shared_ptr touchEvent = WIN_MGR->GetLastPointerEventForGesture(); - if (touchEvent != nullptr) { - std::list listPtItems = touchEvent->GetAllPointerItems(); - for (auto &item : listPtItems) { - MMI_HILOGI("Check : current Item : pointerId=>%{public}d, OriginPointerId=>%{public}d", - item.GetPointerId(), item.GetOriginPointerId()); - if ((item.GetPointerId() % SIMULATE_EVENT_START_ID) != - (pointerEvent->GetPointerId() % SIMULATE_EVENT_START_ID) && item.IsPressed()) { - pointerEvent->AddPointerItem(item); - MMI_HILOGI("Check : add Item : pointerId=>%{public}d, OriginPointerId=>%{public}d", - item.GetPointerId(), item.GetOriginPointerId()); + CHKPV(touchEvent); + std::list listPtItems = touchEvent->GetAllPointerItems(); + std::list pointerItems = pointerEvent->GetAllPointerItems(); + for (auto &item : listPtItems) { + if(!item.IsPressed()) { + continue; + } + auto iter = pointerItems.begin(); + for (; iter != pointerItems.end(); iter++) { + if(item.GetOriginPointerId() == iter->GetOriginPointerId()) { + break; } } + if (iter == pointerItems.end()) { + pointerEvent->AddPointerItem(item); + MMI_HILOGD("Check : add Item : pointerId=>%{public}d, OriginPointerId=>%{public}d", + item.GetPointerId(), item.GetOriginPointerId()); + } } } @@ -674,22 +680,22 @@ int32_t ServerMsgHandler::FixTargetWindowId(std::shared_ptr pointe const std::map& targetWindowIdMap, bool bNeedResetPointerId, int32_t diffPointerId) { CHKPR(pointerEvent, RET_ERR); - int32_t pointerId = pointerEvent->GetPointerId(); - PointerEvent::PointerItem pointerItem; - if (!pointerEvent->GetPointerItem(pointerId, pointerItem)) { - MMI_HILOGE("Can't find pointer item, pointer:%{public}d", pointerId); - return RET_ERR; - } + std::list pointerItems = pointerEvent->GetAllPointerItems(); if (bNeedResetPointerId) { if (diffPointerId <= 0) { MMI_HILOGE("Parameter diffPointerId error, diffPointerId:%{public}d", pointerId); return RET_ERR; } - pointerEvent->RemovePointerItem(pointerId); - pointerId += diffPointerId; - pointerItem.SetPointerId(pointerId); - pointerEvent->UpdatePointerItem(pointerId, pointerItem); - pointerEvent->SetPointerId(pointerId); + pointerEvent->RemoveAllPointerItem(); + for (auto &pointerItem : pointerItems) { + int32_t pointId = pointerItem.GetPointerId(); + pointerId += diffPointerId; + pointerItem.SetPointerId(pointerId); + pointerEvent->AddPointerItem(pointerItem); + } + if (pointerEvent->GetPointerId() <= INT32_MAX - diffPointerId) { + pointerEvent->SetPointerId(pointerEvent->GetPointerId() + diffPointerId); + } } auto iter = targetWindowIdMap.find(pointerEvent->GetPointerId()); if (iter != targetWindowIdMap.end()) { -- Gitee From 80e9b70fb8198f7c93aaf0625f5902d03c8c04cc Mon Sep 17 00:00:00 2001 From: z-hf Date: Wed, 20 Aug 2025 14:13:27 +0800 Subject: [PATCH 2/4] Multi-finger inject Signed-off-by: z-hf --- service/message_handle/src/server_msg_handler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/message_handle/src/server_msg_handler.cpp b/service/message_handle/src/server_msg_handler.cpp index 8623935c9c..1207fce72b 100644 --- a/service/message_handle/src/server_msg_handler.cpp +++ b/service/message_handle/src/server_msg_handler.cpp @@ -683,10 +683,10 @@ int32_t ServerMsgHandler::FixTargetWindowId(std::shared_ptr pointe std::list pointerItems = pointerEvent->GetAllPointerItems(); if (bNeedResetPointerId) { if (diffPointerId <= 0) { - MMI_HILOGE("Parameter diffPointerId error, diffPointerId:%{public}d", pointerId); + MMI_HILOGE("Parameter diffPointerId error, diffPointerId:%{public}d", diffPointerId); return RET_ERR; } - pointerEvent->RemoveAllPointerItem(); + pointerEvent->RemoveAllPointerItems(); for (auto &pointerItem : pointerItems) { int32_t pointId = pointerItem.GetPointerId(); pointerId += diffPointerId; -- Gitee From 40c6754c69f21cfe0500c17246d32f308570ac1c Mon Sep 17 00:00:00 2001 From: z-hf Date: Wed, 20 Aug 2025 14:23:49 +0800 Subject: [PATCH 3/4] Multi-finger inject Signed-off-by: z-hf --- service/message_handle/src/server_msg_handler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/message_handle/src/server_msg_handler.cpp b/service/message_handle/src/server_msg_handler.cpp index 1207fce72b..7598e9e9ad 100644 --- a/service/message_handle/src/server_msg_handler.cpp +++ b/service/message_handle/src/server_msg_handler.cpp @@ -323,7 +323,7 @@ void ServerMsgHandler::DealGesturePointers(std::shared_ptr pointer std::list listPtItems = touchEvent->GetAllPointerItems(); std::list pointerItems = pointerEvent->GetAllPointerItems(); for (auto &item : listPtItems) { - if(!item.IsPressed()) { + if (!item.IsPressed()) { continue; } auto iter = pointerItems.begin(); -- Gitee From 60c01daa0d0c8e4cb84b135e27063faa3acf74f5 Mon Sep 17 00:00:00 2001 From: z-hf Date: Wed, 20 Aug 2025 15:12:21 +0800 Subject: [PATCH 4/4] Multi-finger inject Signed-off-by: z-hf --- .../message_handle/src/server_msg_handler.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/service/message_handle/src/server_msg_handler.cpp b/service/message_handle/src/server_msg_handler.cpp index 7598e9e9ad..a55a9e1f4e 100644 --- a/service/message_handle/src/server_msg_handler.cpp +++ b/service/message_handle/src/server_msg_handler.cpp @@ -320,19 +320,19 @@ void ServerMsgHandler::DealGesturePointers(std::shared_ptr pointer pointerEvent->GetId(), pointerEvent->GetPointerId()); std::shared_ptr touchEvent = WIN_MGR->GetLastPointerEventForGesture(); CHKPV(touchEvent); - std::list listPtItems = touchEvent->GetAllPointerItems(); - std::list pointerItems = pointerEvent->GetAllPointerItems(); - for (auto &item : listPtItems) { + std::list lastPointerItems = touchEvent->GetAllPointerItems(); + std::list currenPointerItems = pointerEvent->GetAllPointerItems(); + for (auto &item : lastPointerItems) { if (!item.IsPressed()) { continue; } - auto iter = pointerItems.begin(); - for (; iter != pointerItems.end(); iter++) { - if(item.GetOriginPointerId() == iter->GetOriginPointerId()) { + auto iter = currenPointerItems.begin(); + for (; iter != currenPointerItems.end(); iter++) { + if (item.GetOriginPointerId() == iter->GetOriginPointerId()) { break; } } - if (iter == pointerItems.end()) { + if (iter == currenPointerItems.end()) { pointerEvent->AddPointerItem(item); MMI_HILOGD("Check : add Item : pointerId=>%{public}d, OriginPointerId=>%{public}d", item.GetPointerId(), item.GetOriginPointerId()); @@ -689,8 +689,8 @@ int32_t ServerMsgHandler::FixTargetWindowId(std::shared_ptr pointe pointerEvent->RemoveAllPointerItems(); for (auto &pointerItem : pointerItems) { int32_t pointId = pointerItem.GetPointerId(); - pointerId += diffPointerId; - pointerItem.SetPointerId(pointerId); + pointId += diffPointerId; + pointerItem.SetPointerId(pointId); pointerEvent->AddPointerItem(pointerItem); } if (pointerEvent->GetPointerId() <= INT32_MAX - diffPointerId) { -- Gitee