Changeset 94836 in webkit


Ignore:
Timestamp:
Sep 8, 2011 11:16:49 PM (13 years ago)
Author:
rniwa@webkit.org
Message:

Push more code from HTMLInputElement::setValue to TextFieldInputType::setValue
https://bugs.webkit.org/show_bug.cgi?id=67742

Reviewed by Darin Adler.

Moved more code in HTMLInputElement::setValue to TextFieldInputType::setValue, and merged
InputType::valueChanged into InputType::setValue. Also introduced
InputType::dispatchChangeEventInResponseToSetValue to be overridden by TextFieldInputType.

  • html/BaseButtonInputType.cpp:

(WebCore::BaseButtonInputType::setValue):

  • html/BaseButtonInputType.h:
  • html/BaseCheckableInputType.cpp:

(WebCore::BaseCheckableInputType::setValue):

  • html/BaseCheckableInputType.h:
  • html/ColorInputType.cpp:
  • html/ColorInputType.h:
  • html/FileInputType.cpp:

(WebCore::FileInputType::setValue):

  • html/FileInputType.h:
  • html/HTMLInputElement.cpp:

(WebCore::HTMLInputElement::setValue):

  • html/HTMLInputElement.h:

(WebCore::HTMLInputElement::cacheSelectionInResponseToSetValue):

  • html/HiddenInputType.cpp:

(WebCore::HiddenInputType::setValue):

  • html/HiddenInputType.h:
  • html/InputType.cpp:

(WebCore::InputType::setValue):
(WebCore::InputType::dispatchChangeEventInResponseToSetValue):

  • html/InputType.h:
  • html/RangeInputType.cpp:

(WebCore::RangeInputType::setValue):

  • html/RangeInputType.h:
  • html/TextFieldInputType.cpp:

(WebCore::TextFieldInputType::setValue):
(WebCore::TextFieldInputType::dispatchChangeEventInResponseToSetValue):

  • html/TextFieldInputType.h:
Location:
trunk/Source/WebCore
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r94832 r94836  
     12011-09-07  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Push more code from HTMLInputElement::setValue to TextFieldInputType::setValue
     4        https://bugs.webkit.org/show_bug.cgi?id=67742
     5
     6        Reviewed by Darin Adler.
     7
     8        Moved more code in HTMLInputElement::setValue to TextFieldInputType::setValue, and merged
     9        InputType::valueChanged into InputType::setValue. Also introduced
     10        InputType::dispatchChangeEventInResponseToSetValue to be overridden by TextFieldInputType.
     11
     12        * html/BaseButtonInputType.cpp:
     13        (WebCore::BaseButtonInputType::setValue):
     14        * html/BaseButtonInputType.h:
     15        * html/BaseCheckableInputType.cpp:
     16        (WebCore::BaseCheckableInputType::setValue):
     17        * html/BaseCheckableInputType.h:
     18        * html/ColorInputType.cpp:
     19        * html/ColorInputType.h:
     20        * html/FileInputType.cpp:
     21        (WebCore::FileInputType::setValue):
     22        * html/FileInputType.h:
     23        * html/HTMLInputElement.cpp:
     24        (WebCore::HTMLInputElement::setValue):
     25        * html/HTMLInputElement.h:
     26        (WebCore::HTMLInputElement::cacheSelectionInResponseToSetValue):
     27        * html/HiddenInputType.cpp:
     28        (WebCore::HiddenInputType::setValue):
     29        * html/HiddenInputType.h:
     30        * html/InputType.cpp:
     31        (WebCore::InputType::setValue):
     32        (WebCore::InputType::dispatchChangeEventInResponseToSetValue):
     33        * html/InputType.h:
     34        * html/RangeInputType.cpp:
     35        (WebCore::RangeInputType::setValue):
     36        * html/RangeInputType.h:
     37        * html/TextFieldInputType.cpp:
     38        (WebCore::TextFieldInputType::setValue):
     39        (WebCore::TextFieldInputType::dispatchChangeEventInResponseToSetValue):
     40        * html/TextFieldInputType.h:
     41
    1422011-09-08  Annie Sullivan  <sullivan@chromium.org>
    243
  • trunk/Source/WebCore/html/BaseButtonInputType.cpp

    r94639 r94836  
    101101}
    102102
    103 void BaseButtonInputType::setValue(const String& sanitizedValue, bool)
     103void BaseButtonInputType::setValue(const String& sanitizedValue, bool, bool)
    104104{
    105105    element()->setAttribute(valueAttr, sanitizedValue);
  • trunk/Source/WebCore/html/BaseButtonInputType.h

    r94639 r94836  
    4949    virtual void accessKeyAction(bool sendToAnyElement);
    5050    virtual bool storesValueSeparateFromAttribute();
    51     virtual void setValue(const String&, bool);
     51    virtual void setValue(const String&, bool, bool);
    5252};
    5353
  • trunk/Source/WebCore/html/BaseCheckableInputType.cpp

    r94639 r94836  
    105105}
    106106
    107 void BaseCheckableInputType::setValue(const String& sanitizedValue, bool)
     107void BaseCheckableInputType::setValue(const String& sanitizedValue, bool, bool)
    108108{
    109109    element()->setAttribute(valueAttr, sanitizedValue);
  • trunk/Source/WebCore/html/BaseCheckableInputType.h

    r94639 r94836  
    5151    virtual String fallbackValue();
    5252    virtual bool storesValueSeparateFromAttribute();
    53     virtual void setValue(const String&, bool);
     53    virtual void setValue(const String&, bool, bool);
    5454    virtual bool isCheckable();
    5555};
  • trunk/Source/WebCore/html/ColorInputType.cpp

    r94279 r94836  
    122122}
    123123
    124 void ColorInputType::valueChanged()
    125 {
     124void ColorInputType::setValue(const String& value, bool valueChanged, bool sendChangeEvent);
     125{
     126    InputType::setValue(value, valueChanged, sendChangeEvent);
     127
     128    if (!valueChanged)
     129        return;
     130
    126131    updateColorSwatch();
    127132    if (ColorChooser::chooser()->client() == this) {
  • trunk/Source/WebCore/html/ColorInputType.h

    r94279 r94836  
    5353    virtual Color valueAsColor() const;
    5454    virtual void createShadowSubtree();
    55     virtual void valueChanged();
     55    virtual void setValue(const String&, bool valueChanged, bool sendChangeEvent);
    5656    virtual void handleClickEvent(MouseEvent*);
    5757    virtual void handleDOMActivateEvent(Event*);
  • trunk/Source/WebCore/html/FileInputType.cpp

    r94639 r94836  
    217217}
    218218
    219 void FileInputType::setValue(const String&, bool)
     219void FileInputType::setValue(const String&, bool, bool)
    220220{
    221221    m_fileList->clear();
  • trunk/Source/WebCore/html/FileInputType.h

    r94639 r94836  
    6060    virtual bool getTypeSpecificValue(String&); // Checked first, before internal storage or the value attribute.
    6161    virtual bool storesValueSeparateFromAttribute();
    62     virtual void setValue(const String&, bool sendChangeEvent);
     62    virtual void setValue(const String&, bool valueChanged, bool sendChangeEvent);
    6363    virtual void receiveDroppedFiles(const Vector<String>&);
    6464    virtual Icon* icon() const;
  • trunk/Source/WebCore/html/HTMLInputElement.cpp

    r94658 r94836  
    10851085        return;
    10861086
     1087    RefPtr<HTMLInputElement> protector(this);
    10871088    String sanitizedValue = sanitizeValue(value);
    10881089    bool valueChanged = sanitizedValue != this->value();
     
    10901091    setLastChangeWasNotUserEdit();
    10911092    setFormControlValueMatchesRenderer(false);
    1092     m_inputType->setValue(sanitizedValue, sendChangeEvent);
     1093    m_suggestedValue = String(); // Prevent TextFieldInputType::setValue from using the suggested value.
     1094    m_inputType->setValue(sanitizedValue, valueChanged, sendChangeEvent);
    10931095
    10941096    setNeedsValidityCheck();
    10951097
    1096     m_suggestedValue = String(); // updateInnerTextValue uses the suggested value.
    1097     if (valueChanged)
    1098         updateInnerTextValue();
    1099 
    1100     if (isTextField()) {
    1101         unsigned max = visibleValue().length();
    1102         if (document()->focusedNode() == this)
    1103             setSelectionRange(max, max);
    1104         else
    1105             cacheSelection(max, max, SelectionHasNoDirection);
    1106     }
    1107 
    11081098    if (!valueChanged)
    11091099        return;
    1110    
    1111     m_inputType->valueChanged();
    1112 
    1113     if (sendChangeEvent) {
    1114         // If the user is still editing this field, dispatch an input event rather than a change event.
    1115         // The change event will be dispatched when editing finishes.
    1116         if (isTextField() && focused())
    1117             dispatchFormControlInputEvent();
    1118         else
    1119             dispatchFormControlChangeEvent();
    1120     }
    1121 
     1100
     1101    if (sendChangeEvent)
     1102        m_inputType->dispatchChangeEventInResponseToSetValue();
     1103
     1104    // FIXME: Why do we do this when !sendChangeEvent?
    11221105    if (isTextField() && (!focused() || !sendChangeEvent))
    11231106        setTextAsOfLastFormControlChangeEvent(value);
  • trunk/Source/WebCore/html/HTMLInputElement.h

    r94658 r94836  
    232232#endif
    233233
     234    void cacheSelectionInResponseToSetValue(int caretOffset) { cacheSelection(caretOffset, caretOffset, SelectionHasNoDirection); }
     235
    234236#if ENABLE(INPUT_COLOR)
    235237    // For test purposes.
  • trunk/Source/WebCore/html/HiddenInputType.cpp

    r94639 r94836  
    7575}
    7676
    77 void HiddenInputType::setValue(const String& sanitizedValue, bool)
     77void HiddenInputType::setValue(const String& sanitizedValue, bool, bool)
    7878{
    7979    element()->setAttribute(valueAttr, sanitizedValue);
  • trunk/Source/WebCore/html/HiddenInputType.h

    r94639 r94836  
    5050    virtual bool isHiddenType() const;
    5151    virtual bool shouldRespectHeightAndWidthAttributes();
    52     virtual void setValue(const String&, bool);
     52    virtual void setValue(const String&, bool, bool);
    5353};
    5454
  • trunk/Source/WebCore/html/InputType.cpp

    r94658 r94836  
    450450}
    451451
    452 void InputType::valueChanged()
    453 {
    454 }
    455 
    456452void InputType::willMoveToNewOwnerDocument()
    457453{
     
    526522}
    527523
    528 void InputType::setValue(const String& sanitizedValue, bool sendChangeEvent)
     524void InputType::setValue(const String& sanitizedValue, bool, bool sendChangeEvent)
    529525{
    530526    element()->setValueInternal(sanitizedValue, sendChangeEvent);
     
    532528}
    533529
     530void InputType::dispatchChangeEventInResponseToSetValue()
     531{
     532    element()->dispatchFormControlChangeEvent();
     533}
     534
    534535bool InputType::canSetValue(const String&)
    535536{
  • trunk/Source/WebCore/html/InputType.h

    r94658 r94836  
    214214    virtual void altAttributeChanged();
    215215    virtual void srcAttributeChanged();
    216     virtual void valueChanged();
    217216    virtual void willMoveToNewOwnerDocument();
    218217    virtual bool shouldRespectAlignAttribute();
     
    225224    virtual bool canSetValue(const String&);
    226225    virtual bool storesValueSeparateFromAttribute();
    227     virtual void setValue(const String&, bool sendChangeEvent);
     226    virtual void setValue(const String&, bool valueChanged, bool sendChangeEvent);
     227    virtual void dispatchChangeEventInResponseToSetValue();
    228228    virtual bool shouldResetOnDocumentActivation();
    229229    virtual bool shouldRespectListAttribute();
  • trunk/Source/WebCore/html/RangeInputType.cpp

    r94658 r94836  
    286286}
    287287
    288 void RangeInputType::valueChanged()
    289 {
     288void RangeInputType::setValue(const String& value, bool valueChanged, bool sendChangeEvent)
     289{
     290    InputType::setValue(value, valueChanged, sendChangeEvent);
     291
     292    if (!valueChanged)
     293        return;
     294
    290295    sliderThumbElementOf(element())->setPositionFromValue();
    291296}
  • trunk/Source/WebCore/html/RangeInputType.h

    r94658 r94836  
    6767    virtual void accessKeyAction(bool sendToAnyElement);
    6868    virtual void minOrMaxAttributeChanged();
    69     virtual void valueChanged();
     69    virtual void setValue(const String&, bool valueChanged, bool sendChangeEvent);
    7070    virtual String fallbackValue();
    7171    virtual String sanitizeValue(const String& proposedValue);
  • trunk/Source/WebCore/html/TextFieldInputType.cpp

    r94639 r94836  
    7474}
    7575
    76 void TextFieldInputType::setValue(const String& sanitizedValue, bool sendChangeEvent)
    77 {
    78     InputType::setValue(sanitizedValue, sendChangeEvent);
     76void TextFieldInputType::setValue(const String& sanitizedValue, bool valueChanged, bool sendChangeEvent)
     77{
     78    InputType::setValue(sanitizedValue, valueChanged, sendChangeEvent);
    7979    element()->updatePlaceholderVisibility(false);
     80
     81    if (valueChanged)
     82        element()->updateInnerTextValue();
     83
     84    unsigned max = visibleValue().length();
     85    if (element()->focused())
     86        element()->setSelectionRange(max, max);
     87    else
     88        element()->cacheSelectionInResponseToSetValue(max);
     89}
     90
     91void TextFieldInputType::dispatchChangeEventInResponseToSetValue()
     92{
     93    // If the user is still editing this field, dispatch an input event rather than a change event.
     94    // The change event will be dispatched when editing finishes.
     95    if (element()->focused()) {
     96        element()->dispatchFormControlInputEvent();
     97        return;
     98    }
     99    InputType::dispatchChangeEventInResponseToSetValue();
    80100}
    81101
  • trunk/Source/WebCore/html/TextFieldInputType.h

    r94639 r94836  
    7272    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const;
    7373    virtual bool shouldUseInputMethod() const;
    74     virtual void setValue(const String&, bool sendChangeEvent);
     74    virtual void setValue(const String&, bool valueChanged, bool sendChangeEvent);
     75    virtual void dispatchChangeEventInResponseToSetValue();
    7576    virtual String sanitizeValue(const String&);
    7677    virtual bool shouldRespectListAttribute();
Note: See TracChangeset for help on using the changeset viewer.