diff options
| author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-25 15:09:11 +0200 |
|---|---|---|
| committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-25 15:09:11 +0200 |
| commit | a89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd (patch) | |
| tree | b7abd9f49ae1d4d2e426a5883bfccd42b8e2ee12 /Source/WebCore/editing/ReplaceSelectionCommand.cpp | |
| parent | 8d473cf9743f1d30a16a27114e93bd5af5648d23 (diff) | |
| download | qtwebkit-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.cpp | 17 |
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); |
