aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-11-21 14:38:39 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2016-11-22 08:05:40 +0000
commit994319a35eac6c9574068f1d37a993f587c771da (patch)
treec11218e9cca17876a40a2cd49ae2f72fffc18698
parentde4ff95cd166b13fb4818ada5493d913345ef0ef (diff)
AbstractButton: fix press-and-hold for checkable buttons
Don't toggle the checked state on release after press-and-hold. Change-Id: I06b6a0e86dc02c171eef10f3c0d564ff605796f0 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-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()
+ }
}