Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(558)

Side by Side Diff: Source/core/editing/Editor.cpp

Issue 252783002: Make Range.detach() a no-op (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/editing/EditingStyle.cpp ('k') | Source/core/editing/EditorCommand.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 bool Editor::canDeleteRange(Range* range) const 251 bool Editor::canDeleteRange(Range* range) const
252 { 252 {
253 Node* startContainer = range->startContainer(); 253 Node* startContainer = range->startContainer();
254 Node* endContainer = range->endContainer(); 254 Node* endContainer = range->endContainer();
255 if (!startContainer || !endContainer) 255 if (!startContainer || !endContainer)
256 return false; 256 return false;
257 257
258 if (!startContainer->rendererIsEditable() || !endContainer->rendererIsEditab le()) 258 if (!startContainer->rendererIsEditable() || !endContainer->rendererIsEditab le())
259 return false; 259 return false;
260 260
261 if (range->collapsed(IGNORE_EXCEPTION)) { 261 if (range->collapsed()) {
262 VisiblePosition start(range->startPosition(), DOWNSTREAM); 262 VisiblePosition start(range->startPosition(), DOWNSTREAM);
263 VisiblePosition previous = start.previous(); 263 VisiblePosition previous = start.previous();
264 // FIXME: We sometimes allow deletions at the start of editable roots, l ike when the caret is in an empty list item. 264 // FIXME: We sometimes allow deletions at the start of editable roots, l ike when the caret is in an empty list item.
265 if (previous.isNull() || previous.deepEquivalent().deprecatedNode()->roo tEditableElement() != startContainer->rootEditableElement()) 265 if (previous.isNull() || previous.deepEquivalent().deprecatedNode()->roo tEditableElement() != startContainer->rootEditableElement())
266 return false; 266 return false;
267 } 267 }
268 return true; 268 return true;
269 } 269 }
270 270
271 bool Editor::smartInsertDeleteEnabled() const 271 bool Editor::smartInsertDeleteEnabled() const
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 replaceSelectionWithFragment(createFragmentFromText(selectedRange().get(), t ext), selectReplacement, smartReplace, true); 509 replaceSelectionWithFragment(createFragmentFromText(selectedRange().get(), t ext), selectReplacement, smartReplace, true);
510 } 510 }
511 511
512 PassRefPtrWillBeRawPtr<Range> Editor::selectedRange() 512 PassRefPtrWillBeRawPtr<Range> Editor::selectedRange()
513 { 513 {
514 return m_frame.selection().toNormalizedRange(); 514 return m_frame.selection().toNormalizedRange();
515 } 515 }
516 516
517 bool Editor::shouldDeleteRange(Range* range) const 517 bool Editor::shouldDeleteRange(Range* range) const
518 { 518 {
519 if (!range || range->collapsed(IGNORE_EXCEPTION)) 519 if (!range || range->collapsed())
520 return false; 520 return false;
521 521
522 return canDeleteRange(range); 522 return canDeleteRange(range);
523 } 523 }
524 524
525 void Editor::notifyComponentsOnChangedSelection(const VisibleSelection& oldSelec tion, FrameSelection::SetSelectionOptions options) 525 void Editor::notifyComponentsOnChangedSelection(const VisibleSelection& oldSelec tion, FrameSelection::SetSelectionOptions options)
526 { 526 {
527 client().respondToChangedSelection(&m_frame, m_frame.selection().selectionTy pe()); 527 client().respondToChangedSelection(&m_frame, m_frame.selection().selectionTy pe());
528 setStartNewKillRingSequence(true); 528 setStartNewKillRingSequence(true);
529 } 529 }
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 if (forward) 1177 if (forward)
1178 searchRange->setEnd(shadowTreeRoot.get(), shadowTreeRoot->countC hildren()); 1178 searchRange->setEnd(shadowTreeRoot.get(), shadowTreeRoot->countC hildren());
1179 else 1179 else
1180 searchRange->setStart(shadowTreeRoot.get(), 0); 1180 searchRange->setStart(shadowTreeRoot.get(), 0);
1181 } 1181 }
1182 1182
1183 resultRange = findPlainText(searchRange.get(), target, options); 1183 resultRange = findPlainText(searchRange.get(), target, options);
1184 } 1184 }
1185 1185
1186 // If nothing was found in the shadow tree, search in main content following the shadow tree. 1186 // If nothing was found in the shadow tree, search in main content following the shadow tree.
1187 if (resultRange->collapsed(ASSERT_NO_EXCEPTION) && shadowTreeRoot) { 1187 if (resultRange->collapsed() && shadowTreeRoot) {
1188 searchRange = rangeOfContents(m_frame.document()); 1188 searchRange = rangeOfContents(m_frame.document());
1189 if (forward) 1189 if (forward)
1190 searchRange->setStartAfter(shadowTreeRoot->shadowHost()); 1190 searchRange->setStartAfter(shadowTreeRoot->shadowHost());
1191 else 1191 else
1192 searchRange->setEndBefore(shadowTreeRoot->shadowHost()); 1192 searchRange->setEndBefore(shadowTreeRoot->shadowHost());
1193 1193
1194 resultRange = findPlainText(searchRange.get(), target, options); 1194 resultRange = findPlainText(searchRange.get(), target, options);
1195 } 1195 }
1196 1196
1197 // If we didn't find anything and we're wrapping, search again in the entire document (this will 1197 // If we didn't find anything and we're wrapping, search again in the entire document (this will
1198 // redundantly re-search the area already searched in some cases). 1198 // redundantly re-search the area already searched in some cases).
1199 if (resultRange->collapsed(ASSERT_NO_EXCEPTION) && options & WrapAround) { 1199 if (resultRange->collapsed() && options & WrapAround) {
1200 searchRange = rangeOfContents(m_frame.document()); 1200 searchRange = rangeOfContents(m_frame.document());
1201 resultRange = findPlainText(searchRange.get(), target, options); 1201 resultRange = findPlainText(searchRange.get(), target, options);
1202 // We used to return false here if we ended up with the same range that we started with 1202 // We used to return false here if we ended up with the same range that we started with
1203 // (e.g., the reference range was already the only instance of this text ). But we decided that 1203 // (e.g., the reference range was already the only instance of this text ). But we decided that
1204 // this should be a success case instead, so we'll just fall through in that case. 1204 // this should be a success case instead, so we'll just fall through in that case.
1205 } 1205 }
1206 1206
1207 return resultRange->collapsed(ASSERT_NO_EXCEPTION) ? nullptr : resultRange.r elease(); 1207 return resultRange->collapsed() ? nullptr : resultRange.release();
1208 } 1208 }
1209 1209
1210 void Editor::setMarkedTextMatchesAreHighlighted(bool flag) 1210 void Editor::setMarkedTextMatchesAreHighlighted(bool flag)
1211 { 1211 {
1212 if (flag == m_areMarkedTextMatchesHighlighted) 1212 if (flag == m_areMarkedTextMatchesHighlighted)
1213 return; 1213 return;
1214 1214
1215 m_areMarkedTextMatchesHighlighted = flag; 1215 m_areMarkedTextMatchesHighlighted = flag;
1216 m_frame.document()->markers().repaintMarkers(DocumentMarker::TextMatch); 1216 m_frame.document()->markers().repaintMarkers(DocumentMarker::TextMatch);
1217 } 1217 }
(...skipping 10 matching lines...) Expand all
1228 return m_frame.spellChecker(); 1228 return m_frame.spellChecker();
1229 } 1229 }
1230 1230
1231 void Editor::toggleOverwriteModeEnabled() 1231 void Editor::toggleOverwriteModeEnabled()
1232 { 1232 {
1233 m_overwriteModeEnabled = !m_overwriteModeEnabled; 1233 m_overwriteModeEnabled = !m_overwriteModeEnabled;
1234 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled); 1234 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled);
1235 } 1235 }
1236 1236
1237 } // namespace WebCore 1237 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/editing/EditingStyle.cpp ('k') | Source/core/editing/EditorCommand.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698