Diff
Modified: trunk/Source/WebCore/ChangeLog (117812 => 117813)
--- trunk/Source/WebCore/ChangeLog 2012-05-21 20:48:22 UTC (rev 117812)
+++ trunk/Source/WebCore/ChangeLog 2012-05-21 20:52:31 UTC (rev 117813)
@@ -1,3 +1,28 @@
+2012-05-21 Ryosuke Niwa <[email protected]>
+
+ isStartOfDocument and isEndOfDocument are poorly named
+ https://bugs.webkit.org/show_bug.cgi?id=86649
+
+ Reviewed by Levi Weintraub.
+
+ Renamed isEndOfDocument to isEndOfEditableOrNonEditableContent because that's what this function checks.
+
+ Also added new versions of isStartOfDocument and isEndOfDocument that correctly cross editing boundaries
+ to be used in selectFrameElementInParentIfFullySelected.
+
+ * editing/CompositeEditCommand.cpp:
+ (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
+ * editing/Editor.cpp:
+ (WebCore::Editor::insertLineBreak):
+ (WebCore::Editor::insertParagraphSeparator):
+ * editing/ReplaceSelectionCommand.cpp:
+ (WebCore::ReplaceSelectionCommand::doApply):
+ * editing/VisibleSelection.cpp:
+ (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
+ * editing/visible_units.cpp:
+ (WebCore::isEndOfEditableOrNonEditableContent):
+ * editing/visible_units.h:
+
2012-05-21 Anna Cavender <[email protected]>
Only render text track cues if kind=captions or kind=subtitles.
Modified: trunk/Source/WebCore/editing/CompositeEditCommand.cpp (117812 => 117813)
--- trunk/Source/WebCore/editing/CompositeEditCommand.cpp 2012-05-21 20:48:22 UTC (rev 117812)
+++ trunk/Source/WebCore/editing/CompositeEditCommand.cpp 2012-05-21 20:52:31 UTC (rev 117813)
@@ -929,8 +929,8 @@
// We can bail as we have a full block to work with.
ASSERT(upstreamStart.deprecatedNode()->isDescendantOf(enclosingBlock(upstreamEnd.deprecatedNode())));
return 0;
- } else if (isEndOfDocument(visibleEnd)) {
- // At the end of the document. We can bail here as well.
+ } else if (isEndOfEditableOrNonEditableContent(visibleEnd)) {
+ // At the end of the editable region. We can bail here as well.
return 0;
}
}
Modified: trunk/Source/WebCore/editing/Editor.cpp (117812 => 117813)
--- trunk/Source/WebCore/editing/Editor.cpp 2012-05-21 20:48:22 UTC (rev 117812)
+++ trunk/Source/WebCore/editing/Editor.cpp 2012-05-21 20:52:31 UTC (rev 117813)
@@ -946,7 +946,7 @@
return true;
VisiblePosition caret = m_frame->selection()->selection().visibleStart();
- bool alignToEdge = isEndOfDocument(caret);
+ bool alignToEdge = isEndOfEditableOrNonEditableContent(caret);
bool autocorrectionIsApplied = m_alternativeTextController->applyAutocorrectionBeforeTypingIfAppropriate();
TypingCommand::insertLineBreak(m_frame->document(), autocorrectionIsApplied ? TypingCommand::RetainAutocorrectionIndicator : 0);
revealSelectionAfterEditingOperation(alignToEdge ? ScrollAlignment::alignToEdgeIfNeeded : ScrollAlignment::alignCenterIfNeeded);
@@ -966,7 +966,7 @@
return true;
VisiblePosition caret = m_frame->selection()->selection().visibleStart();
- bool alignToEdge = isEndOfDocument(caret);
+ bool alignToEdge = isEndOfEditableOrNonEditableContent(caret);
bool autocorrectionIsApplied = m_alternativeTextController->applyAutocorrectionBeforeTypingIfAppropriate();
TypingCommand::insertParagraphSeparator(m_frame->document(), autocorrectionIsApplied ? TypingCommand::RetainAutocorrectionIndicator : 0);
revealSelectionAfterEditingOperation(alignToEdge ? ScrollAlignment::alignToEdgeIfNeeded : ScrollAlignment::alignCenterIfNeeded);
Modified: trunk/Source/WebCore/editing/ReplaceSelectionCommand.cpp (117812 => 117813)
--- trunk/Source/WebCore/editing/ReplaceSelectionCommand.cpp 2012-05-21 20:48:22 UTC (rev 117812)
+++ trunk/Source/WebCore/editing/ReplaceSelectionCommand.cpp 2012-05-21 20:52:31 UTC (rev 117813)
@@ -830,7 +830,7 @@
visibleStart = endingSelection().visibleStart();
if (fragment.hasInterchangeNewlineAtStart()) {
if (isEndOfParagraph(visibleStart) && !isStartOfParagraph(visibleStart)) {
- if (!isEndOfDocument(visibleStart))
+ if (!isEndOfEditableOrNonEditableContent(visibleStart))
setEndingSelection(visibleStart.next());
} else
insertParagraphSeparator();
Modified: trunk/Source/WebCore/editing/VisibleSelection.cpp (117812 => 117813)
--- trunk/Source/WebCore/editing/VisibleSelection.cpp 2012-05-21 20:48:22 UTC (rev 117812)
+++ trunk/Source/WebCore/editing/VisibleSelection.cpp 2012-05-21 20:52:31 UTC (rev 117813)
@@ -293,11 +293,11 @@
VisiblePosition start = VisiblePosition(m_start, m_affinity);
VisiblePosition originalEnd(m_end, m_affinity);
EWordSide side = RightWordIfOnBoundary;
- if (isEndOfDocument(start) || (isEndOfLine(start) && !isStartOfLine(start) && !isEndOfParagraph(start)))
+ if (isEndOfEditableOrNonEditableContent(start) || (isEndOfLine(start) && !isStartOfLine(start) && !isEndOfParagraph(start)))
side = LeftWordIfOnBoundary;
m_start = startOfWord(start, side).deepEquivalent();
side = RightWordIfOnBoundary;
- if (isEndOfDocument(originalEnd) || (isEndOfLine(originalEnd) && !isStartOfLine(originalEnd) && !isEndOfParagraph(originalEnd)))
+ if (isEndOfEditableOrNonEditableContent(originalEnd) || (isEndOfLine(originalEnd) && !isStartOfLine(originalEnd) && !isEndOfParagraph(originalEnd)))
side = LeftWordIfOnBoundary;
VisiblePosition wordEnd(endOfWord(originalEnd, side));
@@ -349,7 +349,7 @@
break;
case ParagraphGranularity: {
VisiblePosition pos(m_start, m_affinity);
- if (isStartOfLine(pos) && isEndOfDocument(pos))
+ if (isStartOfLine(pos) && isEndOfEditableOrNonEditableContent(pos))
pos = pos.previous();
m_start = startOfParagraph(pos).deepEquivalent();
VisiblePosition visibleParagraphEnd = endOfParagraph(VisiblePosition(m_end, m_affinity));
Modified: trunk/Source/WebCore/editing/visible_units.cpp (117812 => 117813)
--- trunk/Source/WebCore/editing/visible_units.cpp 2012-05-21 20:48:22 UTC (rev 117812)
+++ trunk/Source/WebCore/editing/visible_units.cpp 2012-05-21 20:52:31 UTC (rev 117813)
@@ -1369,12 +1369,12 @@
bool isStartOfDocument(const VisiblePosition &p)
{
- return p.isNotNull() && p.previous().isNull();
+ return p.isNotNull() && p.previous(CanCrossEditingBoundary).isNull();
}
bool isEndOfDocument(const VisiblePosition &p)
{
- return p.isNotNull() && p.next().isNull();
+ return p.isNotNull() && p.next(CanCrossEditingBoundary).isNull();
}
// ---------
@@ -1397,6 +1397,11 @@
return lastPositionInNode(highestRoot);
}
+bool isEndOfEditableOrNonEditableContent(const VisiblePosition &p)
+{
+ return p.isNotNull() && p.next().isNull();
+}
+
VisiblePosition leftBoundaryOfLine(const VisiblePosition& c, TextDirection direction)
{
return direction == LTR ? logicalStartOfLine(c) : logicalEndOfLine(c);
Modified: trunk/Source/WebCore/editing/visible_units.h (117812 => 117813)
--- trunk/Source/WebCore/editing/visible_units.h 2012-05-21 20:48:22 UTC (rev 117812)
+++ trunk/Source/WebCore/editing/visible_units.h 2012-05-21 20:52:31 UTC (rev 117813)
@@ -94,6 +94,7 @@
// editable content
VisiblePosition startOfEditableContent(const VisiblePosition&);
VisiblePosition endOfEditableContent(const VisiblePosition&);
+bool isEndOfEditableOrNonEditableContent(const VisiblePosition&);
} // namespace WebCore