diff --git a/window_scene/session/host/include/scene_session.h b/window_scene/session/host/include/scene_session.h index ca78210ea266e3c94022a3e49048b3a2f14a6e7a..557b4bc0de6798985407def1b52e2bb9f3eeb296 100644 --- a/window_scene/session/host/include/scene_session.h +++ b/window_scene/session/host/include/scene_session.h @@ -519,6 +519,7 @@ public: bool IsDecorEnable() const; bool IsAppSession() const; bool IsAppOrLowerSystemSession() const; + bool IsFullScreenSystemPanel() const; bool IsSystemSessionAboveApp() const; bool IsTurnScreenOn() const; bool IsKeepScreenOn() const; diff --git a/window_scene/session/host/src/scene_session.cpp b/window_scene/session/host/src/scene_session.cpp index 37f54ff8e197d83efe278b7281828fca4e440492..c62640a5a8e3a04f94b8d909740b6e5fa050464f 100644 --- a/window_scene/session/host/src/scene_session.cpp +++ b/window_scene/session/host/src/scene_session.cpp @@ -4913,6 +4913,17 @@ bool SceneSession::IsAppOrLowerSystemSession() const return IsAppSession(); } +/** @note @window.focus */ +bool SceneSession::IsFullScreenSystemPanel() const{ + WindowType windowType = GetWindowType(); + if (windowType == WindowType::WINDOW_TYPE_PANEL && + (systemConfig_.IsPhoneWindow() || systemConfig_.IsPadWindow()) && + sessionInfo_.bundleName_.find("SCBDropdownPanel") != std::string::npos) { + return true; + } + return false; +} + /** @note @window.focus */ bool SceneSession::IsSystemSessionAboveApp() const { diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index d51cbf881acf09ec5a5def7b9947336c177c238c..eb0f79ce4ab9a69ebdcd83a3e2d3728f770f77f4 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -7579,7 +7579,8 @@ bool SceneSessionManager::CheckClickFocusIsDownThroughFullScreen(const sptr& sceneSession, FocusChangeReason reason) { if (focusedSession->GetWindowType() != WindowType::WINDOW_TYPE_GLOBAL_SEARCH && - focusedSession->GetWindowType() != WindowType::WINDOW_TYPE_NEGATIVE_SCREEN) { + focusedSession->GetWindowType() != WindowType::WINDOW_TYPE_NEGATIVE_SCREEN && + !focusedSession->IsFullScreenSystemPanel()) { return false; } if (reason != FocusChangeReason::CLICK || !focusedSession->GetBlockingFocus()) {