Changeset 108228 in webkit
- Timestamp:
- Feb 20, 2012 2:47:55 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r108226 r108228 1 2012-02-20 Yosifumi Inoue <yosin@chromium.org> 2 3 [Forms] Spin buttons of number input type should fire both input and change event 4 https://bugs.webkit.org/show_bug.cgi?id=75067 5 6 Reviewed by Kent Tamura. 7 8 * fast/forms/number/spin-button-events-expected.txt: Added. 9 * fast/forms/number/spin-button-events.html: Added. 10 1 11 2012-02-20 Shinya Kawanaka <shinyak@chromium.org> 2 12 -
trunk/Source/WebCore/ChangeLog
r108226 r108228 1 2012-02-20 Yosifumi Inoue <yosin@chromium.org> 2 3 [Forms] Spin buttons of number input type should fire both input and change event 4 https://bugs.webkit.org/show_bug.cgi?id=75067 5 6 Reviewed by Kent Tamura. 7 8 This patch makes spin button in number input field clicks to fire input and change events as described in WHATWG HTML5 specification. 9 To implement this behavior, this patch introduces new value DispatchInputAndChangeEvent in TextFieldEventBehavior. 10 11 Test: fast/forms/number/spin-button-events.html 12 13 * html/HTMLInputElement.cpp: 14 (WebCore::HTMLInputElement::stepUpFromRenderer): Pass DispatchInputAndChangeEvent instead of DispatchChangeEvent to applyStep, setValue, and setValueAsNumber. 15 * html/HTMLTextFormControlElement.h: Add new enum value DispatchInputAndChangeEvent to TextFieldEventBehavior. 16 * html/TextFieldInputType.cpp: 17 (WebCore::TextFieldInputType::setValue): Handle DispatchInputAndChangeEvent and use RefPtr for element to keep reference. 18 1 19 2012-02-20 Shinya Kawanaka <shinyak@chromium.org> 2 20 -
trunk/Source/WebCore/html/HTMLInputElement.cpp
r108051 r108228 1637 1637 if (current > m_inputType->maximum() - nextDiff) 1638 1638 current = m_inputType->maximum() - nextDiff; 1639 setValueAsNumber(current, ec, Dispatch ChangeEvent);1639 setValueAsNumber(current, ec, DispatchInputAndChangeEvent); 1640 1640 } 1641 1641 if ((sign > 0 && current < m_inputType->minimum()) || (sign < 0 && current > m_inputType->maximum())) 1642 setValue(m_inputType->serialize(sign > 0 ? m_inputType->minimum() : m_inputType->maximum()), Dispatch ChangeEvent);1642 setValue(m_inputType->serialize(sign > 0 ? m_inputType->minimum() : m_inputType->maximum()), DispatchInputAndChangeEvent); 1643 1643 else { 1644 1644 ExceptionCode ec; … … 1660 1660 newValue = m_inputType->maximum(); 1661 1661 1662 setValueAsNumber(newValue, ec, n == 1 || n == -1 ? Dispatch ChangeEvent : DispatchNoEvent);1662 setValueAsNumber(newValue, ec, n == 1 || n == -1 ? DispatchInputAndChangeEvent : DispatchNoEvent); 1663 1663 current = newValue; 1664 1664 if (n > 1) 1665 applyStep(n - 1, AnyIsDefaultStep, Dispatch ChangeEvent, ec);1665 applyStep(n - 1, AnyIsDefaultStep, DispatchInputAndChangeEvent, ec); 1666 1666 else if (n < -1) 1667 applyStep(n + 1, AnyIsDefaultStep, Dispatch ChangeEvent, ec);1667 applyStep(n + 1, AnyIsDefaultStep, DispatchInputAndChangeEvent, ec); 1668 1668 } else 1669 applyStep(n, AnyIsDefaultStep, Dispatch ChangeEvent, ec);1669 applyStep(n, AnyIsDefaultStep, DispatchInputAndChangeEvent, ec); 1670 1670 } 1671 1671 } -
trunk/Source/WebCore/html/HTMLTextFormControlElement.h
r108051 r108228 35 35 36 36 enum TextFieldSelectionDirection { SelectionHasNoDirection, SelectionHasForwardDirection, SelectionHasBackwardDirection }; 37 enum TextFieldEventBehavior { DispatchNoEvent, DispatchChangeEvent };37 enum TextFieldEventBehavior { DispatchNoEvent, DispatchChangeEvent, DispatchInputAndChangeEvent }; 38 38 39 39 class HTMLTextFormControlElement : public HTMLFormControlElementWithState { -
trunk/Source/WebCore/html/TextFieldInputType.cpp
r108051 r108228 81 81 void TextFieldInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior) 82 82 { 83 // Grab this input element to keep reference even if JS event handler 84 // changes input type. 85 RefPtr<HTMLInputElement> input(element()); 86 83 87 // We don't ask InputType::setValue to dispatch events because 84 88 // TextFieldInputType dispatches events different way from InputType. … … 86 90 87 91 if (valueChanged) 88 element()->updateInnerTextValue();92 input->updateInnerTextValue(); 89 93 90 94 unsigned max = visibleValue().length(); 91 if ( element()->focused())92 element()->setSelectionRange(max, max);95 if (input->focused()) 96 input->setSelectionRange(max, max); 93 97 else 94 element()->cacheSelectionInResponseToSetValue(max);98 input->cacheSelectionInResponseToSetValue(max); 95 99 96 100 if (!valueChanged) 97 101 return; 98 102 99 if (eventBehavior != DispatchNoEvent) { 103 switch (eventBehavior) { 104 case DispatchChangeEvent: 100 105 // If the user is still editing this field, dispatch an input event rather than a change event. 101 106 // The change event will be dispatched when editing finishes. 102 if ( element()->focused())103 element()->dispatchFormControlInputEvent();107 if (input->focused()) 108 input->dispatchFormControlInputEvent(); 104 109 else 105 element()->dispatchFormControlChangeEvent(); 110 input->dispatchFormControlChangeEvent(); 111 break; 112 113 case DispatchInputAndChangeEvent: { 114 input->dispatchFormControlInputEvent(); 115 input->dispatchFormControlChangeEvent(); 116 break; 117 } 118 119 case DispatchNoEvent: 120 break; 106 121 } 107 122 108 123 // FIXME: Why do we do this when eventBehavior == DispatchNoEvent 109 if (! element()->focused() || eventBehavior == DispatchNoEvent)110 element()->setTextAsOfLastFormControlChangeEvent(sanitizedValue);124 if (!input->focused() || eventBehavior == DispatchNoEvent) 125 input->setTextAsOfLastFormControlChangeEvent(sanitizedValue); 111 126 } 112 127
Note: See TracChangeset
for help on using the changeset viewer.