Index: Source/core/editing/commands/DeleteSelectionCommand.cpp |
diff --git a/Source/core/editing/commands/DeleteSelectionCommand.cpp b/Source/core/editing/commands/DeleteSelectionCommand.cpp |
index 396bd93130980c8d18b822dbacf71cf789dea8e0..9565fca09ed2c03543f2bef49ccde863068bec32 100644 |
--- a/Source/core/editing/commands/DeleteSelectionCommand.cpp |
+++ b/Source/core/editing/commands/DeleteSelectionCommand.cpp |
@@ -172,10 +172,10 @@ void DeleteSelectionCommand::initializePositionData() |
if (!isEditablePosition(end, ContentIsEditable, DoNotUpdateStyle)) |
end = lastEditablePositionBeforePositionInRoot(end, highestEditableRoot(start)); |
- m_upstreamStart = start.upstream(); |
- m_downstreamStart = start.downstream(); |
- m_upstreamEnd = end.upstream(); |
- m_downstreamEnd = end.downstream(); |
+ m_upstreamStart = mostBackwardCaretPosition(start); |
+ m_downstreamStart = mostForwardCaretPosition(start); |
+ m_upstreamEnd = mostBackwardCaretPosition(end); |
+ m_downstreamEnd = mostForwardCaretPosition(end); |
m_startRoot = editableRootForPosition(start); |
m_endRoot = editableRootForPosition(end); |
@@ -233,8 +233,8 @@ void DeleteSelectionCommand::initializePositionData() |
pos = visiblePos.deepEquivalent(); |
// Expand out one character upstream for smart delete and recalculate |
// positions based on this change. |
- m_upstreamStart = pos.upstream(); |
- m_downstreamStart = pos.downstream(); |
+ m_upstreamStart = mostBackwardCaretPosition(pos); |
+ m_downstreamStart = mostForwardCaretPosition(pos); |
m_leadingWhitespace = leadingWhitespacePosition(m_upstreamStart, visiblePos.affinity()); |
setStartingSelectionOnSmartDelete(m_upstreamStart, m_upstreamEnd); |
@@ -246,8 +246,8 @@ void DeleteSelectionCommand::initializePositionData() |
// Expand out one character downstream for smart delete and recalculate |
// positions based on this change. |
pos = VisiblePosition(m_downstreamEnd, VP_DEFAULT_AFFINITY).next().deepEquivalent(); |
- m_upstreamEnd = pos.upstream(); |
- m_downstreamEnd = pos.downstream(); |
+ m_upstreamEnd = mostBackwardCaretPosition(pos); |
+ m_downstreamEnd = mostForwardCaretPosition(pos); |
m_trailingWhitespace = trailingWhitespacePosition(m_downstreamEnd, VP_DEFAULT_AFFINITY); |
setStartingSelectionOnSmartDelete(m_downstreamStart, m_downstreamEnd); |
@@ -654,8 +654,8 @@ void DeleteSelectionCommand::mergeParagraphs() |
// The rule for merging into an empty block is: only do so if its farther to the right. |
// FIXME: Consider RTL. |
if (!m_startsAtEmptyLine && isStartOfParagraph(mergeDestination) && startOfParagraphToMove.absoluteCaretBounds().x() > mergeDestination.absoluteCaretBounds().x()) { |
- if (isHTMLBRElement(*mergeDestination.deepEquivalent().downstream().anchorNode())) { |
- removeNodeAndPruneAncestors(mergeDestination.deepEquivalent().downstream().anchorNode()); |
+ if (isHTMLBRElement(*mostForwardCaretPosition(mergeDestination.deepEquivalent()).anchorNode())) { |
+ removeNodeAndPruneAncestors(mostForwardCaretPosition(mergeDestination.deepEquivalent()).anchorNode()); |
m_endingPosition = startOfParagraphToMove.deepEquivalent(); |
return; |
} |
@@ -794,7 +794,7 @@ void DeleteSelectionCommand::doApply() |
// save this to later make the selection with |
TextAffinity affinity = m_selectionToDelete.affinity(); |
- Position downstreamEnd = m_selectionToDelete.end().downstream(); |
+ Position downstreamEnd = mostForwardCaretPosition(m_selectionToDelete.end()); |
bool rootWillStayOpenWithoutPlaceholder = downstreamEnd.computeContainerNode() == downstreamEnd.computeContainerNode()->rootEditableElement() |
|| (downstreamEnd.computeContainerNode()->isTextNode() && downstreamEnd.computeContainerNode()->parentNode() == downstreamEnd.computeContainerNode()->rootEditableElement()); |
bool lineBreakAtEndOfSelectionToDelete = lineBreakExistsAtVisiblePosition(m_selectionToDelete.visibleEnd()); |