Changeset 163721 in webkit
- Timestamp:
- Feb 8, 2014 1:40:32 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r163719 r163721 1 2014-02-08 Ryosuke Niwa <rniwa@webkit.org> 2 3 Split UserTriggered into FireSelectEvent and RevealSelection for selection options 4 https://bugs.webkit.org/show_bug.cgi?id=128441 5 6 Reviewed by Darin Adler. 7 8 Split UserTriggered by FireSelectEvent and RevealSelection for selection options. 9 10 Also added defaultSetSelectionOptions() to abstract away the default options. 11 12 * editing/AlternativeTextController.cpp: 13 (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection): 14 * editing/Editor.cpp: 15 (WebCore::Editor::unappliedEditing): 16 (WebCore::Editor::reappliedEditing): 17 * editing/FrameSelection.cpp: 18 (WebCore::FrameSelection::moveTo): 19 (WebCore::FrameSelection::setSelectionByMouseIfDifferent): UserTriggered | DoNotRevealSelection 20 is replaced by FireSelectEvent. 21 (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance): Check options & FireSelectEvent 22 instead of options & UserTriggered. 23 (WebCore::FrameSelection::setSelection): Check options & RevealSelection instead of 24 options & UserTriggered && !(options & DoNotRevealSelection). 25 (WebCore::FrameSelection::prepareForDestruction): 26 (WebCore::FrameSelection::setBase): 27 (WebCore::FrameSelection::setExtent): 28 (WebCore::FrameSelection::selectAll): 29 (WebCore::FrameSelection::wordSelectionContainingCaretSelection): 30 * editing/FrameSelection.h: 31 (WebCore::FrameSelection::defaultSetSelectionOptions): Added. 32 * editing/SpellingCorrectionCommand.cpp: 33 (WebCore::SpellingCorrectionCommand::doApply): 34 * html/HTMLTextFormControlElement.cpp: 35 (WebCore::HTMLTextFormControlElement::selectionChanged): Renamed the argument. 36 * html/HTMLTextFormControlElement.h: 37 1 38 2014-02-08 Zan Dobersek <zdobersek@igalia.com> 2 39 -
trunk/Source/WebCore/editing/AlternativeTextController.cpp
r162837 r163721 315 315 client->recordAutocorrectionResponse(AutocorrectionReverted, corrected, correction); 316 316 m_frame.document()->updateLayout(); 317 m_frame.selection().setSelection(selectionOfCorrected, FrameSelection:: CloseTyping | FrameSelection::ClearTypingStyle| FrameSelection::SpellCorrectionTriggered);317 m_frame.selection().setSelection(selectionOfCorrected, FrameSelection::defaultSetSelectionOptions() | FrameSelection::SpellCorrectionTriggered); 318 318 RefPtr<Range> range = Range::create(*m_frame.document(), m_frame.selection().selection().start(), m_frame.selection().selection().end()); 319 319 -
trunk/Source/WebCore/editing/Editor.cpp
r163712 r163721 1103 1103 1104 1104 VisibleSelection newSelection(cmd->startingSelection()); 1105 changeSelectionAfterCommand(newSelection, FrameSelection:: CloseTyping | FrameSelection::ClearTypingStyle);1105 changeSelectionAfterCommand(newSelection, FrameSelection::defaultSetSelectionOptions()); 1106 1106 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd->endingRootEditableElement()); 1107 1107 … … 1119 1119 1120 1120 VisibleSelection newSelection(cmd->endingSelection()); 1121 changeSelectionAfterCommand(newSelection, FrameSelection:: CloseTyping | FrameSelection::ClearTypingStyle);1121 changeSelectionAfterCommand(newSelection, FrameSelection::defaultSetSelectionOptions()); 1122 1122 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd->endingRootEditableElement()); 1123 1123 -
trunk/Source/WebCore/editing/FrameSelection.cpp
r163692 r163721 136 136 void FrameSelection::moveTo(const VisiblePosition &pos, EUserTriggered userTriggered, CursorAlignOnScroll align) 137 137 { 138 SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered;139 setSelection(VisibleSelection(pos.deepEquivalent(), pos.deepEquivalent(), pos.affinity(), m_selection.isDirectional()), options, align);138 setSelection(VisibleSelection(pos.deepEquivalent(), pos.deepEquivalent(), pos.affinity(), m_selection.isDirectional()), 139 defaultSetSelectionOptions(userTriggered), align); 140 140 } 141 141 … … 143 143 { 144 144 const bool selectionHasDirection = true; 145 SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered; 146 setSelection(VisibleSelection(base.deepEquivalent(), extent.deepEquivalent(), base.affinity(), selectionHasDirection), options); 145 setSelection(VisibleSelection(base.deepEquivalent(), extent.deepEquivalent(), base.affinity(), selectionHasDirection), defaultSetSelectionOptions(userTriggered)); 147 146 } 148 147 149 148 void FrameSelection::moveTo(const Position &pos, EAffinity affinity, EUserTriggered userTriggered) 150 149 { 151 SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered; 152 setSelection(VisibleSelection(pos, affinity, m_selection.isDirectional()), options); 150 setSelection(VisibleSelection(pos, affinity, m_selection.isDirectional()), defaultSetSelectionOptions(userTriggered)); 153 151 } 154 152 155 153 void FrameSelection::moveTo(const Range *r, EAffinity affinity, EUserTriggered userTriggered) 156 154 { 157 SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered;158 155 VisibleSelection selection = r ? VisibleSelection(r->startPosition(), r->endPosition(), affinity) : VisibleSelection(Position(), Position(), affinity); 159 setSelection(selection, options);156 setSelection(selection, defaultSetSelectionOptions(userTriggered)); 160 157 } 161 158 … … 163 160 { 164 161 const bool selectionHasDirection = true; 165 SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered; 166 setSelection(VisibleSelection(base, extent, affinity, selectionHasDirection), options); 162 setSelection(VisibleSelection(base, extent, affinity, selectionHasDirection), defaultSetSelectionOptions(userTriggered)); 167 163 } 168 164 … … 248 244 return; 249 245 250 setSelection(newSelection, UserTriggered | DoNotRevealSelection | CloseTyping | ClearTypingStyle, AlignCursorOnScrollIfNeeded, granularity);251 } 252 253 bool FrameSelection::setSelectionWithoutUpdatingAppearance(const VisibleSelection& newSelectionPossiblyWithoutDirection, SetSelectionOptions options, CursorAlignOnScroll align, TextGranularity granularity , EUserTriggered userTriggered)246 setSelection(newSelection, defaultSetSelectionOptions() | FireSelectEvent, AlignCursorOnScrollIfNeeded, granularity); 247 } 248 249 bool FrameSelection::setSelectionWithoutUpdatingAppearance(const VisibleSelection& newSelectionPossiblyWithoutDirection, SetSelectionOptions options, CursorAlignOnScroll align, TextGranularity granularity) 254 250 { 255 251 bool closeTyping = options & CloseTyping; … … 298 294 // Selection offsets should increase when LF is inserted before the caret in InsertLineBreakCommand. See <https://webkit.org/b/56061>. 299 295 if (HTMLTextFormControlElement* textControl = enclosingTextFormControl(newSelection.start())) 300 textControl->selectionChanged( userTriggered == UserTriggered);296 textControl->selectionChanged(options & FireSelectEvent); 301 297 302 298 if (oldSelection == newSelection) … … 320 316 void FrameSelection::setSelection(const VisibleSelection& selection, SetSelectionOptions options, CursorAlignOnScroll align, TextGranularity granularity) 321 317 { 322 EUserTriggered userTriggered = selectionOptionsToUserTriggered(options); 323 if (!setSelectionWithoutUpdatingAppearance(selection, options, align, granularity, userTriggered)) 318 if (!setSelectionWithoutUpdatingAppearance(selection, options, align, granularity)) 324 319 return; 325 320 … … 331 326 updateAppearance(); 332 327 333 if ( userTriggered == UserTriggered && !(options & DoNotRevealSelection)) {328 if (options & RevealSelection) { 334 329 ScrollAlignment alignment; 335 330 … … 1244 1239 view->clearSelection(); 1245 1240 1246 setSelectionWithoutUpdatingAppearance(VisibleSelection(), CloseTyping | ClearTypingStyle, 1247 AlignCursorOnScrollIfNeeded, CharacterGranularity, NotUserTriggered); 1241 setSelectionWithoutUpdatingAppearance(VisibleSelection(), defaultSetSelectionOptions(), AlignCursorOnScrollIfNeeded, CharacterGranularity); 1248 1242 m_previousCaretNode.clear(); 1249 1243 } … … 1268 1262 { 1269 1263 const bool selectionHasDirection = true; 1270 setSelection(VisibleSelection(pos.deepEquivalent(), m_selection.extent(), pos.affinity(), selectionHasDirection), CloseTyping | ClearTypingStyle | userTriggered);1264 setSelection(VisibleSelection(pos.deepEquivalent(), m_selection.extent(), pos.affinity(), selectionHasDirection), defaultSetSelectionOptions(userTriggered)); 1271 1265 } 1272 1266 … … 1274 1268 { 1275 1269 const bool selectionHasDirection = true; 1276 setSelection(VisibleSelection(m_selection.base(), pos.deepEquivalent(), pos.affinity(), selectionHasDirection), CloseTyping | ClearTypingStyle | userTriggered);1270 setSelection(VisibleSelection(m_selection.base(), pos.deepEquivalent(), pos.affinity(), selectionHasDirection), defaultSetSelectionOptions(userTriggered)); 1277 1271 } 1278 1272 … … 1280 1274 { 1281 1275 const bool selectionHasDirection = true; 1282 setSelection(VisibleSelection(pos, m_selection.extent(), affinity, selectionHasDirection), CloseTyping | ClearTypingStyle | userTriggered);1276 setSelection(VisibleSelection(pos, m_selection.extent(), affinity, selectionHasDirection), defaultSetSelectionOptions(userTriggered)); 1283 1277 } 1284 1278 … … 1286 1280 { 1287 1281 const bool selectionHasDirection = true; 1288 setSelection(VisibleSelection(m_selection.base(), pos, affinity, selectionHasDirection), CloseTyping | ClearTypingStyle | userTriggered);1282 setSelection(VisibleSelection(m_selection.base(), pos, affinity, selectionHasDirection), defaultSetSelectionOptions(userTriggered)); 1289 1283 } 1290 1284 … … 1707 1701 1708 1702 if (shouldChangeSelection(newSelection)) 1709 setSelection(newSelection, UserTriggered | CloseTyping | ClearTypingStyle | DoNotRevealSelection);1703 setSelection(newSelection, defaultSetSelectionOptions() | FireSelectEvent); 1710 1704 } 1711 1705 … … 2423 2417 VisibleSelection newSelection = frameSelection.selection(); 2424 2418 newSelection.expandUsingGranularity(WordGranularity); 2425 frameSelection.setSelection(newSelection, CloseTyping | ClearTypingStyle, AlignCursorOnScrollIfNeeded, frameSelection.granularity());2419 frameSelection.setSelection(newSelection, defaultSetSelectionOptions(), AlignCursorOnScrollIfNeeded, frameSelection.granularity()); 2426 2420 2427 2421 Position startPos(frameSelection.selection().start()); -
trunk/Source/WebCore/editing/FrameSelection.h
r163689 r163721 119 119 AlignCursorOnScrollAlways }; 120 120 enum SetSelectionOption { 121 // 1 << 0 is reserved for EUserTriggered121 FireSelectEvent = 1 << 0, 122 122 CloseTyping = 1 << 1, 123 123 ClearTypingStyle = 1 << 2, … … 125 125 DoNotSetFocus = 1 << 4, 126 126 DictationTriggered = 1 << 5, 127 DoNotRevealSelection = 1 << 6,127 RevealSelection = 1 << 6, 128 128 }; 129 129 typedef unsigned SetSelectionOptions; // Union of values in SetSelectionOption and EUserTriggered 130 static inline EUserTriggered selectionOptionsToUserTriggered(SetSelectionOptions options)130 static inline SetSelectionOptions defaultSetSelectionOptions(EUserTriggered userTriggered = NotUserTriggered) 131 131 { 132 return static_cast<EUserTriggered>(options & UserTriggered);132 return CloseTyping | ClearTypingStyle | (userTriggered ? (RevealSelection | FireSelectEvent) : 0); 133 133 } 134 134 … … 144 144 145 145 const VisibleSelection& selection() const { return m_selection; } 146 void setSelection(const VisibleSelection&, SetSelectionOptions = CloseTyping | ClearTypingStyle, CursorAlignOnScroll = AlignCursorOnScrollIfNeeded, TextGranularity = CharacterGranularity);146 void setSelection(const VisibleSelection&, SetSelectionOptions = defaultSetSelectionOptions(), CursorAlignOnScroll = AlignCursorOnScrollIfNeeded, TextGranularity = CharacterGranularity); 147 147 bool setSelectedRange(Range*, EAffinity, bool closeTyping); 148 148 void selectAll(); … … 280 280 enum EPositionType { START, END, BASE, EXTENT }; 281 281 282 bool setSelectionWithoutUpdatingAppearance(const VisibleSelection&, SetSelectionOptions, CursorAlignOnScroll, TextGranularity , EUserTriggered);282 bool setSelectionWithoutUpdatingAppearance(const VisibleSelection&, SetSelectionOptions, CursorAlignOnScroll, TextGranularity); 283 283 284 284 void respondToNodeModification(Node*, bool baseRemoved, bool extentRemoved, bool startRemoved, bool endRemoved); -
trunk/Source/WebCore/editing/SpellingCorrectionCommand.cpp
r162139 r163721 105 105 return; 106 106 107 applyCommandToComposite(SetSelectionCommand::create(m_selectionToBeCorrected, FrameSelection:: SpellCorrectionTriggered | FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle));107 applyCommandToComposite(SetSelectionCommand::create(m_selectionToBeCorrected, FrameSelection::defaultSetSelectionOptions() | FrameSelection::SpellCorrectionTriggered)); 108 108 #if USE(AUTOCORRECTION_PANEL) 109 109 applyCommandToComposite(SpellingCorrectionRecordUndoCommand::create(document(), m_corrected, m_correction)); -
trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp
r163232 r163721 476 476 } 477 477 478 void HTMLTextFormControlElement::selectionChanged(bool userTriggered)478 void HTMLTextFormControlElement::selectionChanged(bool shouldFireSelectEvent) 479 479 { 480 480 if (!isTextFormControl()) … … 484 484 // selectionStart() or selectionEnd() will return cached selection when this node doesn't have focus 485 485 cacheSelection(computeSelectionStart(), computeSelectionEnd(), computeSelectionDirection()); 486 487 if (!shouldFireSelectEvent) 488 return; 486 489 487 490 if (Frame* frame = document().frame()) { 488 if (frame->selection().isRange() && userTriggered)491 if (frame->selection().isRange()) 489 492 dispatchEvent(Event::create(eventNames().selectEvent, true, false)); 490 493 } -
trunk/Source/WebCore/html/HTMLTextFormControlElement.h
r162158 r163721 79 79 virtual TextControlInnerTextElement* innerTextElement() const = 0; 80 80 81 void selectionChanged(bool userTriggered);81 void selectionChanged(bool shouldFireSelectEvent); 82 82 bool lastChangeWasUserEdit() const; 83 83 void setInnerTextValue(const String&);
Note: See TracChangeset
for help on using the changeset viewer.