[Webkit-unassigned] [Bug 15251] Setting input.value for <input type=range> does not update the position of the slider thumb if the thumb has been dragged once

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Fri Sep 21 12:28:13 PDT 2007


------- Comment #6 from aroben at apple.com  2007-09-21 12:28 PDT -------
Adele said she didn't think the approach in my first patch was right, so I
debugged a bit more, and I think I have found the real cause.

It looks as though the thumb's position will only get updated if
HTMLInputElement::setChanged() is called at some point. When setting the value
through JS, this happens in HTMLInputElement::parseMappedAttribute:

    } else if (attr->name() == valueAttr) {
        // We only need to setChanged if the form is looking at the default
value right now.
        if (m_value.isNull())

Note the check for if (m_value.isNull()). Normally, modifications to m_value
only happen if HTMLInputElement::storesValueSeparateFromAttribute() returns
true (which it does not for <input type=range>). So for an <input type=range>,
we would expect m_value.isNull() to always be true, and therefore setChanged()
to always be called when input.value is modified.

However, there is one place where m_value is set without first checking
storesValueSeparateFromAttribute(): HTMLInputElement::setValueFromRenderer().
This method gets called from RenderSlider::setValueForPosition(), which is
called when you drag the thumb. This sets m_value, so setChanged() is never
subsequently called when input.value is set from JS.

It seems like RenderSlider really wants to set the value attribute directly,
not HTMLInputElement::m_value.

Configure bugmail: http://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

More information about the webkit-unassigned mailing list