aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-03-12 13:27:59 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2018-03-12 13:03:02 +0000
commitec9aa9f12142de82315eb6d37f121311ec8408bc (patch)
tree091c76e4e63c6a57a058afc4c0b1e8c261e04860
parent031a1e89e1baa952225c0f036b605f591f554e9b (diff)
Sliders and Dials: keep mouse grab on press
Since Qt 5.9, Sliders and Dials react immediately on mouse press. Thus, the old logic to keep mouse grab if the drag threshold was exceeded no longer makes sense with mouse. Don't allow e.g. Drawer to steal mouse press if a Slider or Dial is already being dragged. Task-number: QTBUG-66637 Change-Id: I76f7ab59180c1f3fb66db8412d7cccfbd373aee3 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r--src/quicktemplates2/qquickdial.cpp16
-rw-r--r--src/quicktemplates2/qquickdial_p.h1
-rw-r--r--src/quicktemplates2/qquickrangeslider.cpp13
-rw-r--r--src/quicktemplates2/qquickrangeslider_p.h1
-rw-r--r--src/quicktemplates2/qquickslider.cpp13
-rw-r--r--src/quicktemplates2/qquickslider_p.h1
-rw-r--r--tests/auto/qquickdrawer/tst_qquickdrawer.cpp10
7 files changed, 10 insertions, 45 deletions
diff --git a/src/quicktemplates2/qquickdial.cpp b/src/quicktemplates2/qquickdial.cpp
index b5957069..03aee27e 100644
--- a/src/quicktemplates2/qquickdial.cpp
+++ b/src/quicktemplates2/qquickdial.cpp
@@ -679,21 +679,7 @@ void QQuickDial::mousePressEvent(QMouseEvent *event)
Q_D(QQuickDial);
QQuickControl::mousePressEvent(event);
d->handleMove(event->localPos());
-}
-
-void QQuickDial::mouseMoveEvent(QMouseEvent *event)
-{
- Q_D(QQuickDial);
- if (!keepMouseGrab()) {
- bool overXDragThreshold = QQuickWindowPrivate::dragOverThreshold(event->localPos().x() - d->pressPoint.x(), Qt::XAxis, event);
- setKeepMouseGrab(overXDragThreshold);
-
- if (!overXDragThreshold) {
- bool overYDragThreshold = QQuickWindowPrivate::dragOverThreshold(event->localPos().y() - d->pressPoint.y(), Qt::YAxis, event);
- setKeepMouseGrab(overYDragThreshold);
- }
- }
- QQuickControl::mouseMoveEvent(event);
+ setKeepMouseGrab(true);
}
#if QT_CONFIG(quicktemplates2_multitouch)
diff --git a/src/quicktemplates2/qquickdial_p.h b/src/quicktemplates2/qquickdial_p.h
index d7bab0ad..d2caccfc 100644
--- a/src/quicktemplates2/qquickdial_p.h
+++ b/src/quicktemplates2/qquickdial_p.h
@@ -139,7 +139,6 @@ protected:
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
#if QT_CONFIG(quicktemplates2_multitouch)
void touchEvent(QTouchEvent *event) override;
#endif
diff --git a/src/quicktemplates2/qquickrangeslider.cpp b/src/quicktemplates2/qquickrangeslider.cpp
index 7205f26b..36d8ca02 100644
--- a/src/quicktemplates2/qquickrangeslider.cpp
+++ b/src/quicktemplates2/qquickrangeslider.cpp
@@ -1047,18 +1047,7 @@ void QQuickRangeSlider::mousePressEvent(QMouseEvent *event)
Q_D(QQuickRangeSlider);
QQuickControl::mousePressEvent(event);
d->handleMove(event->localPos());
-}
-
-void QQuickRangeSlider::mouseMoveEvent(QMouseEvent *event)
-{
- Q_D(QQuickRangeSlider);
- if (!keepMouseGrab()) {
- if (d->orientation == Qt::Horizontal)
- setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().x() - d->pressPoint.x(), Qt::XAxis, event));
- else
- setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().y() - d->pressPoint.y(), Qt::YAxis, event));
- }
- QQuickControl::mouseMoveEvent(event);
+ setKeepMouseGrab(true);
}
#if QT_CONFIG(quicktemplates2_multitouch)
diff --git a/src/quicktemplates2/qquickrangeslider_p.h b/src/quicktemplates2/qquickrangeslider_p.h
index a6326441..45de6bbb 100644
--- a/src/quicktemplates2/qquickrangeslider_p.h
+++ b/src/quicktemplates2/qquickrangeslider_p.h
@@ -126,7 +126,6 @@ protected:
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
#if QT_CONFIG(quicktemplates2_multitouch)
void touchEvent(QTouchEvent *event) override;
#endif
diff --git a/src/quicktemplates2/qquickslider.cpp b/src/quicktemplates2/qquickslider.cpp
index ef2077af..5ad3c036 100644
--- a/src/quicktemplates2/qquickslider.cpp
+++ b/src/quicktemplates2/qquickslider.cpp
@@ -684,18 +684,7 @@ void QQuickSlider::mousePressEvent(QMouseEvent *event)
Q_D(QQuickSlider);
QQuickControl::mousePressEvent(event);
d->handleMove(event->localPos());
-}
-
-void QQuickSlider::mouseMoveEvent(QMouseEvent *event)
-{
- Q_D(QQuickSlider);
- if (!keepMouseGrab()) {
- if (d->orientation == Qt::Horizontal)
- setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().x() - d->pressPoint.x(), Qt::XAxis, event));
- else
- setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().y() - d->pressPoint.y(), Qt::YAxis, event));
- }
- QQuickControl::mouseMoveEvent(event);
+ setKeepMouseGrab(true);
}
#if QT_CONFIG(quicktemplates2_multitouch)
diff --git a/src/quicktemplates2/qquickslider_p.h b/src/quicktemplates2/qquickslider_p.h
index 95545462..ee6bcffa 100644
--- a/src/quicktemplates2/qquickslider_p.h
+++ b/src/quicktemplates2/qquickslider_p.h
@@ -144,7 +144,6 @@ protected:
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
#if QT_CONFIG(quicktemplates2_multitouch)
void touchEvent(QTouchEvent *event) override;
#endif
diff --git a/tests/auto/qquickdrawer/tst_qquickdrawer.cpp b/tests/auto/qquickdrawer/tst_qquickdrawer.cpp
index bba1cf45..e3a6ccf2 100644
--- a/tests/auto/qquickdrawer/tst_qquickdrawer.cpp
+++ b/tests/auto/qquickdrawer/tst_qquickdrawer.cpp
@@ -1263,13 +1263,17 @@ void tst_QQuickDrawer::nonModal()
void tst_QQuickDrawer::slider_data()
{
QTest::addColumn<bool>("mouse");
- QTest::newRow("mouse") << true;
- QTest::newRow("touch") << false;
+ QTest::addColumn<int>("delta");
+
+ QTest::newRow("mouse") << true << 2;
+ QTest::newRow("touch") << false << 2;
+ QTest::newRow("mouse,delta") << true << 296 / 8;
}
void tst_QQuickDrawer::slider()
{
QFETCH(bool, mouse);
+ QFETCH(int, delta);
QQuickApplicationHelper helper(this, QStringLiteral("slider.qml"));
QQuickWindow *window = helper.window;
@@ -1295,7 +1299,7 @@ void tst_QQuickDrawer::slider()
QTest::touchEvent(window, touchDevice.data()).press(0, from);
int distance = qAbs(from.x() - to.x());
- for (int dx = 2; dx < distance; dx += 2) {
+ for (int dx = delta; dx <= distance; dx += delta) {
if (mouse)
QTest::mouseMove(window, from - QPoint(dx, 0));
else