diff --git a/editor/libeditor/nsHTMLEditRules.cpp b/editor/libeditor/nsHTMLEditRules.cpp index 01719058d6a6..fd69a5f8d94e 100644 --- a/editor/libeditor/nsHTMLEditRules.cpp +++ b/editor/libeditor/nsHTMLEditRules.cpp @@ -1556,7 +1556,7 @@ nsHTMLEditRules::WillInsertBreak(Selection& aSelection, bool* aCancel, // "Text" is deleted leaving an empty block. We want to put in one br to // make block have a line. Then code further below will put in a second br.) bool isEmpty; - IsEmptyBlock(*blockParent, &isEmpty); + IsEmptyBlock(GetAsDOMNode(blockParent), &isEmpty); if (isEmpty) { nsCOMPtr br = mHTMLEditor->CreateBR(blockParent, blockParent->Length()); @@ -4526,24 +4526,29 @@ nsHTMLEditRules::CreateStyleForInsertText(Selection& aSelection, } -/** - * Figure out if aNode is (or is inside) an empty block. A block can have - * children and still be considered empty, if the children are empty or - * non-editable. - */ +/////////////////////////////////////////////////////////////////////////// +// IsEmptyBlock: figure out if aNode is (or is inside) an empty block. +// A block can have children and still be considered empty, +// if the children are empty or non-editable. +// nsresult -nsHTMLEditRules::IsEmptyBlock(Element& aNode, - bool* aOutIsEmptyBlock, - MozBRCounts aMozBRCounts) +nsHTMLEditRules::IsEmptyBlock(nsIDOMNode *aNode, + bool *outIsEmptyBlock, + bool aMozBRDoesntCount, + bool aListItemsNotEmpty) { - MOZ_ASSERT(aOutIsEmptyBlock); - *aOutIsEmptyBlock = true; + NS_ENSURE_TRUE(aNode && outIsEmptyBlock, NS_ERROR_NULL_POINTER); + *outIsEmptyBlock = true; - NS_ENSURE_TRUE(IsBlockNode(aNode.AsDOMNode()), NS_ERROR_NULL_POINTER); +// nsresult res = NS_OK; + nsCOMPtr nodeToTest; + if (IsBlockNode(aNode)) nodeToTest = do_QueryInterface(aNode); +// else nsCOMPtr block; +// looks like I forgot to finish this. Wonder what I was going to do? - return mHTMLEditor->IsEmptyNode(aNode.AsDOMNode(), aOutIsEmptyBlock, - aMozBRCounts == MozBRCounts::yes ? false - : true); + NS_ENSURE_TRUE(nodeToTest, NS_ERROR_NULL_POINTER); + return mHTMLEditor->IsEmptyNode(nodeToTest, outIsEmptyBlock, + aMozBRDoesntCount, aListItemsNotEmpty); } @@ -6321,7 +6326,7 @@ nsHTMLEditRules::ReturnInHeader(Selection& aSelection, // If the new (righthand) header node is empty, delete it bool isEmpty; - res = IsEmptyBlock(aHeader, &isEmpty, MozBRCounts::no); + res = IsEmptyBlock(aHeader.AsDOMNode(), &isEmpty, true); NS_ENSURE_SUCCESS(res, res); if (isEmpty) { res = mHTMLEditor->DeleteNode(&aHeader); @@ -6574,7 +6579,7 @@ nsHTMLEditRules::ReturnInListItem(Selection& aSelection, // only if prefs say it's okay and if the parent isn't the active editing // host. bool isEmpty; - nsresult res = IsEmptyBlock(aListItem, &isEmpty, MozBRCounts::no); + nsresult res = IsEmptyBlock(aListItem.AsDOMNode(), &isEmpty, true, false); NS_ENSURE_SUCCESS(res, res); if (isEmpty && root != list && mReturnInEmptyLIKillsList) { // Get the list offset now -- before we might eventually split the list diff --git a/editor/libeditor/nsHTMLEditRules.h b/editor/libeditor/nsHTMLEditRules.h index a886864a89f0..3fa6454e7716 100644 --- a/editor/libeditor/nsHTMLEditRules.h +++ b/editor/libeditor/nsHTMLEditRules.h @@ -249,10 +249,10 @@ protected: nsresult CreateStyleForInsertText(mozilla::dom::Selection& aSelection, nsIDocument& aDoc); - enum class MozBRCounts { yes, no }; - nsresult IsEmptyBlock(mozilla::dom::Element& aNode, - bool* aOutIsEmptyBlock, - MozBRCounts aMozBRCounts = MozBRCounts::yes); + nsresult IsEmptyBlock(nsIDOMNode *aNode, + bool *outIsEmptyBlock, + bool aMozBRDoesntCount = false, + bool aListItemsNotEmpty = false); nsresult CheckForEmptyBlock(nsINode* aStartNode, mozilla::dom::Element* aBodyNode, mozilla::dom::Selection* aSelection,