diff --git a/frameworks/core/components_ng/pattern/overlay/overlay_manager.h b/frameworks/core/components_ng/pattern/overlay/overlay_manager.h index a12e296cd737c9cd1539b570bee0af4a9996dff6..49cd74a9d60c2322727bb429652cedede1547fed 100644 --- a/frameworks/core/components_ng/pattern/overlay/overlay_manager.h +++ b/frameworks/core/components_ng/pattern/overlay/overlay_manager.h @@ -398,6 +398,8 @@ public: return rootNodeWeak_; } + void ModalPageLostFocus(const RefPtr& node); + private: void PopToast(int32_t targetId); @@ -440,7 +442,6 @@ private: void PlayAlphaModalTransition(const RefPtr& modalNode, bool isTransitionIn); void FireModalPageShow(); void FireModalPageHide(); - void ModalPageLostFocus(const RefPtr& node); void SetSheetBackgroundBlurStyle(const RefPtr& sheetNode, const BlurStyleOption& bgBlurStyle); diff --git a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp index 589f8660031b42d22de1c4f57a71b2c8e870852f..90739e1fd2f1e6ec0788cd65e8f1eac0357e08b9 100644 --- a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp +++ b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp @@ -559,12 +559,23 @@ void SheetPresentationPattern::SheetInteractiveDismiss(bool isDragClose, float d } CallShouldDismiss(); } else { - auto sheetType = GetSheetType(); - if (sheetType == SheetType::SHEET_POPUP) { - BubbleStyleSheetTransition(false); - } else { - SheetTransition(false, dragVelocity); - } + DismissTransition(false, dragVelocity); + } +} + +void SheetPresentationPattern::DismissTransition(bool isTransitionIn, float dragVelocity) +{ + auto pipeline = PipelineContext::GetCurrentContext(); + CHECK_NULL_VOID(pipeline); + auto overlayManager = pipeline->GetOverlayManager(); + CHECK_NULL_VOID(overlayManager); + overlayManager->ModalPageLostFocus(GetHost()); + + auto sheetType = GetSheetType(); + if (sheetType == SheetType::SHEET_POPUP) { + BubbleStyleSheetTransition(isTransitionIn); + } else { + SheetTransition(isTransitionIn, dragVelocity); } } diff --git a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.h b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.h index 7e79555f3851551c558fe0f960d9a63a8e9981d5..e14e806643ebad383b54df811c00689c85ba17aa 100644 --- a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.h +++ b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.h @@ -115,12 +115,7 @@ public: void DismissSheet() { - auto sheetType = GetSheetType(); - if (sheetType == SheetType::SHEET_POPUP) { - BubbleStyleSheetTransition(false); - } else { - SheetTransition(false); - } + DismissTransition(false); } void InitialLayoutProps(); @@ -313,6 +308,7 @@ private: std::string MoveTo(double x, double y); std::string LineTo(double x, double y); std::string ArcTo(double rx, double ry, double rotation, int32_t arc_flag, double x, double y); + void DismissTransition(bool isTransitionIn, float dragVelocity = 0.0f); uint32_t keyboardHeight_ = 0; int32_t targetId_ = -1; std::optional titleId_;