diff options
Diffstat (limited to 'Source/WebCore/wml')
-rw-r--r-- | Source/WebCore/wml/WMLInputElement.cpp | 20 | ||||
-rw-r--r-- | Source/WebCore/wml/WMLInputElement.h | 5 |
2 files changed, 18 insertions, 7 deletions
diff --git a/Source/WebCore/wml/WMLInputElement.cpp b/Source/WebCore/wml/WMLInputElement.cpp index 687a387..80e4e70 100644 --- a/Source/WebCore/wml/WMLInputElement.cpp +++ b/Source/WebCore/wml/WMLInputElement.cpp @@ -41,6 +41,7 @@ WMLInputElement::WMLInputElement(const QualifiedName& tagName, Document* doc) : WMLFormControlElement(tagName, doc) , m_isPasswordField(false) , m_isEmptyOk(false) + , m_wasChangedSinceLastChangeEvent(false) , m_numOfCharsAllowedByMask(0) { } @@ -173,6 +174,16 @@ void WMLInputElement::setValueFromRenderer(const String& value) InputElement::setValueFromRenderer(m_data, this, this, value); } +bool WMLInputElement::wasChangedSinceLastFormControlChangeEvent() const +{ + return m_wasChangedSinceLastChangeEvent; +} + +void WMLInputElement::setChangedSinceLastFormControlChangeEvent(bool changed) +{ + m_wasChangedSinceLastChangeEvent = changed; +} + bool WMLInputElement::saveFormControlState(String& result) const { if (m_isPasswordField) @@ -296,14 +307,9 @@ void WMLInputElement::defaultEventHandler(Event* evt) if (clickDefaultFormButton) { // Fire onChange for text fields. - RenderObject* r = renderer(); - if (r && toRenderTextControl(r)->wasChangedSinceLastChangeEvent()) { + if (wasChangedSinceLastChangeEvent()) { + setChangedSinceLastChangeEvent(false); dispatchEvent(Event::create(eventNames().changeEvent, true, false)); - - // Refetch the renderer since arbitrary JS code run during onchange can do anything, including destroying it. - r = renderer(); - if (r) - toRenderTextControl(r)->setChangedSinceLastChangeEvent(false); } evt->setDefaultHandled(); diff --git a/Source/WebCore/wml/WMLInputElement.h b/Source/WebCore/wml/WMLInputElement.h index 6c66410..558147a 100644 --- a/Source/WebCore/wml/WMLInputElement.h +++ b/Source/WebCore/wml/WMLInputElement.h @@ -64,8 +64,12 @@ public: virtual void setValue(const String&, bool sendChangeEvent = false); virtual void setValueForUser(const String&); virtual String visibleValue() const { return value(); } + virtual String convertFromVisibleValue(const String& value) const { return value; } virtual void setValueFromRenderer(const String&); + virtual bool wasChangedSinceLastFormControlChangeEvent() const; + virtual void setChangedSinceLastFormControlChangeEvent(bool); + virtual bool saveFormControlState(String& value) const; virtual void restoreFormControlState(const String&); @@ -109,6 +113,7 @@ private: InputElementData m_data; bool m_isPasswordField; bool m_isEmptyOk; + bool m_wasChangedSinceLastChangeEvent; String m_formatMask; unsigned m_numOfCharsAllowedByMask; }; |