diff --git a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.cpp b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.cpp index 2ed0f122ddf6231a865c7aeacb934fed7e566e95..2faa453800040da444eedaa33d8c822a208f0b5f 100644 --- a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.cpp +++ b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.cpp @@ -2055,6 +2055,7 @@ void RichEditorPattern::HandleLongPress(GestureEvent& info) void RichEditorPattern::HandleDoubleClickOrLongPress(GestureEvent& info) { TAG_LOGD(AceLogTag::ACE_RICH_TEXT, "caretUpdateType=%{public}d", caretUpdateType_); + textResponseType_ = TextResponseType::LONG_PRESS; if (caretUpdateType_ == CaretUpdateType::LONG_PRESSED) { HandleUserLongPressEvent(info); } @@ -2088,11 +2089,9 @@ void RichEditorPattern::HandleDoubleClickOrLongPress(GestureEvent& info) RequestKeyboard(false, true, true); } if (info.GetSourceDevice() != SourceType::MOUSE || caretUpdateType_ != CaretUpdateType::DOUBLE_CLICK) { - if (selectOverlay_->SelectOverlayIsOn() && caretUpdateType_ == CaretUpdateType::LONG_PRESSED) { - selectOverlay_->ProcessOverlay({.animation = true, .requestCode = REQUEST_RECREATE}); - } else { - selectOverlay_->ProcessOverlay({.animation = true}); - } + int32_t requestCode = (selectOverlay_->SelectOverlayIsOn() && caretUpdateType_ == CaretUpdateType::LONG_PRESSED) + ? REQUEST_RECREATE : 0; + selectOverlay_->ProcessOverlay({.animation = true, .requestCode = requestCode}); FireOnSelectionChange(selectStart, selectEnd); if (!selectOverlay_->IsSingleHandle()) { StopTwinkling(); @@ -4797,11 +4796,7 @@ void RichEditorPattern::CloseSelectionMenu() void RichEditorPattern::CloseSelectOverlay() { - if (!selectOverlayProxy_ || selectOverlayProxy_->IsClosed()) { - return; - } TAG_LOGD(AceLogTag::ACE_RICH_TEXT, "CloseSelectOverlay"); - TextPattern::CloseSelectOverlay(true); selectOverlay_->CloseOverlay(true, CloseReason::CLOSE_REASON_NORMAL); } @@ -5439,6 +5434,7 @@ void RichEditorPattern::OnScrollEndCallback() if (scrollBar) { scrollBar->ScheduleDisappearDelayTask(); } + selectOverlay_->UpdateMenuOffset(); if (IsSelectAreaVisible()) { selectOverlay_->ShowMenu(); } @@ -5628,7 +5624,7 @@ void RichEditorPattern::OnAutoScroll(AutoScrollParam param) } else { MoveFirstHandle(newOffset); } - TextPattern::OnHandleMove(param.handleRect, param.isFirstHandle); + selectOverlay_->OnHandleMove(param.handleRect, param.isFirstHandle); if (NearEqual(newOffset, 0.0f)) { return; } diff --git a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_select_overlay.cpp b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_select_overlay.cpp index e3fde6c64f3ae80761c9ebc3ba8bddb9abe6ea7f..6fd82147f6cc7603b001cd6d11aee29182d7489e 100644 --- a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_select_overlay.cpp +++ b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_select_overlay.cpp @@ -309,17 +309,6 @@ void RichEditorSelectOverlay::OnCloseOverlay(OptionMenuType menuType, CloseReaso } } - -void RichEditorSelectOverlay::OnHandleGlobalTouchEvent(SourceType sourceType, TouchType touchType) -{ - auto pattern = GetPattern(); - CHECK_NULL_VOID(pattern); - if (IsMouseClickDown(sourceType, touchType) || IsTouchUp(sourceType, touchType)) { - CloseOverlay(false, CloseReason::CLOSE_REASON_CLICK_OUTSIDE); - pattern->ResetSelection(); - } -} - std::optional RichEditorSelectOverlay::GetSelectOverlayInfo() { auto manager = GetManager(); @@ -334,6 +323,13 @@ bool RichEditorSelectOverlay::IsSingleHandleShow() return manager->IsSingleHandle(); } +void RichEditorSelectOverlay::UpdateMenuOffset() +{ + auto manager = GetManager(); + CHECK_NULL_VOID(manager); + manager->MarkInfoChange(DIRTY_SELECT_AREA | DIRTY_ALL_MENU_ITEM); +} + bool RichEditorSelectOverlay::IsHandlesShow() { auto manager = GetManager(); diff --git a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_select_overlay.h b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_select_overlay.h index d1613bcd4998e4509cee37943228abdafc1f799c..463e1c30a78cc6058dae5b9ca8ad1714261394e7 100644 --- a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_select_overlay.h +++ b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_select_overlay.h @@ -46,9 +46,10 @@ public: void OnHandleMove(const RectF& rect, bool isFirst) override; void OnHandleMoveDone(const RectF& rect, bool isFirst) override; void OnCloseOverlay(OptionMenuType menuType, CloseReason reason) override; - void OnHandleGlobalTouchEvent(SourceType sourceType, TouchType touchType) override; + void OnHandleGlobalTouchEvent(SourceType sourceType, TouchType touchType) override {}; std::optional GetSelectOverlayInfo(); bool IsSingleHandleShow(); + void UpdateMenuOffset(); bool IsHandlesShow(); private: