diff --git a/frameworks/proxy/event_handler/src/multimodal_event_handler.cpp b/frameworks/proxy/event_handler/src/multimodal_event_handler.cpp index c3a4629fa3b3a72936787bb3f2ec1acab2e68e77..e280f7c2fd19c75c3b90d821c248615077f5bdfe 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 74900012910d90f3153940eb797f21db2264f1e2..a55a9e1f4e7db51d04bd85170276f4731d03e00b 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 lastPointerItems = touchEvent->GetAllPointerItems(); + std::list currenPointerItems = pointerEvent->GetAllPointerItems(); + for (auto &item : lastPointerItems) { + if (!item.IsPressed()) { + continue; + } + auto iter = currenPointerItems.begin(); + for (; iter != currenPointerItems.end(); iter++) { + if (item.GetOriginPointerId() == iter->GetOriginPointerId()) { + break; } } + if (iter == currenPointerItems.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); + MMI_HILOGE("Parameter diffPointerId error, diffPointerId:%{public}d", diffPointerId); return RET_ERR; } - pointerEvent->RemovePointerItem(pointerId); - pointerId += diffPointerId; - pointerItem.SetPointerId(pointerId); - pointerEvent->UpdatePointerItem(pointerId, pointerItem); - pointerEvent->SetPointerId(pointerId); + pointerEvent->RemoveAllPointerItems(); + for (auto &pointerItem : pointerItems) { + int32_t pointId = pointerItem.GetPointerId(); + pointId += diffPointerId; + pointerItem.SetPointerId(pointId); + pointerEvent->AddPointerItem(pointerItem); + } + if (pointerEvent->GetPointerId() <= INT32_MAX - diffPointerId) { + pointerEvent->SetPointerId(pointerEvent->GetPointerId() + diffPointerId); + } } auto iter = targetWindowIdMap.find(pointerEvent->GetPointerId()); if (iter != targetWindowIdMap.end()) {