Changeset 163721 in webkit


Ignore:
Timestamp:
Feb 8, 2014 1:40:32 PM (10 years ago)
Author:
rniwa@webkit.org
Message:

Split UserTriggered into FireSelectEvent and RevealSelection for selection options
https://bugs.webkit.org/show_bug.cgi?id=128441

Reviewed by Darin Adler.

Split UserTriggered by FireSelectEvent and RevealSelection for selection options.

Also added defaultSetSelectionOptions() to abstract away the default options.

  • editing/AlternativeTextController.cpp:

(WebCore::AlternativeTextController::respondToUnappliedSpellCorrection):

  • editing/Editor.cpp:

(WebCore::Editor::unappliedEditing):
(WebCore::Editor::reappliedEditing):

  • editing/FrameSelection.cpp:

(WebCore::FrameSelection::moveTo):
(WebCore::FrameSelection::setSelectionByMouseIfDifferent): UserTriggered | DoNotRevealSelection
is replaced by FireSelectEvent.
(WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance): Check options & FireSelectEvent
instead of options & UserTriggered.
(WebCore::FrameSelection::setSelection): Check options & RevealSelection instead of
options & UserTriggered && !(options & DoNotRevealSelection).
(WebCore::FrameSelection::prepareForDestruction):
(WebCore::FrameSelection::setBase):
(WebCore::FrameSelection::setExtent):
(WebCore::FrameSelection::selectAll):
(WebCore::FrameSelection::wordSelectionContainingCaretSelection):

  • editing/FrameSelection.h:

(WebCore::FrameSelection::defaultSetSelectionOptions): Added.

  • editing/SpellingCorrectionCommand.cpp:

(WebCore::SpellingCorrectionCommand::doApply):

  • html/HTMLTextFormControlElement.cpp:

(WebCore::HTMLTextFormControlElement::selectionChanged): Renamed the argument.

  • html/HTMLTextFormControlElement.h:
Location:
trunk/Source/WebCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r163719 r163721  
     12014-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
    1382014-02-08  Zan Dobersek  <zdobersek@igalia.com>
    239
  • trunk/Source/WebCore/editing/AlternativeTextController.cpp

    r162837 r163721  
    315315        client->recordAutocorrectionResponse(AutocorrectionReverted, corrected, correction);
    316316    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);
    318318    RefPtr<Range> range = Range::create(*m_frame.document(), m_frame.selection().selection().start(), m_frame.selection().selection().end());
    319319
  • trunk/Source/WebCore/editing/Editor.cpp

    r163712 r163721  
    11031103
    11041104    VisibleSelection newSelection(cmd->startingSelection());
    1105     changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle);
     1105    changeSelectionAfterCommand(newSelection, FrameSelection::defaultSetSelectionOptions());
    11061106    dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd->endingRootEditableElement());
    11071107
     
    11191119
    11201120    VisibleSelection newSelection(cmd->endingSelection());
    1121     changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle);
     1121    changeSelectionAfterCommand(newSelection, FrameSelection::defaultSetSelectionOptions());
    11221122    dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd->endingRootEditableElement());
    11231123
  • trunk/Source/WebCore/editing/FrameSelection.cpp

    r163692 r163721  
    136136void FrameSelection::moveTo(const VisiblePosition &pos, EUserTriggered userTriggered, CursorAlignOnScroll align)
    137137{
    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);
    140140}
    141141
     
    143143{
    144144    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));
    147146}
    148147
    149148void FrameSelection::moveTo(const Position &pos, EAffinity affinity, EUserTriggered userTriggered)
    150149{
    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));
    153151}
    154152
    155153void FrameSelection::moveTo(const Range *r, EAffinity affinity, EUserTriggered userTriggered)
    156154{
    157     SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered;
    158155    VisibleSelection selection = r ? VisibleSelection(r->startPosition(), r->endPosition(), affinity) : VisibleSelection(Position(), Position(), affinity);
    159     setSelection(selection, options);
     156    setSelection(selection, defaultSetSelectionOptions(userTriggered));
    160157}
    161158
     
    163160{
    164161    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));
    167163}
    168164
     
    248244        return;
    249245
    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
     249bool FrameSelection::setSelectionWithoutUpdatingAppearance(const VisibleSelection& newSelectionPossiblyWithoutDirection, SetSelectionOptions options, CursorAlignOnScroll align, TextGranularity granularity)
    254250{
    255251    bool closeTyping = options & CloseTyping;
     
    298294    // Selection offsets should increase when LF is inserted before the caret in InsertLineBreakCommand. See <https://webkit.org/b/56061>.
    299295    if (HTMLTextFormControlElement* textControl = enclosingTextFormControl(newSelection.start()))
    300         textControl->selectionChanged(userTriggered == UserTriggered);
     296        textControl->selectionChanged(options & FireSelectEvent);
    301297
    302298    if (oldSelection == newSelection)
     
    320316void FrameSelection::setSelection(const VisibleSelection& selection, SetSelectionOptions options, CursorAlignOnScroll align, TextGranularity granularity)
    321317{
    322     EUserTriggered userTriggered = selectionOptionsToUserTriggered(options);
    323     if (!setSelectionWithoutUpdatingAppearance(selection, options, align, granularity, userTriggered))
     318    if (!setSelectionWithoutUpdatingAppearance(selection, options, align, granularity))
    324319        return;
    325320
     
    331326    updateAppearance();
    332327
    333     if (userTriggered == UserTriggered && !(options & DoNotRevealSelection)) {
     328    if (options & RevealSelection) {
    334329        ScrollAlignment alignment;
    335330
     
    12441239        view->clearSelection();
    12451240
    1246     setSelectionWithoutUpdatingAppearance(VisibleSelection(), CloseTyping | ClearTypingStyle,
    1247         AlignCursorOnScrollIfNeeded, CharacterGranularity, NotUserTriggered);
     1241    setSelectionWithoutUpdatingAppearance(VisibleSelection(), defaultSetSelectionOptions(), AlignCursorOnScrollIfNeeded, CharacterGranularity);
    12481242    m_previousCaretNode.clear();
    12491243}
     
    12681262{
    12691263    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));
    12711265}
    12721266
     
    12741268{
    12751269    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));
    12771271}
    12781272
     
    12801274{
    12811275    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));
    12831277}
    12841278
     
    12861280{
    12871281    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));
    12891283}
    12901284
     
    17071701
    17081702    if (shouldChangeSelection(newSelection))
    1709         setSelection(newSelection, UserTriggered | CloseTyping | ClearTypingStyle | DoNotRevealSelection);
     1703        setSelection(newSelection, defaultSetSelectionOptions() | FireSelectEvent);
    17101704}
    17111705
     
    24232417    VisibleSelection newSelection = frameSelection.selection();
    24242418    newSelection.expandUsingGranularity(WordGranularity);
    2425     frameSelection.setSelection(newSelection, CloseTyping | ClearTypingStyle, AlignCursorOnScrollIfNeeded, frameSelection.granularity());
     2419    frameSelection.setSelection(newSelection, defaultSetSelectionOptions(), AlignCursorOnScrollIfNeeded, frameSelection.granularity());
    24262420
    24272421    Position startPos(frameSelection.selection().start());
  • trunk/Source/WebCore/editing/FrameSelection.h

    r163689 r163721  
    119119                               AlignCursorOnScrollAlways };
    120120    enum SetSelectionOption {
    121         // 1 << 0 is reserved for EUserTriggered
     121        FireSelectEvent = 1 << 0,
    122122        CloseTyping = 1 << 1,
    123123        ClearTypingStyle = 1 << 2,
     
    125125        DoNotSetFocus = 1 << 4,
    126126        DictationTriggered = 1 << 5,
    127         DoNotRevealSelection = 1 << 6,
     127        RevealSelection = 1 << 6,
    128128    };
    129129    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)
    131131    {
    132         return static_cast<EUserTriggered>(options & UserTriggered);
     132        return CloseTyping | ClearTypingStyle | (userTriggered ? (RevealSelection | FireSelectEvent) : 0);
    133133    }
    134134
     
    144144
    145145    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);
    147147    bool setSelectedRange(Range*, EAffinity, bool closeTyping);
    148148    void selectAll();
     
    280280    enum EPositionType { START, END, BASE, EXTENT };
    281281
    282     bool setSelectionWithoutUpdatingAppearance(const VisibleSelection&, SetSelectionOptions, CursorAlignOnScroll, TextGranularity, EUserTriggered);
     282    bool setSelectionWithoutUpdatingAppearance(const VisibleSelection&, SetSelectionOptions, CursorAlignOnScroll, TextGranularity);
    283283
    284284    void respondToNodeModification(Node*, bool baseRemoved, bool extentRemoved, bool startRemoved, bool endRemoved);
  • trunk/Source/WebCore/editing/SpellingCorrectionCommand.cpp

    r162139 r163721  
    105105        return;
    106106
    107     applyCommandToComposite(SetSelectionCommand::create(m_selectionToBeCorrected, FrameSelection::SpellCorrectionTriggered | FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle));
     107    applyCommandToComposite(SetSelectionCommand::create(m_selectionToBeCorrected, FrameSelection::defaultSetSelectionOptions() | FrameSelection::SpellCorrectionTriggered));
    108108#if USE(AUTOCORRECTION_PANEL)
    109109    applyCommandToComposite(SpellingCorrectionRecordUndoCommand::create(document(), m_corrected, m_correction));
  • trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp

    r163232 r163721  
    476476}
    477477
    478 void HTMLTextFormControlElement::selectionChanged(bool userTriggered)
     478void HTMLTextFormControlElement::selectionChanged(bool shouldFireSelectEvent)
    479479{
    480480    if (!isTextFormControl())
     
    484484    // selectionStart() or selectionEnd() will return cached selection when this node doesn't have focus
    485485    cacheSelection(computeSelectionStart(), computeSelectionEnd(), computeSelectionDirection());
     486   
     487    if (!shouldFireSelectEvent)
     488        return;
    486489
    487490    if (Frame* frame = document().frame()) {
    488         if (frame->selection().isRange() && userTriggered)
     491        if (frame->selection().isRange())
    489492            dispatchEvent(Event::create(eventNames().selectEvent, true, false));
    490493    }
  • trunk/Source/WebCore/html/HTMLTextFormControlElement.h

    r162158 r163721  
    7979    virtual TextControlInnerTextElement* innerTextElement() const = 0;
    8080
    81     void selectionChanged(bool userTriggered);
     81    void selectionChanged(bool shouldFireSelectEvent);
    8282    bool lastChangeWasUserEdit() const;
    8383    void setInnerTextValue(const String&);
Note: See TracChangeset for help on using the changeset viewer.