Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp |
| diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp |
| index 74c20b4a9c99d701798c180c24561eac0d183548..b46b9ef3d20596aa236792c954d012e5c62e3b79 100644 |
| --- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp |
| +++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp |
| @@ -674,10 +674,14 @@ void DocumentMarkerController::shiftMarkers(Node* node, unsigned startOffset, in |
| node->layoutObject()->setShouldDoFullPaintInvalidation(); |
| } |
| -void DocumentMarkerController::setMarkersActive(Range* range, bool active) |
| +bool DocumentMarkerController::setMarkersActive(Range* range, bool active) |
| { |
| - if (!possiblyHasMarkers(DocumentMarker::AllMarkers())) |
| - return; |
| + if (!possiblyHasMarkers(DocumentMarker::AllMarkers())) { |
| + if (active) { |
| + addTextMatchMarker(range, true); |
| + return false; |
| + } |
| + } |
|
Finnur
2016/01/20 14:14:03
On the face of it, this looks a bit weird -- addin
dvadym
2016/01/29 09:44:17
At first I thought to add markers here when there
|
| ASSERT(!m_markers.isEmpty()); |
| Node* startContainer = range->startContainer(); |
| @@ -685,23 +689,29 @@ void DocumentMarkerController::setMarkersActive(Range* range, bool active) |
| Node* pastLastNode = range->pastLastNode(); |
| + bool markerFound = false; |
| for (Node* node = range->firstNode(); node != pastLastNode; node = NodeTraversal::next(*node)) { |
| int startOffset = node == startContainer ? range->startOffset() : 0; |
| int endOffset = node == endContainer ? range->endOffset() : INT_MAX; |
| - setMarkersActive(node, startOffset, endOffset, active); |
| + markerFound |= setMarkersActive(node, startOffset, endOffset, active); |
| } |
| + if (!markerFound && active) { |
| + addTextMatchMarker(range, true); |
| + return false; |
| + } |
| + return true; |
| } |
| -void DocumentMarkerController::setMarkersActive(Node* node, unsigned startOffset, unsigned endOffset, bool active) |
| +bool DocumentMarkerController::setMarkersActive(Node* node, unsigned startOffset, unsigned endOffset, bool active) |
| { |
| MarkerLists* markers = m_markers.get(node); |
| if (!markers) |
| - return; |
| + return false; |
| bool docDirty = false; |
| OwnPtrWillBeMember<MarkerList>& list = (*markers)[MarkerTypeToMarkerIndex(DocumentMarker::TextMatch)]; |
| if (!list) |
| - return; |
| + return true; |
|
Finnur
2016/01/20 14:14:03
Out of curiosity... why not return false here?
dvadym
2016/01/29 09:44:17
Agree, fixed.
|
| MarkerList::iterator startPos = std::upper_bound(list->begin(), list->end(), startOffset, endsBefore); |
| for (MarkerList::iterator marker = startPos; marker != list->end(); ++marker) { |
| @@ -716,6 +726,7 @@ void DocumentMarkerController::setMarkersActive(Node* node, unsigned startOffset |
| // repaint the affected node |
| if (docDirty && node->layoutObject()) |
| node->layoutObject()->setShouldDoFullPaintInvalidation(); |
| + return true; |
| } |
| #ifndef NDEBUG |