Index: third_party/WebKit/Source/core/editing/FrameSelection.cpp |
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.cpp b/third_party/WebKit/Source/core/editing/FrameSelection.cpp |
index e2f9e1d904e428580b1c1f20f4ac2cafd6c01577..74f9d5053a58328a25c8b9be8818152f40ceed91 100644 |
--- a/third_party/WebKit/Source/core/editing/FrameSelection.cpp |
+++ b/third_party/WebKit/Source/core/editing/FrameSelection.cpp |
@@ -158,7 +158,9 @@ void FrameSelection::moveTo(const VisiblePosition& pos, |
EUserTriggered userTriggered, |
CursorAlignOnScroll align) { |
SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered; |
- setSelection(createVisibleSelection(pos, pos, selection().isDirectional()), |
+ bool isHandleVisible = userTriggered == UserTriggered; |
+ setSelection(createVisibleSelection(pos, pos, selection().isDirectional(), |
+ isHandleVisible), |
options, align); |
} |
@@ -815,19 +817,13 @@ void FrameSelection::paintCaret(GraphicsContext& context, |
m_frameCaret->paintCaret(context, paintOffset); |
} |
-bool FrameSelection::contains(const LayoutPoint& point) { |
- if (document().layoutViewItem().isNull()) |
- return false; |
- |
+bool FrameSelection::contains(const HitTestResult& result) { |
// Treat a collapsed selection like no selection. |
const VisibleSelectionInFlatTree& visibleSelection = |
this->visibleSelection<EditingInFlatTreeStrategy>(); |
if (!visibleSelection.isRange()) |
return false; |
- HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active); |
- HitTestResult result(request, point); |
- document().layoutViewItem().hitTest(result); |
Node* innerNode = result.innerNode(); |
if (!innerNode || !innerNode->layoutObject()) |
return false; |
@@ -850,6 +846,17 @@ bool FrameSelection::contains(const LayoutPoint& point) { |
return start.compareTo(pos) <= 0 && pos.compareTo(end) <= 0; |
} |
+bool FrameSelection::contains(const LayoutPoint& point) { |
+ if (document().layoutViewItem().isNull()) |
+ return false; |
+ |
+ HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active); |
+ HitTestResult result(request, point); |
+ document().layoutViewItem().hitTest(result); |
+ |
+ return contains(result); |
+} |
+ |
// Workaround for the fact that it's hard to delete a frame. |
// Call this after doing user-triggered selections to make it easy to delete the |
// frame you entirely selected. Can't do this implicitly as part of every |
@@ -1001,7 +1008,8 @@ bool FrameSelection::setSelectedRange(const EphemeralRange& range, |
Range* logicalRange = createRange(range); |
VisibleSelection newSelection = createVisibleSelection( |
range.startPosition(), range.endPosition(), affinity, |
- directional == SelectionDirectionalMode::Directional); |
+ directional == SelectionDirectionalMode::Directional, |
+ selection().isHandleVisible()); |
setSelection(newSelection, options); |
m_selectionEditor->setLogicalRange(logicalRange); |
return true; |
@@ -1399,7 +1407,9 @@ bool FrameSelection::selectWordAroundPosition(const VisiblePosition& position) { |
String text = |
plainText(EphemeralRange(start.deepEquivalent(), end.deepEquivalent())); |
if (!text.isEmpty() && !isSeparator(text.characterStartingAt(0))) { |
- setSelection(createVisibleSelection(start, end), WordGranularity); |
+ VisibleSelection newSelection = createVisibleSelection(start, end); |
+ newSelection.setIsHandleVisible(selection().isHandleVisible()); |
+ setSelection(newSelection, WordGranularity); |
return true; |
} |
} |
@@ -1432,6 +1442,8 @@ void FrameSelection::moveRangeSelectionExtent(const IntPoint& contentsPoint) { |
VisibleSelection newSelection = |
granularityStrategy()->updateExtent(contentsPoint, m_frame); |
+ newSelection.setIsHandleVisible( |
+ m_selectionEditor->visibleSelection<EditingStrategy>().isHandleVisible()); |
setSelection(newSelection, |
FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle | |
FrameSelection::DoNotClearStrategy | UserTriggered, |
@@ -1443,6 +1455,8 @@ void FrameSelection::moveRangeSelection(const VisiblePosition& basePosition, |
TextGranularity granularity) { |
VisibleSelection newSelection = |
createVisibleSelection(basePosition, extentPosition); |
+ newSelection.setIsHandleVisible( |
+ m_selectionEditor->visibleSelection<EditingStrategy>().isHandleVisible()); |
newSelection.expandUsingGranularity(granularity); |
if (newSelection.isNone()) |