diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 5d52dadf6a936aa6d1d5a1ece35321eeeb51fc02..93f040ec1b57d270e1c1b34fe09fa1d25b2f0621 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -4391,11 +4391,28 @@ void SceneSessionManager::NotifySessionTouchOutside(int32_t persistentId) TLOGND(WmsLogTag::WMS_KEYBOARD, "persistentId: %{public}d, callingSessionId: %{public}d", persistentId, callingSessionId); } + if (sceneSession == nullptr) { + TLOGE(WmsLogTag::WMS_EVENT, "sceneSession is nullptr"); + return; + } + sptr windowSessionProperty = sceneSession->GetSessionProperty(); + if (windowSessionProperty == nullptr) { + TLOGE(WmsLogTag::WMS_EVENT, "GetSessionProperty is nullptr"); + return; + } + DisplayId touchDisplayGroupId = GetDisplayGroupId(windowSessionProperty->GetDisplayId()); std::shared_lock lock(sceneSessionMapMutex_); for (const auto& [_, sceneSession] : sceneSessionMap_) { if (sceneSession == nullptr) { continue; } + sptr windowSessionProperty = sceneSession->GetSessionProperty(); + if (windowSessionProperty == nullptr) { + continue; + } + if (GetDisplayGroupId(windowSessionProperty->GetDisplayId()) != touchDisplayGroupId) { + continue; + } if (!(sceneSession->IsVisible() || sceneSession->GetSessionState() == SessionState::STATE_FOREGROUND || sceneSession->GetSessionState() == SessionState::STATE_ACTIVE)) { diff --git a/window_scene/test/unittest/scene_session_manager_test3.cpp b/window_scene/test/unittest/scene_session_manager_test3.cpp index ec66c1049af080453d88aea7b7d94af1869adf98..d8fd290caa8dd9c046b23a3ce18d7b04b5dcf76f 100644 --- a/window_scene/test/unittest/scene_session_manager_test3.cpp +++ b/window_scene/test/unittest/scene_session_manager_test3.cpp @@ -798,6 +798,9 @@ HWTEST_F(SceneSessionManagerTest3, NotifySessionTouchOutside, TestSize.Level1) int ret = 0; ssm_->NotifySessionTouchOutside(0); ASSERT_EQ(ret, 0); + sptr session = ssm_->GetSceneSession(65535); + ssm_->NotifySessionTouchOutside(65535); + ASSERT_EQ(session, nullptr); } /**