aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quicktemplates2/qquickabstractbutton.cpp2
-rw-r--r--tests/auto/controls/data/tst_abstractbutton.qml22
2 files changed, 23 insertions, 1 deletions
diff --git a/src/quicktemplates2/qquickabstractbutton.cpp b/src/quicktemplates2/qquickabstractbutton.cpp
index bee45554..67fa7704 100644
--- a/src/quicktemplates2/qquickabstractbutton.cpp
+++ b/src/quicktemplates2/qquickabstractbutton.cpp
@@ -553,7 +553,7 @@ void QQuickAbstractButton::mouseReleaseEvent(QMouseEvent *event)
bool wasPressed = d->pressed;
setPressed(false);
- if (d->keepPressed || contains(event->pos()))
+ if (!d->wasHeld && (d->keepPressed || contains(event->pos())))
nextCheckState();
if (wasPressed) {
diff --git a/tests/auto/controls/data/tst_abstractbutton.qml b/tests/auto/controls/data/tst_abstractbutton.qml
index 27fc4525..83ca7980 100644
--- a/tests/auto/controls/data/tst_abstractbutton.qml
+++ b/tests/auto/controls/data/tst_abstractbutton.qml
@@ -60,6 +60,11 @@ TestCase {
Item { }
}
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
function test_text() {
var control = button.createObject(testCase);
verify(control);
@@ -103,4 +108,21 @@ TestCase {
control.destroy()
}
+
+ function test_pressAndHold() {
+ var control = button.createObject(testCase, {checkable: true})
+ verify(control)
+
+ var pressAndHoldSpy = signalSpy.createObject(control, {target: control, signalName: "pressAndHold"})
+ verify(pressAndHoldSpy.valid)
+
+ mousePress(control)
+ pressAndHoldSpy.wait()
+ compare(control.checked, false)
+
+ mouseRelease(control)
+ compare(control.checked, false)
+
+ control.destroy()
+ }
}