From 32d2200f6f537b8c9b340b9ad5f8991c368eaeef Mon Sep 17 00:00:00 2001 From: "Olli.Pettay@helsinki.fi" Date: Sat, 25 Aug 2007 05:37:38 -0700 Subject: [PATCH] Bug 382527, r=neil, sr=peterv, a=1.9+ --- editor/libeditor/base/nsEditor.cpp | 35 +++++++++++++++--------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/editor/libeditor/base/nsEditor.cpp b/editor/libeditor/base/nsEditor.cpp index 9e87379e7f18..bfe8a85516cb 100644 --- a/editor/libeditor/base/nsEditor.cpp +++ b/editor/libeditor/base/nsEditor.cpp @@ -4789,10 +4789,6 @@ nsEditor::CreateTxnForDeleteSelection(nsIEditor::EDirection aAction, return NS_ERROR_NULL_POINTER; *aTxn = nsnull; -#ifdef DEBUG_akkana - NS_ASSERTION(aAction != eNextWord && aAction != ePreviousWord && aAction != eToEndOfLine, "CreateTxnForDeleteSelection: unsupported action!"); -#endif - nsCOMPtr selCon = do_QueryReferent(mSelConWeak); if (!selCon) return NS_ERROR_NOT_INITIALIZED; nsCOMPtr selection; @@ -4827,18 +4823,23 @@ nsEditor::CreateTxnForDeleteSelection(nsIEditor::EDirection aAction, range->GetCollapsed(&isCollapsed); if (!isCollapsed) { - DeleteRangeTxn *txn; - result = TransactionFactory::GetNewTransaction(DeleteRangeTxn::GetCID(), (EditTxn **)&txn); + nsRefPtr editTxn; + result = + TransactionFactory::GetNewTransaction(DeleteRangeTxn::GetCID(), + getter_AddRefs(editTxn)); + nsRefPtr txn = + static_cast(editTxn.get()); if (NS_SUCCEEDED(result) && txn) { txn->Init(this, range, &mRangeUpdater); (*aTxn)->AppendChild(txn); - NS_RELEASE(txn); } else result = NS_ERROR_OUT_OF_MEMORY; } - else + // Same with range as with selection; if it is collapsed and action + // is eNone, do nothing. + else if (aAction != eNone) { // we have an insertion point. delete the thing in front of it or behind it, depending on aAction result = CreateTxnForDeleteInsertionPoint(range, aAction, *aTxn, aNode, aOffset, aLength); } @@ -5022,14 +5023,14 @@ nsEditor::CreateTxnForDeleteInsertionPoint(nsIDOMRange *aRange, { if (nodeAsText) { // we have text, so delete a char at the proper offset - DeleteTextTxn *txn; - result = CreateTxnForDeleteCharacter(nodeAsText, offset, aAction, &txn); + nsRefPtr txn; + result = CreateTxnForDeleteCharacter(nodeAsText, offset, aAction, + getter_AddRefs(txn)); if (NS_SUCCEEDED(result)) { aTxn->AppendChild(txn); NS_ADDREF(*aNode = node); *aOffset = txn->GetOffset(); *aLength = txn->GetNumCharsToDelete(); - NS_RELEASE(txn); } } else @@ -5055,25 +5056,25 @@ nsEditor::CreateTxnForDeleteInsertionPoint(nsIDOMRange *aRange, { selectedNodeAsText->GetLength(&position); } - DeleteTextTxn *delTextTxn; + nsRefPtr delTextTxn; result = CreateTxnForDeleteCharacter(selectedNodeAsText, position, - aAction, &delTextTxn); + aAction, + getter_AddRefs(delTextTxn)); if (NS_FAILED(result)) { return result; } if (!delTextTxn) { return NS_ERROR_NULL_POINTER; } aTxn->AppendChild(delTextTxn); NS_ADDREF(*aNode = selectedNode); *aOffset = delTextTxn->GetOffset(); *aLength = delTextTxn->GetNumCharsToDelete(); - NS_RELEASE(delTextTxn); } else { - DeleteElementTxn *delElementTxn; - result = CreateTxnForDeleteElement(selectedNode, &delElementTxn); + nsRefPtr delElementTxn; + result = CreateTxnForDeleteElement(selectedNode, + getter_AddRefs(delElementTxn)); if (NS_FAILED(result)) { return result; } if (!delElementTxn) { return NS_ERROR_NULL_POINTER; } aTxn->AppendChild(delElementTxn); - NS_RELEASE(delElementTxn); NS_ADDREF(*aNode = selectedNode); } }