summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/editing/CompositeEditCommand.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-06-02 12:07:03 +0100
committerBen Murdoch <benm@google.com>2011-06-10 10:47:21 +0100
commit2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch)
treee4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/editing/CompositeEditCommand.cpp
parent87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff)
downloadexternal_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.cpp22
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();
}