diff options
-rw-r--r-- | editor/libeditor/HTMLEditRules.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/editor/libeditor/HTMLEditRules.cpp b/editor/libeditor/HTMLEditRules.cpp index 13411b4f6..156bbc179 100644 --- a/editor/libeditor/HTMLEditRules.cpp +++ b/editor/libeditor/HTMLEditRules.cpp @@ -2199,12 +2199,24 @@ HTMLEditRules::WillDeleteSelection(Selection* aSelection, bool handled = false, canceled = false; rv = TryToJoinBlocks(*leftNode->AsContent(), *rightNode->AsContent(), &canceled, &handled); - // TODO: If it does nothing and previous or next node is a text node, - // we should modify it. - *aHandled = true; + *aHandled |= handled; *aCancel |= canceled; NS_ENSURE_SUCCESS(rv, rv); } + + // If TryToJoinBlocks() didn't handle it and it's not canceled, + // user may want to modify the start leaf node or the last leaf node + // of the block. + if (!*aHandled && !*aCancel && leafNode != startNode) { + int32_t offset = + aAction == nsIEditor::ePrevious ? + static_cast<int32_t>(leafNode->Length()) : 0; + aSelection->Collapse(leafNode, offset); + return WillDeleteSelection(aSelection, aAction, aStripWrappers, + aCancel, aHandled); + } + + // Otherwise, we must have deleted the selection as user expected. aSelection->Collapse(selPointNode, selPointOffset); return NS_OK; } |