aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-02-08 12:59:45 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-02-08 17:15:46 +0000
commite75bbe782def5cbcc8e7f69640c7cdb107164f4a (patch)
treeffea0b9f96157dbb5660d076843e5b42b9068348 /src/templates
parenta2aff9c3c8800d265757d5171cb4f39c81328edd (diff)
Sliders: fix snapping on release
If the value changes when snapped on release, the position is updated accordingly. However, if the value doesn't change, the position must be updated manually or the handle doesn't snap as it should. Change-Id: I3648e08c2f897d73c84c6d91510795e4aede41d7 Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/templates')
-rw-r--r--src/templates/qquickrangeslider.cpp6
-rw-r--r--src/templates/qquickslider.cpp6
2 files changed, 10 insertions, 2 deletions
diff --git a/src/templates/qquickrangeslider.cpp b/src/templates/qquickrangeslider.cpp
index 5fae3ae5..13f5e338 100644
--- a/src/templates/qquickrangeslider.cpp
+++ b/src/templates/qquickrangeslider.cpp
@@ -808,7 +808,11 @@ void QQuickRangeSlider::mouseReleaseEvent(QMouseEvent *event)
qreal pos = positionAt(this, pressedNode->handle(), event->pos());
if (d->snapMode != NoSnap)
pos = snapPosition(this, pos);
- pressedNode->setValue(valueAt(this, pos));
+ qreal val = valueAt(this, pos);
+ if (!qFuzzyCompare(val, pressedNode->value()))
+ pressedNode->setValue(val);
+ else if (d->snapMode != NoSnap)
+ QQuickRangeSliderNodePrivate::get(pressedNode)->setPosition(pos);
setKeepMouseGrab(false);
pressedNode->setPressed(false);
}
diff --git a/src/templates/qquickslider.cpp b/src/templates/qquickslider.cpp
index b197b4a1..fac8fb50 100644
--- a/src/templates/qquickslider.cpp
+++ b/src/templates/qquickslider.cpp
@@ -537,7 +537,11 @@ void QQuickSlider::mouseReleaseEvent(QMouseEvent *event)
qreal pos = d->positionAt(event->pos());
if (d->snapMode != NoSnap)
pos = d->snapPosition(pos);
- setValue(d->valueAt(pos));
+ qreal val = d->valueAt(pos);
+ if (!qFuzzyCompare(val, d->value))
+ setValue(val);
+ else if (d->snapMode != NoSnap)
+ d->setPosition(pos);
setKeepMouseGrab(false);
}
setPressed(false);