diff options
author | Ben Murdoch <benm@google.com> | 2011-06-02 12:07:03 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-10 10:47:21 +0100 |
commit | 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch) | |
tree | e4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/editing/CompositeEditCommand.cpp | |
parent | 87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff) | |
download | external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.zip external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.gz external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.bz2 |
Merge WebKit at r84325: Initial merge by git.
Change-Id: Ic1a909300ecc0a13ddc6b4e784371d2ac6e3d59b
Diffstat (limited to 'Source/WebCore/editing/CompositeEditCommand.cpp')
-rw-r--r-- | Source/WebCore/editing/CompositeEditCommand.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/Source/WebCore/editing/CompositeEditCommand.cpp b/Source/WebCore/editing/CompositeEditCommand.cpp index 2a69fb7..cf2959a 100644 --- a/Source/WebCore/editing/CompositeEditCommand.cpp +++ b/Source/WebCore/editing/CompositeEditCommand.cpp @@ -1217,23 +1217,27 @@ Position CompositeEditCommand::positionAvoidingSpecialElementBoundary(const Posi // Splits the tree parent by parent until we reach the specified ancestor. We use VisiblePositions // to determine if the split is necessary. Returns the last split node. -PassRefPtr<Node> CompositeEditCommand::splitTreeToNode(Node* start, Node* end, bool splitAncestor) +PassRefPtr<Node> CompositeEditCommand::splitTreeToNode(Node* start, Node* end, bool shouldSplitAncestor) { + ASSERT(start); + ASSERT(end); ASSERT(start != end); RefPtr<Node> node; - for (node = start; node && node->parentNode() != end; node = node->parentNode()) { + if (shouldSplitAncestor && end->parentNode()) + end = end->parentNode(); + + RefPtr<Node> endNode = end; + for (node = start; node && node->parentNode() != endNode; node = node->parentNode()) { if (!node->parentNode()->isElementNode()) break; - VisiblePosition positionInParent(firstPositionInNode(node->parentNode()), DOWNSTREAM); - VisiblePosition positionInNode(firstPositionInOrBeforeNode(node.get()), DOWNSTREAM); + // Do not split a node when doing so introduces an empty node. + VisiblePosition positionInParent = firstPositionInNode(node->parentNode()); + VisiblePosition positionInNode = firstPositionInOrBeforeNode(node.get()); if (positionInParent != positionInNode) - applyCommandToComposite(SplitElementCommand::create(static_cast<Element*>(node->parentNode()), node)); - } - if (splitAncestor) { - splitElement(static_cast<Element*>(end), node); - return node->parentNode(); + splitElement(static_cast<Element*>(node->parentNode()), node); } + return node.release(); } |