summaryrefslogtreecommitdiffstats
path: root/WebCore/html/RangeInputType.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/html/RangeInputType.cpp')
-rw-r--r--WebCore/html/RangeInputType.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/WebCore/html/RangeInputType.cpp b/WebCore/html/RangeInputType.cpp
index ad47f14..50520cd 100644
--- a/WebCore/html/RangeInputType.cpp
+++ b/WebCore/html/RangeInputType.cpp
@@ -55,6 +55,11 @@ PassOwnPtr<InputType> RangeInputType::create(HTMLInputElement* element)
return adoptPtr(new RangeInputType(element));
}
+bool RangeInputType::isRangeControl() const
+{
+ return true;
+}
+
const AtomicString& RangeInputType::formControlType() const
{
return InputTypeNames::range();
@@ -143,6 +148,9 @@ bool RangeInputType::handleKeydownEvent(KeyboardEvent* event)
double step = (max - min) / 100;
double current = parseToDouble(element()->value(), numeric_limits<double>::quiet_NaN());
ASSERT(isfinite(current));
+ // Stepping-up and -down for step="any" are special cases for type="range" from renderer for convenient.
+ // No stepping normally for step="any". They cannot be handled by stepUp()/stepDown()/stepUpFromRenderer().
+ // So calculating values stepped-up or -down here.
double newValue;
if (key == "Up" || key == "Right") {
newValue = current + step;
@@ -159,10 +167,8 @@ bool RangeInputType::handleKeydownEvent(KeyboardEvent* event)
}
} else {
int stepMagnification = (key == "Up" || key == "Right") ? 1 : -1;
- String lastStringValue = element()->value();
- element()->stepUp(stepMagnification, ec);
- if (lastStringValue != element()->value())
- element()->dispatchFormControlChangeEvent();
+ // Reasonable stepping-up/-down by stepUpFromRenderer() unless step="any"
+ element()->stepUpFromRenderer(stepMagnification);
}
event->setDefaultHandled();
return true;