Bug 1451672 - part 10: Rename TextEditor::DeleteSelectionImpl() to TextEditor::DeleteSelectionWithTransaction() r?m_kato
MozReview-Commit-ID: 8nypHV8X3js
--- a/editor/libeditor/HTMLEditRules.cpp
+++ b/editor/libeditor/HTMLEditRules.cpp
@@ -2714,77 +2714,81 @@ HTMLEditRules::WillDeleteSelection(Selec
AutoTransactionsConserveSelection dontChangeMySelection(mHTMLEditor);
rv = WSRunObject::PrepareToDeleteRange(mHTMLEditor,
address_of(startNode), &startOffset,
address_of(endNode), &endOffset);
NS_ENSURE_SUCCESS(rv, rv);
}
{
+ if (NS_WARN_IF(!mHTMLEditor)) {
+ return NS_ERROR_FAILURE;
+ }
+ RefPtr<HTMLEditor> htmlEditor(mHTMLEditor);
+
// Track location of where we are deleting
- NS_ENSURE_STATE(mHTMLEditor);
- AutoTrackDOMPoint startTracker(mHTMLEditor->mRangeUpdater,
+ AutoTrackDOMPoint startTracker(htmlEditor->mRangeUpdater,
address_of(startNode), &startOffset);
- AutoTrackDOMPoint endTracker(mHTMLEditor->mRangeUpdater,
+ AutoTrackDOMPoint endTracker(htmlEditor->mRangeUpdater,
address_of(endNode), &endOffset);
// We are handling all ranged deletions directly now.
*aHandled = true;
if (endNode == startNode) {
- NS_ENSURE_STATE(mHTMLEditor);
- rv = mHTMLEditor->DeleteSelectionImpl(aAction, aStripWrappers);
- NS_ENSURE_SUCCESS(rv, rv);
+ rv = htmlEditor->DeleteSelectionWithTransaction(aAction, aStripWrappers);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
} else {
// Figure out mailcite ancestors
nsCOMPtr<Element> startCiteNode = GetTopEnclosingMailCite(*startNode);
nsCOMPtr<Element> endCiteNode = GetTopEnclosingMailCite(*endNode);
// If we only have a mailcite at one of the two endpoints, set the
// directionality of the deletion so that the selection will end up
// outside the mailcite.
if (startCiteNode && !endCiteNode) {
aAction = nsIEditor::eNext;
} else if (!startCiteNode && endCiteNode) {
aAction = nsIEditor::ePrevious;
}
// Figure out block parents
- NS_ENSURE_STATE(mHTMLEditor);
nsCOMPtr<Element> leftParent = HTMLEditor::GetBlock(*startNode);
nsCOMPtr<Element> rightParent = HTMLEditor::GetBlock(*endNode);
// Are endpoint block parents the same? Use default deletion
if (leftParent && leftParent == rightParent) {
NS_ENSURE_STATE(mHTMLEditor);
- mHTMLEditor->DeleteSelectionImpl(aAction, aStripWrappers);
+ htmlEditor->DeleteSelectionWithTransaction(aAction, aStripWrappers);
} else {
// Deleting across blocks. Are the blocks of same type?
NS_ENSURE_STATE(leftParent && rightParent);
// Are the blocks siblings?
nsCOMPtr<nsINode> leftBlockParent = leftParent->GetParentNode();
nsCOMPtr<nsINode> rightBlockParent = rightParent->GetParentNode();
// MOOSE: this could conceivably screw up a table.. fix me.
- NS_ENSURE_STATE(mHTMLEditor);
if (leftBlockParent == rightBlockParent &&
- mHTMLEditor->AreNodesSameType(leftParent, rightParent) &&
+ htmlEditor->AreNodesSameType(leftParent, rightParent) &&
// XXX What's special about these three types of block?
(leftParent->IsHTMLElement(nsGkAtoms::p) ||
HTMLEditUtils::IsListItem(leftParent) ||
HTMLEditUtils::IsHeader(*leftParent))) {
// First delete the selection
- NS_ENSURE_STATE(mHTMLEditor);
- rv = mHTMLEditor->DeleteSelectionImpl(aAction, aStripWrappers);
- NS_ENSURE_SUCCESS(rv, rv);
+ rv = htmlEditor->DeleteSelectionWithTransaction(aAction,
+ aStripWrappers);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
// Join blocks
- NS_ENSURE_STATE(mHTMLEditor);
EditorDOMPoint pt =
- mHTMLEditor->JoinNodesDeepWithTransaction(*leftParent,
- *rightParent);
+ htmlEditor->JoinNodesDeepWithTransaction(*leftParent,
+ *rightParent);
if (NS_WARN_IF(!pt.IsSet())) {
return NS_ERROR_FAILURE;
}
// Fix up selection
ErrorResult error;
aSelection->Collapse(pt, error);
if (NS_WARN_IF(error.Failed())) {
return error.StealNSResult();
@@ -2817,52 +2821,42 @@ HTMLEditRules::WillDeleteSelection(Selec
// all nodes except non-visible textnodes and breaks.
if (join && origCollapsed) {
if (!somenode->IsContent()) {
join = false;
continue;
}
nsCOMPtr<nsIContent> content = somenode->AsContent();
if (Text* text = content->GetAsText()) {
- NS_ENSURE_STATE(mHTMLEditor);
- join = !mHTMLEditor->IsInVisibleTextFrames(*text);
+ join = !htmlEditor->IsInVisibleTextFrames(*text);
} else {
- NS_ENSURE_STATE(mHTMLEditor);
join = content->IsHTMLElement(nsGkAtoms::br) &&
- !mHTMLEditor->IsVisibleBRElement(somenode);
+ !htmlEditor->IsVisibleBRElement(somenode);
}
}
}
}
// Check endpoints for possible text deletion. We can assume that if
// text node is found, we can delete to end or to begining as
// appropriate, since the case where both sel endpoints in same text
// node was already handled (we wouldn't be here)
if (startNode->GetAsText() &&
startNode->Length() > static_cast<uint32_t>(startOffset)) {
- if (NS_WARN_IF(!mHTMLEditor)) {
- return NS_ERROR_FAILURE;
- }
- RefPtr<HTMLEditor> htmlEditor(mHTMLEditor);
// Delete to last character
OwningNonNull<CharacterData> dataNode =
*static_cast<CharacterData*>(startNode.get());
rv = htmlEditor->DeleteTextWithTransaction(
dataNode, startOffset,
startNode->Length() - startOffset);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
}
if (endNode->GetAsText() && endOffset) {
- if (NS_WARN_IF(!mHTMLEditor)) {
- return NS_ERROR_FAILURE;
- }
- RefPtr<HTMLEditor> htmlEditor(mHTMLEditor);
// Delete to first character
OwningNonNull<CharacterData> dataNode =
*static_cast<CharacterData*>(endNode.get());
rv = htmlEditor->DeleteTextWithTransaction(dataNode, 0, endOffset);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
}
--- a/editor/libeditor/HTMLEditor.cpp
+++ b/editor/libeditor/HTMLEditor.cpp
@@ -3143,22 +3143,23 @@ HTMLEditor::GetEmbeddedObjects(nsIArray*
iter->Next();
}
nodes.forget(aNodeList);
return rv;
}
nsresult
-HTMLEditor::DeleteSelectionImpl(EDirection aAction,
- EStripWrappers aStripWrappers)
+HTMLEditor::DeleteSelectionWithTransaction(EDirection aAction,
+ EStripWrappers aStripWrappers)
{
MOZ_ASSERT(aStripWrappers == eStrip || aStripWrappers == eNoStrip);
- nsresult rv = TextEditor::DeleteSelectionImpl(aAction, aStripWrappers);
+ nsresult rv =
+ TextEditor::DeleteSelectionWithTransaction(aAction, aStripWrappers);
NS_ENSURE_SUCCESS(rv, rv);
// If we weren't asked to strip any wrappers, we're done.
if (aStripWrappers == eNoStrip) {
return NS_OK;
}
RefPtr<Selection> selection = GetSelection();
--- a/editor/libeditor/HTMLEditor.h
+++ b/editor/libeditor/HTMLEditor.h
@@ -378,18 +378,27 @@ public:
/**
* Join together any adjacent editable text nodes in the range.
*/
nsresult CollapseAdjacentTextNodes(nsRange* aRange);
virtual bool AreNodesSameType(nsIContent* aNode1,
nsIContent* aNode2) override;
- virtual nsresult DeleteSelectionImpl(EDirection aAction,
- EStripWrappers aStripWrappers) override;
+ /**
+ * DeleteSelectionWithTransaction() removes selected content or content
+ * around caret with transactions.
+ *
+ * @param aDirection How much range should be removed.
+ * @param aStripWrappers Whether the parent blocks should be removed
+ * when they become empty.
+ */
+ virtual nsresult
+ DeleteSelectionWithTransaction(EDirection aAction,
+ EStripWrappers aStripWrappers) override;
/**
* DeleteNodeWithTransaction() removes aNode from the DOM tree if it's
* modifiable. Note that this is not an override of same method of
* EditorBase.
*
* @param aNode The node to be removed from the DOM tree.
*/
--- a/editor/libeditor/TextEditRules.cpp
+++ b/editor/libeditor/TextEditRules.cpp
@@ -1065,17 +1065,18 @@ TextEditRules::WillDeleteSelection(Selec
NS_ENSURE_STATE(mTextEditor);
rv = mTextEditor->ExtendSelectionForDelete(aSelection, &aCollapsedAction);
NS_ENSURE_SUCCESS(rv, rv);
}
NS_ENSURE_STATE(mTextEditor);
nsresult rv =
- mTextEditor->DeleteSelectionImpl(aCollapsedAction, nsIEditor::eStrip);
+ mTextEditor->DeleteSelectionWithTransaction(aCollapsedAction,
+ nsIEditor::eStrip);
NS_ENSURE_SUCCESS(rv, rv);
*aHandled = true;
ASSERT_PASSWORD_LENGTHS_EQUAL()
return NS_OK;
}
nsresult
--- a/editor/libeditor/TextEditor.cpp
+++ b/editor/libeditor/TextEditor.cpp
@@ -560,17 +560,17 @@ TextEditor::ExtendSelectionForDelete(Sel
*aAction == eToEndOfLine) {
nsCOMPtr<nsISelectionController> selCont;
GetSelectionController(getter_AddRefs(selCont));
NS_ENSURE_TRUE(selCont, NS_ERROR_NO_INTERFACE);
switch (*aAction) {
case eNextWord: {
nsresult rv = selCont->WordExtendForDelete(true);
- // DeleteSelectionImpl doesn't handle these actions
+ // DeleteSelectionWithTransaction() doesn't handle these actions
// because it's inside batching, so don't confuse it:
*aAction = eNone;
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
return NS_OK;
}
case ePreviousWord: {
@@ -710,28 +710,28 @@ TextEditor::DeleteSelectionAsAction(EDir
RulesInfo ruleInfo(EditAction::deleteSelection);
ruleInfo.collapsedAction = aDirection;
ruleInfo.stripWrappers = aStripWrappers;
bool cancel, handled;
nsresult rv = rules->WillDoAction(selection, &ruleInfo, &cancel, &handled);
NS_ENSURE_SUCCESS(rv, rv);
if (!cancel && !handled) {
- rv = DeleteSelectionImpl(aDirection, aStripWrappers);
+ rv = DeleteSelectionWithTransaction(aDirection, aStripWrappers);
}
if (!cancel) {
// post-process
rv = rules->DidDoAction(selection, &ruleInfo, rv);
}
return rv;
}
nsresult
-TextEditor::DeleteSelectionImpl(EDirection aDirection,
- EStripWrappers aStripWrappers)
+TextEditor::DeleteSelectionWithTransaction(EDirection aDirection,
+ EStripWrappers aStripWrappers)
{
MOZ_ASSERT(aStripWrappers == eStrip || aStripWrappers == eNoStrip);
RefPtr<Selection> selection = GetSelection();
if (NS_WARN_IF(!selection)) {
return NS_ERROR_NOT_INITIALIZED;
}
--- a/editor/libeditor/TextEditor.h
+++ b/editor/libeditor/TextEditor.h
@@ -146,18 +146,27 @@ public:
*
* @param aDirection How much range should be removed.
* @param aStripWrappers Whether the parent blocks should be removed
* when they become empty.
*/
nsresult DeleteSelectionAsAction(EDirection aDirection,
EStripWrappers aStripWrappers);
- virtual nsresult DeleteSelectionImpl(EDirection aAction,
- EStripWrappers aStripWrappers);
+ /**
+ * DeleteSelectionWithTransaction() removes selected content or content
+ * around caret with transactions.
+ *
+ * @param aDirection How much range should be removed.
+ * @param aStripWrappers Whether the parent blocks should be removed
+ * when they become empty.
+ */
+ virtual nsresult
+ DeleteSelectionWithTransaction(EDirection aAction,
+ EStripWrappers aStripWrappers);
// Utility Routines, not part of public API
NS_IMETHOD TypedText(const nsAString& aString, ETypingAction aAction);
nsresult InsertTextAt(const nsAString& aStringToInsert,
nsINode* aDestinationNode,
int32_t aDestOffset,
bool aDoDeleteSelection);