--- a/editor/libeditor/EditorBase.cpp
+++ b/editor/libeditor/EditorBase.cpp
@@ -951,55 +951,45 @@ EditorBase::EndTransaction()
txnMgr->EndBatch(false);
}
EndUpdateViewBatch();
return NS_OK;
}
-
-// These two routines are similar to the above, but do not use
-// the transaction managers batching feature. Instead we use
-// a placeholder transaction to wrap up any further transaction
-// while the batch is open. The advantage of this is that
-// placeholder transactions can later merge, if needed. Merging
-// is unavailable between transaction manager batches.
-
-NS_IMETHODIMP
-EditorBase::BeginPlaceHolderTransaction(nsIAtom* aName)
+void
+EditorBase::BeginPlaceholderTransaction(nsIAtom* aTransactionName)
{
MOZ_ASSERT(mPlaceholderBatch >= 0, "negative placeholder batch count!");
if (!mPlaceholderBatch) {
NotifyEditorObservers(eNotifyEditorObserversOfBefore);
// time to turn on the batch
BeginUpdateViewBatch();
mPlaceholderTransaction = nullptr;
- mPlaceholderName = aName;
+ mPlaceholderName = aTransactionName;
RefPtr<Selection> selection = GetSelection();
if (selection) {
mSelState.emplace();
mSelState->SaveSelection(selection);
// Composition transaction can modify multiple nodes and it merges text
// node for ime into single text node.
// So if current selection is into IME text node, it might be failed
// to restore selection by UndoTransaction.
// So we need update selection by range updater.
if (mPlaceholderName == nsGkAtoms::IMETxnName) {
mRangeUpdater.RegisterSelectionState(*mSelState);
}
}
}
mPlaceholderBatch++;
-
- return NS_OK;
-}
-
-NS_IMETHODIMP
-EditorBase::EndPlaceHolderTransaction()
+}
+
+void
+EditorBase::EndPlaceholderTransaction()
{
MOZ_ASSERT(mPlaceholderBatch > 0,
"zero or negative placeholder batch count when ending batch!");
if (mPlaceholderBatch == 1) {
RefPtr<Selection> selection = GetSelection();
// By making the assumption that no reflow happens during the calls
// to EndUpdateViewBatch and ScrollSelectionIntoView, we are able to
@@ -1052,18 +1042,16 @@ EditorBase::EndPlaceHolderTransaction()
NotifyEditorObservers(eNotifyEditorObserversOfEnd);
}
mPlaceholderTransaction = nullptr;
} else {
NotifyEditorObservers(eNotifyEditorObserversOfCancel);
}
}
mPlaceholderBatch--;
-
- return NS_OK;
}
NS_IMETHODIMP
EditorBase::ShouldTxnSetSelection(bool* aResult)
{
NS_ENSURE_TRUE(aResult, NS_ERROR_NULL_POINTER);
*aResult = mShouldTxnSetSelection;
return NS_OK;
@@ -2338,17 +2326,17 @@ EditorBase::CloneAttributes(nsIDOMNode*
}
void
EditorBase::CloneAttributes(Element* aDest,
Element* aSource)
{
MOZ_ASSERT(aDest && aSource);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Use transaction system for undo only if destination is already in the
// document
NS_ENSURE_TRUE(GetRoot(), );
bool destInBody = GetRoot()->Contains(aDest);
// Clear existing attributes
RefPtr<nsDOMAttributeMap> destAttributes = aDest->Attributes();
--- a/editor/libeditor/EditorBase.h
+++ b/editor/libeditor/EditorBase.h
@@ -589,16 +589,28 @@ protected:
* a composition event handler in web contents moved focus
* for committing the composition, returns false.
*/
bool EnsureComposition(WidgetCompositionEvent* aCompositionEvent);
nsresult GetSelection(SelectionType aSelectionType,
nsISelection** aSelection);
+ /**
+ * (Begin|End)PlaceholderTransaction() are called by AutoPlaceholderBatch.
+ * This set of methods are similar to the (Begin|End)Transaction(), but do
+ * not use the transaction managers batching feature. Instead we use a
+ * placeholder transaction to wrap up any further transaction while the
+ * batch is open. The advantage of this is that placeholder transactions
+ * can later merge, if needed. Merging is unavailable between transaction
+ * manager batches.
+ */
+ void BeginPlaceholderTransaction(nsIAtom* aTransactionName);
+ void EndPlaceholderTransaction();
+
public:
/**
* All editor operations which alter the doc should be prefaced
* with a call to StartOperation, naming the action and direction.
*/
NS_IMETHOD StartOperation(EditAction opID,
nsIEditor::EDirection aDirection);
@@ -1289,16 +1301,17 @@ protected:
// Whether caret is hidden forcibly.
bool mHidingCaret;
// Whether spellchecker dictionary is initialized after focused.
bool mSpellCheckerDictionaryUpdated;
// Whether we are an HTML editor class.
bool mIsHTMLEditorClass;
friend bool NSCanUnload(nsISupports* serviceMgr);
+ friend class AutoPlaceholderBatch;
friend class AutoRules;
friend class AutoSelectionRestorer;
friend class AutoTransactionsConserveSelection;
friend class RangeUpdater;
friend class nsIEditor;
};
} // namespace mozilla
--- a/editor/libeditor/EditorUtils.h
+++ b/editor/libeditor/EditorUtils.h
@@ -138,62 +138,53 @@ inline EditActionResult
EditActionCanceled(nsresult aRv = NS_OK)
{
return EditActionResult(aRv, true, true);
}
/***************************************************************************
* stack based helper class for batching a collection of transactions inside a
* placeholder transaction.
- * XXX This is used by mozInlineSpellChecker. Therefore, cannot use concrete
- * editor class.
*/
-class MOZ_RAII AutoPlaceHolderBatch
+class MOZ_RAII AutoPlaceholderBatch final
{
private:
- nsCOMPtr<nsIEditor> mEditor;
+ RefPtr<EditorBase> mEditorBase;
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
public:
- AutoPlaceHolderBatch(nsIEditor* aEditor,
- nsIAtom* aAtom
- MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
- : mEditor(aEditor)
+ explicit AutoPlaceholderBatch(EditorBase* aEditorBase
+ MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
+ : mEditorBase(aEditorBase)
{
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
- if (mEditor) {
- mEditor->BeginPlaceHolderTransaction(aAtom);
- }
+ BeginPlaceholderTransaction(nullptr);
}
- ~AutoPlaceHolderBatch()
+ AutoPlaceholderBatch(EditorBase* aEditorBase,
+ nsIAtom* aTransactionName
+ MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
+ : mEditorBase(aEditorBase)
{
- if (mEditor) {
- mEditor->EndPlaceHolderTransaction();
+ MOZ_GUARD_OBJECT_NOTIFIER_INIT;
+ BeginPlaceholderTransaction(aTransactionName);
+ }
+ ~AutoPlaceholderBatch()
+ {
+ if (mEditorBase) {
+ mEditorBase->EndPlaceholderTransaction();
}
}
-};
-/***************************************************************************
- * stack based helper class for batching a collection of txns.
- * Note: I changed this to use placeholder batching so that we get
- * proper selection save/restore across undo/redo.
- */
-class MOZ_RAII AutoEditBatch final : public AutoPlaceHolderBatch
-{
private:
- MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
-
-public:
- explicit AutoEditBatch(nsIEditor* aEditor
- MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
- : AutoPlaceHolderBatch(aEditor, nullptr)
+ void BeginPlaceholderTransaction(nsIAtom* aTransactionName)
{
- MOZ_GUARD_OBJECT_NOTIFIER_INIT;
+ if (mEditorBase) {
+ mEditorBase->BeginPlaceholderTransaction(aTransactionName);
+ }
}
- ~AutoEditBatch() {}
};
/***************************************************************************
* stack based helper class for saving/restoring selection. Note that this
* assumes that the nodes involved are still around afterwards!
*/
class MOZ_RAII AutoSelectionRestorer final
{
--- a/editor/libeditor/HTMLAbsPositionEditor.cpp
+++ b/editor/libeditor/HTMLAbsPositionEditor.cpp
@@ -48,17 +48,17 @@ namespace mozilla {
using namespace dom;
#define BLACK_BG_RGB_TRIGGER 0xd0
NS_IMETHODIMP
HTMLEditor::AbsolutePositionSelection(bool aEnabled)
{
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this,
aEnabled ? EditAction::setAbsolutePosition :
EditAction::removeAbsolutePosition,
nsIEditor::eNext);
// the line below does not match the code; should it be removed?
// Find out if the selection is collapsed:
RefPtr<Selection> selection = GetSelection();
@@ -175,17 +175,17 @@ HTMLEditor::SetElementZIndex(nsIDOMEleme
mCSSEditUtils->SetCSSProperty(*element, *nsGkAtoms::z_index, zIndexStr);
return NS_OK;
}
NS_IMETHODIMP
HTMLEditor::RelativeChangeZIndex(int32_t aChange)
{
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this,
(aChange < 0) ? EditAction::decreaseZIndex :
EditAction::increaseZIndex,
nsIEditor::eNext);
// brade: can we get rid of this comment?
// Find out if the selection is collapsed:
RefPtr<Selection> selection = GetSelection();
@@ -461,17 +461,17 @@ HTMLEditor::SetFinalPosition(int32_t aX,
SnapToGrid(newX, newY);
nsAutoString x, y;
x.AppendInt(newX);
y.AppendInt(newY);
// we want one transaction only from a user's point of view
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
nsCOMPtr<Element> absolutelyPositionedObject =
do_QueryInterface(mAbsolutelyPositionedObject);
NS_ENSURE_STATE(absolutelyPositionedObject);
mCSSEditUtils->SetCSSPropertyPixels(*absolutelyPositionedObject,
*nsGkAtoms::top, newY);
mCSSEditUtils->SetCSSPropertyPixels(*absolutelyPositionedObject,
*nsGkAtoms::left, newX);
@@ -505,17 +505,17 @@ HTMLEditor::AbsolutelyPositionElement(ns
mCSSEditUtils->GetComputedProperty(*element, *nsGkAtoms::position,
positionStr);
bool isPositioned = (positionStr.EqualsLiteral("absolute"));
// nothing to do if the element is already in the state we want
if (isPositioned == aEnabled)
return NS_OK;
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
if (aEnabled) {
int32_t x, y;
GetElementOrigin(*element, x, y);
mCSSEditUtils->SetCSSProperty(*element, *nsGkAtoms::position,
NS_LITERAL_STRING("absolute"));
@@ -608,17 +608,17 @@ HTMLEditor::SetElementPosition(nsIDOMEle
return NS_OK;
}
void
HTMLEditor::SetElementPosition(Element& aElement,
int32_t aX,
int32_t aY)
{
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
mCSSEditUtils->SetCSSPropertyPixels(aElement, *nsGkAtoms::left, aX);
mCSSEditUtils->SetCSSPropertyPixels(aElement, *nsGkAtoms::top, aY);
}
// self-explanatory
NS_IMETHODIMP
HTMLEditor::GetPositionedElement(nsIDOMElement** aReturn)
{
--- a/editor/libeditor/HTMLEditor.cpp
+++ b/editor/libeditor/HTMLEditor.cpp
@@ -1011,17 +1011,17 @@ HTMLEditor::UpdateBaseURL()
* an event.
*/
NS_IMETHODIMP
HTMLEditor::TypedText(const nsAString& aString,
ETypingAction aAction)
{
MOZ_ASSERT(!aString.IsEmpty() || aAction != eTypedText);
- AutoPlaceHolderBatch batch(this, nsGkAtoms::TypingTxnName);
+ AutoPlaceholderBatch batch(this, nsGkAtoms::TypingTxnName);
if (aAction == eTypedBR) {
// only inserts a br node
nsCOMPtr<nsIDOMNode> brNode;
return InsertBR(address_of(brNode));
}
return TextEditor::TypedText(aString, aAction);
@@ -1225,17 +1225,17 @@ HTMLEditor::ReplaceHeadContentsWithHTML(
nsAutoString inputString (aSourceToInsert); // hope this does copy-on-write
// Windows linebreaks: Map CRLF to LF:
inputString.ReplaceSubstring(u"\r\n", u"\n");
// Mac linebreaks: Map any remaining CR to LF:
inputString.ReplaceSubstring(u"\r", u"\n");
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Get the first range in the selection, for context:
RefPtr<nsRange> range = selection->GetRangeAt(0);
NS_ENSURE_TRUE(range, NS_ERROR_NULL_POINTER);
ErrorResult err;
RefPtr<DocumentFragment> docfrag =
range->CreateContextualFragment(inputString, err);
@@ -1313,17 +1313,17 @@ HTMLEditor::RebuildDocumentFromSource(co
foundclosehead = false;
}
// a valid close head appears before a found body
if (foundbody && beginclosehead.get() > beginbody.get()) {
foundclosehead = false;
}
// Time to change the document
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
nsReadingIterator<char16_t> endtotal;
aSourceString.EndReading(endtotal);
if (foundhead) {
if (foundclosehead) {
nsresult rv =
ReplaceHeadContentsWithHTML(Substring(beginhead, beginclosehead));
@@ -1533,17 +1533,17 @@ HTMLEditor::InsertElementAtSelection(nsI
nsCOMPtr<nsIEditRules> rules(mRules);
nsCOMPtr<Element> element = do_QueryInterface(aElement);
NS_ENSURE_TRUE(element, NS_ERROR_NULL_POINTER);
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(aElement);
CommitComposition();
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::insertElement,
nsIEditor::eNext);
RefPtr<Selection> selection = GetSelection();
if (!selection) {
return NS_ERROR_FAILURE;
}
@@ -1992,17 +1992,17 @@ HTMLEditor::MakeOrChangeList(const nsASt
return NS_ERROR_NOT_INITIALIZED;
}
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
bool cancel, handled;
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::makeList, nsIEditor::eNext);
// pre-process
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
TextRulesInfo ruleInfo(EditAction::makeList);
ruleInfo.blockType = &aListType;
@@ -2063,17 +2063,17 @@ HTMLEditor::RemoveList(const nsAString&
return NS_ERROR_NOT_INITIALIZED;
}
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
bool cancel, handled;
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::removeList, nsIEditor::eNext);
// pre-process
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
TextRulesInfo ruleInfo(EditAction::removeList);
if (aListType.LowerCaseEqualsLiteral("ol")) {
@@ -2098,17 +2098,17 @@ HTMLEditor::MakeDefinitionItem(const nsA
return NS_ERROR_NOT_INITIALIZED;
}
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
bool cancel, handled;
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::makeDefListItem,
nsIEditor::eNext);
// pre-process
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
TextRulesInfo ruleInfo(EditAction::makeDefListItem);
ruleInfo.blockType = &aItemType;
@@ -2131,17 +2131,17 @@ HTMLEditor::InsertBasicBlock(const nsASt
return NS_ERROR_NOT_INITIALIZED;
}
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
bool cancel, handled;
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::makeBasicBlock,
nsIEditor::eNext);
// pre-process
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
TextRulesInfo ruleInfo(EditAction::makeBasicBlock);
ruleInfo.blockType = &aBlockType;
@@ -2203,17 +2203,17 @@ HTMLEditor::Indent(const nsAString& aInd
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
bool cancel, handled;
EditAction opID = EditAction::indent;
if (aIndent.LowerCaseEqualsLiteral("outdent")) {
opID = EditAction::outdent;
}
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, opID, nsIEditor::eNext);
// pre-process
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
TextRulesInfo ruleInfo(opID);
nsresult rv = rules->WillDoAction(selection, &ruleInfo, &cancel, &handled);
@@ -2272,17 +2272,17 @@ HTMLEditor::Indent(const nsAString& aInd
//TODO: IMPLEMENT ALIGNMENT!
NS_IMETHODIMP
HTMLEditor::Align(const nsAString& aAlignType)
{
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::align, nsIEditor::eNext);
bool cancel, handled;
// Find out if the selection is collapsed:
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
TextRulesInfo ruleInfo(EditAction::align);
@@ -2684,17 +2684,17 @@ HTMLEditor::InsertLinkAroundSelection(ns
nsAutoString href;
nsresult rv = anchor->GetHref(href);
NS_ENSURE_SUCCESS(rv, rv);
if (href.IsEmpty()) {
return NS_OK;
}
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Set all attributes found on the supplied anchor element
nsCOMPtr<nsIDOMMozNamedAttrMap> attrMap;
aAnchorElement->GetAttributes(getter_AddRefs(attrMap));
NS_ENSURE_TRUE(attrMap, NS_ERROR_FAILURE);
uint32_t count;
attrMap->GetLength(&count);
@@ -3447,17 +3447,17 @@ HTMLEditor::DebugUnitTests(int32_t* outN
#endif
}
NS_IMETHODIMP
HTMLEditor::StyleSheetLoaded(StyleSheet* aSheet,
bool aWasAlternate,
nsresult aStatus)
{
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
if (!mLastStyleSheetURL.IsEmpty())
RemoveStyleSheet(mLastStyleSheetURL);
RefPtr<AddStyleSheetTransaction> transaction =
CreateTxnForAddStyleSheet(aSheet);
if (!transaction) {
return NS_OK;
@@ -4530,17 +4530,17 @@ HTMLEditor::SetCSSBackgroundColor(const
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_STATE(selection);
bool isCollapsed = selection->Collapsed();
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
AutoRules beginRulesSniffing(this, EditAction::insertElement,
nsIEditor::eNext);
AutoSelectionRestorer selectionRestorer(selection, this);
AutoTransactionsConserveSelection dontChangeMySelection(this);
bool cancel, handled;
TextRulesInfo ruleInfo(EditAction::setTextProperty);
nsresult rv = rules->WillDoAction(selection, &ruleInfo, &cancel, &handled);
--- a/editor/libeditor/HTMLEditorDataTransfer.cpp
+++ b/editor/libeditor/HTMLEditorDataTransfer.cpp
@@ -98,17 +98,17 @@ static nsresult FindTargetNode(nsIDOMNod
nsresult
HTMLEditor::LoadHTML(const nsAString& aInputString)
{
NS_ENSURE_TRUE(mRules, NS_ERROR_NOT_INITIALIZED);
// force IME commit; set up rules sniffing and batching
CommitComposition();
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::loadHTML, nsIEditor::eNext);
// Get selection
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_STATE(selection);
TextRulesInfo ruleInfo(EditAction::loadHTML);
bool cancel, handled;
@@ -193,17 +193,17 @@ HTMLEditor::DoInsertHTMLWithContext(cons
{
NS_ENSURE_TRUE(mRules, NS_ERROR_NOT_INITIALIZED);
// Prevent the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
// force IME commit; set up rules sniffing and batching
CommitComposition();
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::htmlPaste, nsIEditor::eNext);
// Get selection
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_STATE(selection);
// create a dom document fragment that represents the structure to paste
nsCOMPtr<nsIDOMNode> fragmentAsNode, streamStartParent, streamEndParent;
@@ -1019,17 +1019,17 @@ HTMLEditor::BlobReader::OnResult(const n
nsString blobType;
mBlob->GetType(blobType);
NS_ConvertUTF16toUTF8 type(blobType);
nsAutoString stuffToPaste;
nsresult rv = ImgFromData(type, aResult, stuffToPaste);
NS_ENSURE_SUCCESS(rv, rv);
- AutoEditBatch beginBatching(mHTMLEditor);
+ AutoPlaceholderBatch beginBatching(mHTMLEditor);
rv = mHTMLEditor->DoInsertHTMLWithContext(stuffToPaste, EmptyString(),
EmptyString(),
NS_LITERAL_STRING(kFileMime),
mSourceDoc,
mDestinationNode, mDestOffset,
mDoDeleteSelection,
mIsSafe, false);
return rv;
@@ -1115,17 +1115,17 @@ HTMLEditor::InsertObject(const nsACStrin
rv = imageStream->Close();
NS_ENSURE_SUCCESS(rv, rv);
}
nsAutoString stuffToPaste;
rv = ImgFromData(type, imageData, stuffToPaste);
NS_ENSURE_SUCCESS(rv, rv);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
rv = DoInsertHTMLWithContext(stuffToPaste, EmptyString(), EmptyString(),
NS_LITERAL_STRING(kFileMime),
aSourceDoc,
aDestinationNode, aDestOffset,
aDoDeleteSelection,
aIsSafe, false);
}
@@ -1169,17 +1169,17 @@ HTMLEditor::InsertFromTransferable(nsITr
if (textDataObj && len > 0) {
nsAutoCString cfhtml;
textDataObj->GetData(cfhtml);
NS_ASSERTION(cfhtml.Length() <= (len), "Invalid length!");
nsString cfcontext, cffragment, cfselection; // cfselection left emtpy for now
rv = ParseCFHTML(cfhtml, getter_Copies(cffragment), getter_Copies(cfcontext));
if (NS_SUCCEEDED(rv) && !cffragment.IsEmpty()) {
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// If we have our private HTML flavor, we will only use the fragment
// from the CF_HTML. The rest comes from the clipboard.
if (havePrivateHTMLFlavor) {
rv = DoInsertHTMLWithContext(cffragment,
aContextStr, aInfoStr, flavor,
aSourceDoc,
aDestinationNode, aDestOffset,
aDoDeleteSelection,
@@ -1219,17 +1219,17 @@ HTMLEditor::InsertFromTransferable(nsITr
nsAutoCString text;
textDataObj->GetData(text);
NS_ASSERTION(text.Length() <= len, "Invalid length!");
stuffToPaste.Assign(NS_ConvertUTF8toUTF16(Substring(text, 0, len)));
}
}
if (!stuffToPaste.IsEmpty()) {
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
if (bestFlavor.EqualsLiteral(kHTMLMime)) {
rv = DoInsertHTMLWithContext(stuffToPaste,
aContextStr, aInfoStr, flavor,
aSourceDoc,
aDestinationNode, aDestOffset,
aDoDeleteSelection,
isSafe);
} else {
@@ -1303,17 +1303,17 @@ HTMLEditor::InsertFromDataTransfer(DataT
nsAutoString text;
GetStringFromDataTransfer(aDataTransfer, type, aIndex, text);
NS_ConvertUTF16toUTF8 cfhtml(text);
nsString cfcontext, cffragment, cfselection; // cfselection left emtpy for now
nsresult rv = ParseCFHTML(cfhtml, getter_Copies(cffragment), getter_Copies(cfcontext));
if (NS_SUCCEEDED(rv) && !cffragment.IsEmpty()) {
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
if (hasPrivateHTMLFlavor) {
// If we have our private HTML flavor, we will only use the fragment
// from the CF_HTML. The rest comes from the clipboard.
nsAutoString contextString, infoString;
GetStringFromDataTransfer(aDataTransfer, NS_LITERAL_STRING(kHTMLContext), aIndex, contextString);
GetStringFromDataTransfer(aDataTransfer, NS_LITERAL_STRING(kHTMLInfo), aIndex, infoString);
return DoInsertHTMLWithContext(cffragment,
@@ -1332,34 +1332,34 @@ HTMLEditor::InsertFromDataTransfer(DataT
}
}
} else if (type.EqualsLiteral(kHTMLMime)) {
nsAutoString text, contextString, infoString;
GetStringFromDataTransfer(aDataTransfer, type, aIndex, text);
GetStringFromDataTransfer(aDataTransfer, NS_LITERAL_STRING(kHTMLContext), aIndex, contextString);
GetStringFromDataTransfer(aDataTransfer, NS_LITERAL_STRING(kHTMLInfo), aIndex, infoString);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
if (type.EqualsLiteral(kHTMLMime)) {
return DoInsertHTMLWithContext(text,
contextString, infoString, type,
aSourceDoc,
aDestinationNode, aDestOffset,
aDoDeleteSelection,
isSafe);
}
}
}
if (type.EqualsLiteral(kTextMime) ||
type.EqualsLiteral(kMozTextInternal)) {
nsAutoString text;
GetStringFromDataTransfer(aDataTransfer, type, aIndex, text);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
return InsertTextAt(text, aDestinationNode, aDestOffset, aDoDeleteSelection);
}
}
return NS_OK;
}
bool
@@ -1627,17 +1627,17 @@ HTMLEditor::PasteAsQuotation(int32_t aSe
nsAutoString citation;
return PasteAsCitedQuotation(citation, aSelectionType);
}
NS_IMETHODIMP
HTMLEditor::PasteAsCitedQuotation(const nsAString& aCitation,
int32_t aSelectionType)
{
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::insertQuotation,
nsIEditor::eNext);
// get selection
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
// give rules a chance to handle or cancel
@@ -1703,17 +1703,17 @@ HTMLEditor::PasteAsPlaintextQuotation(in
NS_ENSURE_SUCCESS(rv, rv);
if (flav.EqualsLiteral(kUnicodeMime)) {
nsCOMPtr<nsISupportsString> textDataObj = do_QueryInterface(genericDataObj);
if (textDataObj && len > 0) {
nsAutoString stuffToPaste;
textDataObj->GetData(stuffToPaste);
NS_ASSERTION(stuffToPaste.Length() <= (len/2), "Invalid length!");
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
rv = InsertAsPlaintextQuotation(stuffToPaste, true, 0);
}
}
return rv;
}
NS_IMETHODIMP
@@ -1830,17 +1830,17 @@ NS_IMETHODIMP
HTMLEditor::InsertAsPlaintextQuotation(const nsAString& aQuotedText,
bool aAddCites,
nsIDOMNode** aNodeInserted)
{
// get selection
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::insertQuotation,
nsIEditor::eNext);
// give rules a chance to handle or cancel
TextRulesInfo ruleInfo(EditAction::insertElement);
bool cancel, handled;
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
@@ -1930,17 +1930,17 @@ HTMLEditor::InsertAsCitedQuotation(const
NS_ASSERTION(!aInsertHTML, "InsertAsCitedQuotation: trying to insert html into plaintext editor");
return InsertAsPlaintextQuotation(aQuotedText, true, aNodeInserted);
}
// get selection
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::insertQuotation,
nsIEditor::eNext);
// give rules a chance to handle or cancel
TextRulesInfo ruleInfo(EditAction::insertElement);
bool cancel, handled;
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
--- a/editor/libeditor/HTMLEditorObjectResizer.cpp
+++ b/editor/libeditor/HTMLEditorObjectResizer.cpp
@@ -901,17 +901,17 @@ HTMLEditor::SetFinalSize(int32_t aX,
bool setWidth = !mResizedObjectIsAbsolutelyPositioned || (width != mResizedObjectWidth);
bool setHeight = !mResizedObjectIsAbsolutelyPositioned || (height != mResizedObjectHeight);
int32_t x, y;
x = left - ((mResizedObjectIsAbsolutelyPositioned) ? mResizedObjectBorderLeft+mResizedObjectMarginLeft : 0);
y = top - ((mResizedObjectIsAbsolutelyPositioned) ? mResizedObjectBorderTop+mResizedObjectMarginTop : 0);
// we want one transaction only from a user's point of view
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
if (mResizedObjectIsAbsolutelyPositioned) {
if (setHeight) {
mCSSEditUtils->SetCSSPropertyPixels(*mResizedObject, *nsGkAtoms::top, y);
}
if (setWidth) {
mCSSEditUtils->SetCSSPropertyPixels(*mResizedObject, *nsGkAtoms::left, x);
}
--- a/editor/libeditor/HTMLStyleEditor.cpp
+++ b/editor/libeditor/HTMLStyleEditor.cpp
@@ -117,17 +117,17 @@ HTMLEditor::SetInlineProperty(nsIAtom* a
if (selection->Collapsed()) {
// Manipulating text attributes on a collapsed selection only sets state
// for the next text insertion
mTypeInState->SetProp(aProperty, aAttribute, aValue);
return NS_OK;
}
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
AutoRules beginRulesSniffing(this, EditAction::insertElement,
nsIEditor::eNext);
AutoSelectionRestorer selectionRestorer(selection, this);
AutoTransactionsConserveSelection dontChangeMySelection(this);
bool cancel, handled;
TextRulesInfo ruleInfo(EditAction::setTextProperty);
// Protect the edit rules object from dying
@@ -1175,17 +1175,17 @@ HTMLEditor::GetInlinePropertyWithAttrVal
if (!aValue.IsEmpty())
val = &aValue;
return GetInlinePropertyBase(*aProperty, att, val, aFirst, aAny, aAll, &outValue);
}
NS_IMETHODIMP
HTMLEditor::RemoveAllInlineProperties()
{
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
AutoRules beginRulesSniffing(this, EditAction::resetTextProperties,
nsIEditor::eNext);
nsresult rv = RemoveInlinePropertyImpl(nullptr, nullptr);
NS_ENSURE_SUCCESS(rv, rv);
return ApplyDefaultProperties();
}
@@ -1219,17 +1219,17 @@ HTMLEditor::RemoveInlinePropertyImpl(nsI
if (aProperty) {
mTypeInState->ClearProp(aProperty, *aAttribute);
} else {
mTypeInState->ClearAllProps();
}
return NS_OK;
}
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
AutoRules beginRulesSniffing(this, EditAction::removeTextProperty,
nsIEditor::eNext);
AutoSelectionRestorer selectionRestorer(selection, this);
AutoTransactionsConserveSelection dontChangeMySelection(this);
bool cancel, handled;
TextRulesInfo ruleInfo(EditAction::removeTextProperty);
// Protect the edit rules object from dying
@@ -1376,17 +1376,17 @@ HTMLEditor::RelativeFontChange(FontSize
// Manipulating text attributes on a collapsed selection only sets state
// for the next text insertion
mTypeInState->SetProp(&atom, EmptyString(), EmptyString());
return NS_OK;
}
// Wrap with txn batching, rules sniffing, and selection preservation code
- AutoEditBatch batchIt(this);
+ AutoPlaceholderBatch batchIt(this);
AutoRules beginRulesSniffing(this, EditAction::setTextProperty,
nsIEditor::eNext);
AutoSelectionRestorer selectionRestorer(selection, this);
AutoTransactionsConserveSelection dontChangeMySelection(this);
// Loop through the ranges in the selection
AutoRangeArray arrayOfRanges(selection);
for (auto& range : arrayOfRanges.mRanges) {
--- a/editor/libeditor/HTMLTableEditor.cpp
+++ b/editor/libeditor/HTMLTableEditor.cpp
@@ -410,17 +410,17 @@ HTMLEditor::InsertTableColumn(int32_t aN
rv = GetCellDataAt(table, startRowIndex, startColIndex,
getter_AddRefs(curCell),
&curStartRowIndex, &curStartColIndex,
&rowSpan, &colSpan,
&actualRowSpan, &actualColSpan, &isSelected);
NS_ENSURE_SUCCESS(rv, rv);
NS_ENSURE_TRUE(curCell, NS_ERROR_FAILURE);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Prevent auto insertion of BR in new cell until we're done
AutoRules beginRulesSniffing(this, EditAction::insertNode, nsIEditor::eNext);
// Use column after current cell if requested
if (aAfter) {
startColIndex += actualColSpan;
//Detect when user is adding after a COLSPAN=0 case
// Assume they want to stop the "0" behavior and
@@ -545,17 +545,17 @@ HTMLEditor::InsertTableRow(int32_t aNumb
&actualRowSpan, &actualColSpan, &isSelected);
NS_ENSURE_SUCCESS(rv, rv);
NS_ENSURE_TRUE(curCell, NS_ERROR_FAILURE);
int32_t rowCount, colCount;
rv = GetTableSize(table, &rowCount, &colCount);
NS_ENSURE_SUCCESS(rv, rv);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Prevent auto insertion of BR in new cell until we're done
AutoRules beginRulesSniffing(this, EditAction::insertNode, nsIEditor::eNext);
if (aAfter) {
// Use row after current cell
startRowIndex += actualRowSpan;
//Detect when user is adding after a ROWSPAN=0 case
@@ -727,17 +727,17 @@ HTMLEditor::DeleteTable()
{
RefPtr<Selection> selection;
nsCOMPtr<nsIDOMElement> table;
nsresult rv = GetCellContext(getter_AddRefs(selection),
getter_AddRefs(table),
nullptr, nullptr, nullptr, nullptr, nullptr);
NS_ENSURE_SUCCESS(rv, rv);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
return DeleteTable2(table, selection);
}
NS_IMETHODIMP
HTMLEditor::DeleteTableCell(int32_t aNumber)
{
RefPtr<Selection> selection;
nsCOMPtr<nsIDOMElement> table;
@@ -750,17 +750,17 @@ HTMLEditor::DeleteTableCell(int32_t aNum
getter_AddRefs(cell),
nullptr, nullptr,
&startRowIndex, &startColIndex);
NS_ENSURE_SUCCESS(rv, rv);
// Don't fail if we didn't find a table or cell
NS_ENSURE_TRUE(table && cell, NS_SUCCESS_EDITOR_ELEMENT_NOT_FOUND);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Prevent rules testing until we're done
AutoRules beginRulesSniffing(this, EditAction::deleteNode, nsIEditor::eNext);
nsCOMPtr<nsIDOMElement> firstCell;
nsCOMPtr<nsIDOMRange> range;
rv = GetFirstSelectedCell(getter_AddRefs(range), getter_AddRefs(firstCell));
NS_ENSURE_SUCCESS(rv, rv);
@@ -939,17 +939,17 @@ HTMLEditor::DeleteTableCellContents()
getter_AddRefs(cell),
nullptr, nullptr,
&startRowIndex, &startColIndex);
NS_ENSURE_SUCCESS(rv, rv);
// Don't fail if no cell found
NS_ENSURE_TRUE(cell, NS_SUCCESS_EDITOR_ELEMENT_NOT_FOUND);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Prevent rules testing until we're done
AutoRules beginRulesSniffing(this, EditAction::deleteNode, nsIEditor::eNext);
//Don't let Rules System change the selection
AutoTransactionsConserveSelection dontChangeSelection(this);
nsCOMPtr<nsIDOMElement> firstCell;
nsCOMPtr<nsIDOMRange> range;
@@ -1023,17 +1023,17 @@ HTMLEditor::DeleteTableColumn(int32_t aN
// Shortcut the case of deleting all columns in table
if (!startColIndex && aNumber >= colCount) {
return DeleteTable2(table, selection);
}
// Check for counts too high
aNumber = std::min(aNumber,(colCount-startColIndex));
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Prevent rules testing until we're done
AutoRules beginRulesSniffing(this, EditAction::deleteNode, nsIEditor::eNext);
// Test if deletion is controlled by selected cells
nsCOMPtr<nsIDOMElement> firstCell;
nsCOMPtr<nsIDOMRange> range;
rv = GetFirstSelectedCell(getter_AddRefs(range), getter_AddRefs(firstCell));
NS_ENSURE_SUCCESS(rv, rv);
@@ -1189,17 +1189,17 @@ HTMLEditor::DeleteTableRow(int32_t aNumb
rv = GetTableSize(table, &rowCount, &colCount);
NS_ENSURE_SUCCESS(rv, rv);
// Shortcut the case of deleting all rows in table
if (!startRowIndex && aNumber >= rowCount) {
return DeleteTable2(table, selection);
}
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Prevent rules testing until we're done
AutoRules beginRulesSniffing(this, EditAction::deleteNode, nsIEditor::eNext);
nsCOMPtr<nsIDOMElement> firstCell;
nsCOMPtr<nsIDOMRange> range;
rv = GetFirstSelectedCell(getter_AddRefs(range), getter_AddRefs(firstCell));
NS_ENSURE_SUCCESS(rv, rv);
@@ -1729,17 +1729,17 @@ HTMLEditor::SplitTableCell()
actualRowSpan, actualColSpan);
NS_ENSURE_SUCCESS(rv, rv);
// Must have some span to split
if (actualRowSpan <= 1 && actualColSpan <= 1) {
return NS_OK;
}
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Prevent auto insertion of BR in new cell until we're done
AutoRules beginRulesSniffing(this, EditAction::insertNode, nsIEditor::eNext);
// We reset selection
AutoSelectionSetterAfterTableEdit setCaret(*this, table, startRowIndex,
startColIndex, ePreviousColumn,
false);
//...so suppress Rules System selection munging
@@ -1957,17 +1957,17 @@ HTMLEditor::SplitCellIntoRows(nsIDOMElem
NS_IMETHODIMP
HTMLEditor::SwitchTableCellHeaderType(nsIDOMElement* aSourceCell,
nsIDOMElement** aNewCell)
{
nsCOMPtr<Element> sourceCell = do_QueryInterface(aSourceCell);
NS_ENSURE_TRUE(sourceCell, NS_ERROR_NULL_POINTER);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Prevent auto insertion of BR in new cell created by ReplaceContainer
AutoRules beginRulesSniffing(this, EditAction::insertNode, nsIEditor::eNext);
// Save current selection to restore when done
// This is needed so ReplaceContainer can monitor selection
// when replacing nodes
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_FAILURE);
@@ -2010,17 +2010,17 @@ HTMLEditor::JoinTableCells(bool aMergeNo
getter_AddRefs(targetCell),
nullptr, nullptr,
&startRowIndex, &startColIndex);
NS_ENSURE_SUCCESS(rv, rv);
if (!table || !targetCell) {
return NS_SUCCESS_EDITOR_ELEMENT_NOT_FOUND;
}
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
//Don't let Rules System change the selection
AutoTransactionsConserveSelection dontChangeSelection(this);
// Note: We dont' use AutoSelectionSetterAfterTableEdit here so the selection
// is retained after joining. This leaves the target cell selected
// as well as the "non-contiguous" cells, so user can see what happened.
nsCOMPtr<nsIDOMElement> firstCell;
@@ -2505,17 +2505,17 @@ HTMLEditor::NormalizeTable(nsIDOMElement
int32_t rowCount, colCount, rowIndex, colIndex;
rv = GetTableSize(table, &rowCount, &colCount);
NS_ENSURE_SUCCESS(rv, rv);
// Save current selection
AutoSelectionRestorer selectionRestorer(selection, this);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
// Prevent auto insertion of BR in new cell until we're done
AutoRules beginRulesSniffing(this, EditAction::insertNode, nsIEditor::eNext);
nsCOMPtr<nsIDOMElement> cell;
int32_t startRowIndex, startColIndex, rowSpan, colSpan, actualRowSpan, actualColSpan;
bool isSelected;
// Scan all cells in each row to detect bad rowspan values
--- a/editor/libeditor/TextEditor.cpp
+++ b/editor/libeditor/TextEditor.cpp
@@ -4,17 +4,17 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/TextEditor.h"
#include "InternetCiter.h"
#include "TextEditUtils.h"
#include "gfxFontUtils.h"
#include "mozilla/Assertions.h"
-#include "mozilla/EditorUtils.h" // AutoEditBatch, AutoRules
+#include "mozilla/EditorUtils.h" // AutoPlaceholderBatch, AutoRules
#include "mozilla/HTMLEditor.h"
#include "mozilla/mozalloc.h"
#include "mozilla/Preferences.h"
#include "mozilla/TextEditRules.h"
#include "mozilla/TextComposition.h"
#include "mozilla/TextEvents.h"
#include "mozilla/dom/Selection.h"
#include "mozilla/dom/Event.h"
@@ -395,17 +395,17 @@ TextEditor::HandleKeyPressEvent(WidgetKe
purposes. Can't use HandleKeyPress() (above) for that since it takes
a nsIDOMKeyEvent* parameter. So instead we pass enough info through
to TypedText() to determine what action to take, but without passing
an event.
*/
NS_IMETHODIMP
TextEditor::TypedText(const nsAString& aString, ETypingAction aAction)
{
- AutoPlaceHolderBatch batch(this, nsGkAtoms::TypingTxnName);
+ AutoPlaceholderBatch batch(this, nsGkAtoms::TypingTxnName);
switch (aAction) {
case eTypedText:
return InsertText(aString);
case eTypedBreak:
return InsertLineBreak();
default:
// eTypedBR is only for HTML
@@ -591,17 +591,17 @@ TextEditor::DeleteSelection(EDirection a
if (!mRules) {
return NS_ERROR_NOT_INITIALIZED;
}
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
// delete placeholder txns merge.
- AutoPlaceHolderBatch batch(this, nsGkAtoms::DeleteTxnName);
+ AutoPlaceholderBatch batch(this, nsGkAtoms::DeleteTxnName);
AutoRules beginRulesSniffing(this, EditAction::deleteSelection, aAction);
// pre-process
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
// If there is an existing selection when an extended delete is requested,
// platforms that use "caret-style" caret positioning collapse the
@@ -644,17 +644,17 @@ TextEditor::InsertText(const nsAString&
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
EditAction opID = EditAction::insertText;
if (ShouldHandleIMEComposition()) {
opID = EditAction::insertIMEText;
}
- AutoPlaceHolderBatch batch(this, nullptr);
+ AutoPlaceholderBatch batch(this, nullptr);
AutoRules beginRulesSniffing(this, opID, nsIEditor::eNext);
// pre-process
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
nsAutoString resultString;
// XXX can we trust instring to outlive ruleInfo,
// XXX and ruleInfo not to refer to instring in its dtor?
@@ -682,17 +682,17 @@ TextEditor::InsertLineBreak()
{
if (!mRules) {
return NS_ERROR_NOT_INITIALIZED;
}
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::insertBreak, nsIEditor::eNext);
// pre-process
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
TextRulesInfo ruleInfo(EditAction::insertBreak);
ruleInfo.maxLength = mMaxTextLength;
@@ -760,17 +760,17 @@ TextEditor::SetText(const nsAString& aSt
if (NS_WARN_IF(!mRules)) {
return NS_ERROR_NOT_INITIALIZED;
}
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> rules(mRules);
// delete placeholder txns merge.
- AutoPlaceHolderBatch batch(this, nullptr);
+ AutoPlaceholderBatch batch(this, nullptr);
AutoRules beginRulesSniffing(this, EditAction::setText, nsIEditor::eNext);
// pre-process
RefPtr<Selection> selection = GetSelection();
if (NS_WARN_IF(!selection)) {
return NS_ERROR_NULL_POINTER;
}
TextRulesInfo ruleInfo(EditAction::setText);
@@ -864,20 +864,20 @@ TextEditor::UpdateIMEComposition(WidgetC
"UpdateIMEComposition() must be called without place holder batch");
TextComposition::CompositionChangeEventHandlingMarker
compositionChangeEventHandlingMarker(mComposition, aCompsitionChangeEvent);
RefPtr<nsCaret> caretP = ps->GetCaret();
nsresult rv;
{
- AutoPlaceHolderBatch batch(this, nsGkAtoms::IMETxnName);
+ AutoPlaceholderBatch batch(this, nsGkAtoms::IMETxnName);
MOZ_ASSERT(mIsInEditAction,
- "AutoPlaceHolderBatch should've notified the observes of before-edit");
+ "AutoPlaceholderBatch should've notified the observes of before-edit");
rv = InsertText(aCompsitionChangeEvent->mData);
if (caretP) {
caretP->SetSelection(selection);
}
}
// If still composing, we should fire input event via observer.
@@ -1399,17 +1399,17 @@ TextEditor::PasteAsQuotation(int32_t aSe
}
if (flav.EqualsLiteral(kUnicodeMime) ||
flav.EqualsLiteral(kMozTextInternal)) {
nsCOMPtr<nsISupportsString> textDataObj ( do_QueryInterface(genericDataObj) );
if (textDataObj && len > 0) {
nsAutoString stuffToPaste;
textDataObj->GetData ( stuffToPaste );
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
rv = InsertAsQuotation(stuffToPaste, 0);
}
}
}
return rv;
}
@@ -1430,17 +1430,17 @@ TextEditor::InsertAsQuotation(const nsAS
if (!aQuotedText.IsEmpty() && (aQuotedText.Last() != char16_t('\n'))) {
quotedStuff.Append(char16_t('\n'));
}
// get selection
RefPtr<Selection> selection = GetSelection();
NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
AutoRules beginRulesSniffing(this, EditAction::insertText, nsIEditor::eNext);
// give rules a chance to handle or cancel
TextRulesInfo ruleInfo(EditAction::insertElement);
bool cancel, handled;
rv = rules->WillDoAction(selection, &ruleInfo, &cancel, &handled);
NS_ENSURE_SUCCESS(rv, rv);
if (cancel) {
--- a/editor/libeditor/TextEditorDataTransfer.cpp
+++ b/editor/libeditor/TextEditorDataTransfer.cpp
@@ -118,17 +118,17 @@ TextEditor::InsertTextFromTransferable(n
if (textDataObj && len > 0) {
nsAutoString stuffToPaste;
textDataObj->GetData(stuffToPaste);
NS_ASSERTION(stuffToPaste.Length() <= (len/2), "Invalid length!");
// Sanitize possible carriage returns in the string to be inserted
nsContentUtils::PlatformToDOMLineBreaks(stuffToPaste);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
rv = InsertTextAt(stuffToPaste, aDestinationNode, aDestOffset, aDoDeleteSelection);
}
}
// Try to scroll the selection into view if the paste/drop succeeded
if (NS_SUCCEEDED(rv)) {
ScrollSelectionIntoView(false);
@@ -148,17 +148,17 @@ TextEditor::InsertFromDataTransfer(DataT
nsCOMPtr<nsIVariant> data;
DataTransfer::Cast(aDataTransfer)->GetDataAtNoSecurityCheck(NS_LITERAL_STRING("text/plain"), aIndex,
getter_AddRefs(data));
if (data) {
nsAutoString insertText;
data->GetAsAString(insertText);
nsContentUtils::PlatformToDOMLineBreaks(insertText);
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
return InsertTextAt(insertText, aDestinationNode, aDestOffset, aDoDeleteSelection);
}
return NS_OK;
}
nsresult
TextEditor::InsertFromDrop(nsIDOMEvent* aDropEvent)
@@ -201,17 +201,17 @@ TextEditor::InsertFromDrop(nsIDOMEvent*
uint32_t numItems = 0;
nsresult rv = dataTransfer->GetMozItemCount(&numItems);
NS_ENSURE_SUCCESS(rv, rv);
if (numItems < 1) {
return NS_ERROR_FAILURE; // Nothing to drop?
}
// Combine any deletion and drop insertion into one transaction
- AutoEditBatch beginBatching(this);
+ AutoPlaceholderBatch beginBatching(this);
bool deleteSelection = false;
// We have to figure out whether to delete and relocate caret only once
// Parent and offset are under the mouse cursor
nsCOMPtr<nsIDOMUIEvent> uiEvent = do_QueryInterface(aDropEvent);
NS_ENSURE_TRUE(uiEvent, NS_ERROR_FAILURE);
--- a/editor/nsIEditor.idl
+++ b/editor/nsIEditor.idl
@@ -260,18 +260,16 @@ interface nsIEditor : nsISupports
/** endTransaction is a signal to the editor that the caller is
* finished updating the content model.<br>
* beginUpdate must be called before endTransaction is called.<br>
* Calls to beginTransaction can be nested, as long as endTransaction
* is called once per beginTransaction.
*/
void endTransaction();
- void beginPlaceHolderTransaction(in nsIAtom name);
- void endPlaceHolderTransaction();
boolean shouldTxnSetSelection();
/** Set the flag that prevents insertElementTxn from changing the selection
* @param should Set false to suppress changing the selection;
* i.e., before using InsertElement() to insert
* under <head> element
* WARNING: You must be very careful to reset back to PR_TRUE after
* setting PR_FALSE, else selection/caret is trashed
--- a/extensions/spellcheck/src/mozInlineSpellChecker.cpp
+++ b/extensions/spellcheck/src/mozInlineSpellChecker.cpp
@@ -965,17 +965,17 @@ mozInlineSpellChecker::ReplaceWord(nsIDO
{
// This range was retrieved from the spellchecker selection. As
// ranges cannot be shared between selections, we must clone it
// before adding it to the editor's selection.
nsCOMPtr<nsIDOMRange> editorRange;
res = range->CloneRange(getter_AddRefs(editorRange));
NS_ENSURE_SUCCESS(res, res);
- AutoPlaceHolderBatch phb(mTextEditor, nullptr);
+ AutoPlaceholderBatch phb(mTextEditor, nullptr);
nsCOMPtr<nsISelection> selection;
res = mTextEditor->GetSelection(getter_AddRefs(selection));
NS_ENSURE_SUCCESS(res, res);
selection->RemoveAllRanges();
selection->AddRange(editorRange);
MOZ_ASSERT(mTextEditor);