summaryrefslogtreecommitdiff
path: root/Source/WebCore/editing/ReplaceSelectionCommand.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-05-25 15:09:11 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-05-25 15:09:11 +0200
commita89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd (patch)
treeb7abd9f49ae1d4d2e426a5883bfccd42b8e2ee12 /Source/WebCore/editing/ReplaceSelectionCommand.cpp
parent8d473cf9743f1d30a16a27114e93bd5af5648d23 (diff)
downloadqtwebkit-a89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd.tar.gz
Imported WebKit commit eb5c1b8fe4d4b1b90b5137433fc58a91da0e6878 (http://svn.webkit.org/repository/webkit/trunk@118516)
Diffstat (limited to 'Source/WebCore/editing/ReplaceSelectionCommand.cpp')
-rw-r--r--Source/WebCore/editing/ReplaceSelectionCommand.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/Source/WebCore/editing/ReplaceSelectionCommand.cpp b/Source/WebCore/editing/ReplaceSelectionCommand.cpp
index 75f4434f3..ab33ad9ab 100644
--- a/Source/WebCore/editing/ReplaceSelectionCommand.cpp
+++ b/Source/WebCore/editing/ReplaceSelectionCommand.cpp
@@ -830,7 +830,7 @@ void ReplaceSelectionCommand::doApply()
visibleStart = endingSelection().visibleStart();
if (fragment.hasInterchangeNewlineAtStart()) {
if (isEndOfParagraph(visibleStart) && !isStartOfParagraph(visibleStart)) {
- if (!isEndOfDocument(visibleStart))
+ if (!isEndOfEditableOrNonEditableContent(visibleStart))
setEndingSelection(visibleStart.next());
} else
insertParagraphSeparator();
@@ -936,7 +936,10 @@ void ReplaceSelectionCommand::doApply()
if (RefPtr<Node> nodeToSplitTo = nodeToSplitToAvoidPastingIntoInlineNodesWithStyle(insertionPos)) {
if (insertionPos.containerNode() != nodeToSplitTo->parentNode()) {
- nodeToSplitTo = splitTreeToNode(insertionPos.anchorNode(), nodeToSplitTo->parentNode()).get();
+ Node* splitStart = insertionPos.computeNodeAfterPosition();
+ if (!splitStart)
+ splitStart = insertionPos.containerNode();
+ nodeToSplitTo = splitTreeToNode(splitStart, nodeToSplitTo->parentNode()).get();
insertionPos = positionInParentBeforeNode(nodeToSplitTo.get());
}
}
@@ -964,7 +967,7 @@ void ReplaceSelectionCommand::doApply()
Node* blockStart = enclosingBlock(insertionPos.deprecatedNode());
if ((isListElement(refNode.get()) || (isLegacyAppleStyleSpan(refNode.get()) && isListElement(refNode->firstChild())))
&& blockStart && blockStart->renderer()->isListItem())
- refNode = insertAsListItems(refNode, blockStart, insertionPos, insertedNodes);
+ refNode = insertAsListItems(toHTMLElement(refNode.get()), blockStart, insertionPos, insertedNodes);
else {
insertNodeAt(refNode, insertionPos);
insertedNodes.respondToNodeInsertion(refNode.get());
@@ -1229,12 +1232,12 @@ EditAction ReplaceSelectionCommand::editingAction() const
// If the user is inserting a list into an existing list, instead of nesting the list,
// we put the list items into the existing list.
-Node* ReplaceSelectionCommand::insertAsListItems(PassRefPtr<Node> prpListElement, Node* insertionBlock, const Position& insertPos, InsertedNodes& insertedNodes)
+Node* ReplaceSelectionCommand::insertAsListItems(PassRefPtr<HTMLElement> prpListElement, Node* insertionBlock, const Position& insertPos, InsertedNodes& insertedNodes)
{
- RefPtr<Node> listElement = prpListElement;
+ RefPtr<HTMLElement> listElement = prpListElement;
while (listElement->hasChildNodes() && isListElement(listElement->firstChild()) && listElement->childNodeCount() == 1)
- listElement = listElement->firstChild();
+ listElement = toHTMLElement(listElement->firstChild());
bool isStart = isStartOfParagraph(insertPos);
bool isEnd = isEndOfParagraph(insertPos);
@@ -1252,7 +1255,7 @@ Node* ReplaceSelectionCommand::insertAsListItems(PassRefPtr<Node> prpListElement
while (RefPtr<Node> listItem = listElement->firstChild()) {
ExceptionCode ec = 0;
- toContainerNode(listElement.get())->removeChild(listItem.get(), ec);
+ listElement->removeChild(listItem.get(), ec);
ASSERT(!ec);
if (isStart || isMiddle) {
insertNodeBefore(listItem, lastNode);