diff --git a/editor/libeditor/EditorBase.h b/editor/libeditor/EditorBase.h index d0edbf173702..518f8065fbc2 100644 --- a/editor/libeditor/EditorBase.h +++ b/editor/libeditor/EditorBase.h @@ -626,11 +626,15 @@ class EditorBase : public nsIEditor, // was removed. bool mDidDeleteNonCollapsedRange; + // If we have deleted parent empty blocks, set to true. + bool mDidDeleteEmptyParentBlocks; + private: void Clear() { mDidDeleteSelection = false; mDidExplicitlySetInterLine = false; mDidDeleteNonCollapsedRange = false; + mDidDeleteEmptyParentBlocks = false; } TopLevelEditSubActionData() = default; diff --git a/editor/libeditor/HTMLEditRules.cpp b/editor/libeditor/HTMLEditRules.cpp index 3e69bd78d67a..99e566270707 100644 --- a/editor/libeditor/HTMLEditRules.cpp +++ b/editor/libeditor/HTMLEditRules.cpp @@ -192,7 +192,6 @@ HTMLEditRules::HTMLEditRules() mInitialized(false), mListenerEnabled(false), mReturnInEmptyLIKillsList(false), - mDidEmptyParentBlocksRemoved(false), mRestoreContentEditableCount(false), mJoinOffset(0) { mIsHTMLEditRules = true; @@ -203,7 +202,6 @@ void HTMLEditRules::InitFields() { mHTMLEditor = nullptr; mDocChangeRange = nullptr; mReturnInEmptyLIKillsList = true; - mDidEmptyParentBlocksRemoved = false; mRestoreContentEditableCount = false; mUtilRange = nullptr; mJoinOffset = 0; @@ -497,7 +495,9 @@ nsresult HTMLEditRules::AfterEditInner() { HTMLEditorRef() .TopLevelEditSubActionDataRef() .mDidDeleteNonCollapsedRange && - !mDidEmptyParentBlocksRemoved) { + !HTMLEditorRef() + .TopLevelEditSubActionDataRef() + .mDidDeleteEmptyParentBlocks) { nsresult rv = InsertBRIfNeeded(); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; @@ -608,7 +608,9 @@ nsresult HTMLEditRules::AfterEditInner() { // we haven't removed new empty blocks. Note that if empty block parents // are removed, Selection should've been adjusted by the method which // did it. - if (!mDidEmptyParentBlocksRemoved) { + if (!HTMLEditorRef() + .TopLevelEditSubActionDataRef() + .mDidDeleteEmptyParentBlocks) { switch (HTMLEditorRef().GetTopLevelEditSubAction()) { case EditSubAction::eInsertText: case EditSubAction::eInsertTextComingFromIME: @@ -3172,11 +3174,15 @@ nsresult HTMLEditRules::WillDeleteSelection( if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } - mDidEmptyParentBlocksRemoved = rv == NS_OK; + HTMLEditorRef() + .TopLevelEditSubActionDataRef() + .mDidDeleteEmptyParentBlocks = rv == NS_OK; } // If we removed parent blocks, Selection should be collapsed at where // the most ancestor empty block has been. - if (mDidEmptyParentBlocksRemoved) { + if (HTMLEditorRef() + .TopLevelEditSubActionDataRef() + .mDidDeleteEmptyParentBlocks) { rv = SelectionRefPtr()->Collapse(startNode, startOffset); if (NS_WARN_IF(!CanHandleEditAction())) { return NS_ERROR_EDITOR_DESTROYED; diff --git a/editor/libeditor/HTMLEditRules.h b/editor/libeditor/HTMLEditRules.h index 190c6817cde6..8661dee169c2 100644 --- a/editor/libeditor/HTMLEditRules.h +++ b/editor/libeditor/HTMLEditRules.h @@ -1351,7 +1351,6 @@ class HTMLEditRules : public TextEditRules { bool mInitialized; bool mListenerEnabled; bool mReturnInEmptyLIKillsList; - bool mDidEmptyParentBlocksRemoved; bool mRestoreContentEditableCount; RefPtr mUtilRange; // Need to remember an int across willJoin/didJoin...