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 e29482a3a99491193e95493a2d110e4ff67ed50f..c1920208d582d1733956293d4a0cf96658824072 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 @@ -2488,28 +2488,18 @@ bool RichEditorPattern::CloseKeyboard(bool forceClose) return false; } -void RichEditorPattern::HandleDraggableFlag(GestureEvent& info, bool& isInterceptEvent) +void RichEditorPattern::HandleDraggableFlag(bool isInterceptEvent) { auto gestureHub = GetGestureEventHub(); - if (isSpanStringMode_) { - isInterceptEvent = false; - if (gestureHub) { - gestureHub->SetIsTextDraggable(false); - } + CHECK_NULL_VOID(gestureHub); + if (isInterceptEvent || copyOption_ == CopyOptions::None) { + gestureHub->SetIsTextDraggable(false); return; } - if (gestureHub && copyOption_ != CopyOptions::None && BetweenSelectedPosition(info.GetGlobalLocation())) { - dragBoxes_ = GetTextBoxes(); - // prevent long press event from being triggered when dragging - bool isContentDraggalbe = JudgeContentDraggable(); - gestureHub->SetIsTextDraggable(isContentDraggalbe); - isInterceptEvent = true; - } else { - isInterceptEvent = false; - if (gestureHub) { - gestureHub->SetIsTextDraggable(false); - } - } + dragBoxes_ = GetTextBoxes(); + // prevent long press event from being triggered when dragging + bool isContentDraggalbe = JudgeContentDraggable(); + gestureHub->SetIsTextDraggable(isContentDraggalbe); } bool RichEditorPattern::JudgeContentDraggable() @@ -2622,13 +2612,21 @@ void RichEditorPattern::HandleDoubleClickOrLongPress(GestureEvent& info) host->MarkDirtyNode(PROPERTY_UPDATE_RENDER); ShowSelectOverlay(textSelector_.firstHandle, textSelector_.secondHandle); } - bool isInterceptEvent = false; - HandleDraggableFlag(info, isInterceptEvent); + bool isInterceptEvent = BetweenSelectedPosition(info.GetGlobalLocation()); + HandleDraggableFlag(isInterceptEvent); // check current is mouse long press isInterceptEvent |= (isMousePressed_ && caretUpdateType_== CaretUpdateType::LONG_PRESSED); - if (isInterceptEvent) { - return; + + // SpanString do not support drag + if (isSpanStringMode_) { + auto gestureHub = GetGestureEventHub(); + if (gestureHub) { + gestureHub->SetIsTextDraggable(false); + } + isInterceptEvent = false; } + + CHECK_NULL_VOID(!isInterceptEvent); HandleDoubleClickOrLongPress(info, host); } @@ -5675,7 +5673,7 @@ bool RichEditorPattern::BetweenSelectedPosition(const Offset& globalOffset) localOffset = ConvertGlobalToLocalOffset(globalOffset); } auto eventHub = host->GetEventHub(); - if (copyOption_ != CopyOptions::None && GreatNotEqual(textSelector_.GetTextEnd(), textSelector_.GetTextStart())) { + if (GreatNotEqual(textSelector_.GetTextEnd(), textSelector_.GetTextStart())) { // Determine if the pan location is in the selected area auto selectedRects = paragraphs_.GetRects(textSelector_.GetTextStart(), textSelector_.GetTextEnd()); auto panOffset = OffsetF(localOffset.GetX(), localOffset.GetY()) - GetTextRect().GetOffset() + diff --git a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.h b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.h index 0e9f8cda437116bd58b1a2303e5d4b3fa2bdd671..35b7cf74008003f59effad56231ded2a31365b75 100644 --- a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.h +++ b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.h @@ -421,7 +421,7 @@ public: void HandleOnSelectAll() override; void OnCopyOperation(bool isUsingExternalKeyboard = false); void HandleOnCopy(bool isUsingExternalKeyboard = false) override; - void HandleDraggableFlag(GestureEvent& info, bool& isInterceptEvent); + void HandleDraggableFlag(bool isInterceptEvent); bool JudgeContentDraggable(); std::pair CalculateCaretOffsetAndHeight(); OffsetF CalculateEmptyValueCaretRect();