aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/templates/qtquicktemplates2plugin.cpp1
-rw-r--r--src/quicktemplates2/qquickabstractbutton.cpp18
-rw-r--r--src/quicktemplates2/qquickabstractbutton_p.h1
-rw-r--r--src/quicktemplates2/qquickabstractbutton_p_p.h2
-rw-r--r--src/quicktemplates2/qquickswitch.cpp2
-rw-r--r--src/quicktemplates2/qquickswitchdelegate.cpp2
-rw-r--r--tests/auto/controls/data/tst_button.qml4
-rw-r--r--tests/auto/controls/data/tst_checkbox.qml8
-rw-r--r--tests/auto/controls/data/tst_radiobutton.qml4
-rw-r--r--tests/auto/controls/data/tst_switch.qml11
-rw-r--r--tests/auto/controls/data/tst_switchdelegate.qml9
11 files changed, 53 insertions, 9 deletions
diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp
index ef6787f4..203cba30 100644
--- a/src/imports/templates/qtquicktemplates2plugin.cpp
+++ b/src/imports/templates/qtquicktemplates2plugin.cpp
@@ -223,6 +223,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri)
qmlRegisterType<QQuickTumbler, 1>(uri, 2, 1, "Tumbler");
// QtQuick.Templates 2.2 (new types and revisions in Qt 5.9)
+ qmlRegisterRevision<QQuickAbstractButton, 2>(uri, 2, 2);
qmlRegisterType<QQuickComboBox, 2>(uri, 2, 2, "ComboBox");
qmlRegisterType<QQuickDial, 2>(uri, 2, 2, "Dial");
qmlRegisterType<QQuickDrawer, 2>(uri, 2, 2, "Drawer");
diff --git a/src/quicktemplates2/qquickabstractbutton.cpp b/src/quicktemplates2/qquickabstractbutton.cpp
index ffd8efa2..1724ead1 100644
--- a/src/quicktemplates2/qquickabstractbutton.cpp
+++ b/src/quicktemplates2/qquickabstractbutton.cpp
@@ -93,6 +93,13 @@ static const int AUTO_REPEAT_INTERVAL = 100;
*/
/*!
+ \since QtQuick.Controls 2.2
+ \qmlsignal QtQuick.Controls::AbstractButton::toggled()
+
+ This signal is emitted when a checkable button is interactively toggled by the user.
+*/
+
+/*!
\qmlsignal QtQuick.Controls::AbstractButton::pressAndHold()
This signal is emitted when the button is interactively pressed and held down by the user.
@@ -162,6 +169,15 @@ void QQuickAbstractButtonPrivate::stopPressRepeat()
}
}
+void QQuickAbstractButtonPrivate::toggle(bool value)
+{
+ Q_Q(QQuickAbstractButton);
+ const bool wasChecked = checked;
+ q->setChecked(value);
+ if (wasChecked != checked)
+ emit q->toggled();
+}
+
QQuickAbstractButton *QQuickAbstractButtonPrivate::findCheckedButton() const
{
Q_Q(const QQuickAbstractButton);
@@ -621,7 +637,7 @@ void QQuickAbstractButton::nextCheckState()
{
Q_D(QQuickAbstractButton);
if (d->checkable && (!d->checked || d->findCheckedButton() != this))
- setChecked(!d->checked);
+ d->toggle(!d->checked);
}
void QQuickAbstractButton::checkableChange()
diff --git a/src/quicktemplates2/qquickabstractbutton_p.h b/src/quicktemplates2/qquickabstractbutton_p.h
index 524dd130..00378bce 100644
--- a/src/quicktemplates2/qquickabstractbutton_p.h
+++ b/src/quicktemplates2/qquickabstractbutton_p.h
@@ -102,6 +102,7 @@ Q_SIGNALS:
void released();
void canceled();
void clicked();
+ Q_REVISION(2) void toggled();
void pressAndHold();
void doubleClicked();
void textChanged();
diff --git a/src/quicktemplates2/qquickabstractbutton_p_p.h b/src/quicktemplates2/qquickabstractbutton_p_p.h
index 688ad804..aa9d98d5 100644
--- a/src/quicktemplates2/qquickabstractbutton_p_p.h
+++ b/src/quicktemplates2/qquickabstractbutton_p_p.h
@@ -78,6 +78,8 @@ public:
QQuickAbstractButton *findCheckedButton() const;
QList<QQuickAbstractButton *> findExclusiveButtons() const;
+ void toggle(bool value);
+
QString text;
bool down;
bool explicitDown;
diff --git a/src/quicktemplates2/qquickswitch.cpp b/src/quicktemplates2/qquickswitch.cpp
index fa08a1d8..b967fe56 100644
--- a/src/quicktemplates2/qquickswitch.cpp
+++ b/src/quicktemplates2/qquickswitch.cpp
@@ -187,7 +187,7 @@ void QQuickSwitch::nextCheckState()
{
Q_D(QQuickSwitch);
if (keepMouseGrab())
- setChecked(d->position > 0.5);
+ d->toggle(d->position > 0.5);
else
QQuickAbstractButton::nextCheckState();
}
diff --git a/src/quicktemplates2/qquickswitchdelegate.cpp b/src/quicktemplates2/qquickswitchdelegate.cpp
index 81e282d9..4c0b430f 100644
--- a/src/quicktemplates2/qquickswitchdelegate.cpp
+++ b/src/quicktemplates2/qquickswitchdelegate.cpp
@@ -192,7 +192,7 @@ void QQuickSwitchDelegate::nextCheckState()
{
Q_D(QQuickSwitchDelegate);
if (keepMouseGrab())
- setChecked(d->position > 0.5);
+ d->toggle(d->position > 0.5);
else
QQuickItemDelegate::nextCheckState();
}
diff --git a/tests/auto/controls/data/tst_button.qml b/tests/auto/controls/data/tst_button.qml
index dcce20d7..ddfd72b7 100644
--- a/tests/auto/controls/data/tst_button.qml
+++ b/tests/auto/controls/data/tst_button.qml
@@ -58,7 +58,7 @@ TestCase {
Component {
id: signalSequenceSpy
SignalSequenceSpy {
- signals: ["pressed", "released", "canceled", "clicked", "doubleClicked", "pressedChanged", "downChanged", "checkedChanged"]
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "doubleClicked", "pressedChanged", "downChanged", "checkedChanged"]
}
}
@@ -306,6 +306,7 @@ TestCase {
["pressedChanged", { "pressed": false }],
["downChanged", { "down": false }],
["checkedChanged", { "checked": true }],
+ "toggled",
"released",
"clicked"]
control.checkable = true
@@ -319,6 +320,7 @@ TestCase {
["pressedChanged", { "pressed": false }],
["downChanged", { "down": false }],
["checkedChanged", { "checked": false }],
+ "toggled",
"released",
"clicked"]
mouseClick(control)
diff --git a/tests/auto/controls/data/tst_checkbox.qml b/tests/auto/controls/data/tst_checkbox.qml
index b88e6deb..41187aca 100644
--- a/tests/auto/controls/data/tst_checkbox.qml
+++ b/tests/auto/controls/data/tst_checkbox.qml
@@ -40,7 +40,7 @@
import QtQuick 2.2
import QtTest 1.0
-import QtQuick.Controls 2.1
+import QtQuick.Controls 2.2
TestCase {
id: testCase
@@ -58,7 +58,7 @@ TestCase {
Component {
id: signalSequenceSpy
SignalSequenceSpy {
- signals: ["pressed", "released", "canceled", "clicked", "pressedChanged", "checkedChanged", "checkStateChanged"]
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged", "checkStateChanged"]
}
}
@@ -147,6 +147,7 @@ TestCase {
sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
["checkStateChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
["checkedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
@@ -164,6 +165,7 @@ TestCase {
sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
["checkedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
@@ -219,6 +221,7 @@ TestCase {
["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
["checkStateChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
["checkedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ "toggled",
"released",
"clicked"]
keyClick(Qt.Key_Space)
@@ -232,6 +235,7 @@ TestCase {
["pressedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
["checkedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ "toggled",
"released",
"clicked"]
keyClick(Qt.Key_Space)
diff --git a/tests/auto/controls/data/tst_radiobutton.qml b/tests/auto/controls/data/tst_radiobutton.qml
index 9b6a2ae5..56d61b47 100644
--- a/tests/auto/controls/data/tst_radiobutton.qml
+++ b/tests/auto/controls/data/tst_radiobutton.qml
@@ -58,7 +58,7 @@ TestCase {
Component {
id: signalSequenceSpy
SignalSequenceSpy {
- signals: ["pressed", "released", "canceled", "clicked", "pressedChanged", "checkedChanged"]
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged"]
}
}
@@ -112,6 +112,7 @@ TestCase {
verify(sequenceSpy.success)
sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
@@ -177,6 +178,7 @@ TestCase {
"pressed",
["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
keyClick(Qt.Key_Space)
diff --git a/tests/auto/controls/data/tst_switch.qml b/tests/auto/controls/data/tst_switch.qml
index f3843cf7..4c2147f8 100644
--- a/tests/auto/controls/data/tst_switch.qml
+++ b/tests/auto/controls/data/tst_switch.qml
@@ -58,7 +58,7 @@ TestCase {
Component {
id: signalSequenceSpy
SignalSequenceSpy {
- signals: ["pressed", "released", "canceled", "clicked", "pressedChanged", "checkedChanged"]
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged"]
}
}
@@ -131,6 +131,7 @@ TestCase {
verify(spy.success)
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
@@ -146,6 +147,7 @@ TestCase {
verify(spy.success)
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
@@ -163,6 +165,7 @@ TestCase {
compare(control.pressed, true)
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width * 2, control.height / 2, Qt.LeftButton)
@@ -180,6 +183,7 @@ TestCase {
compare(control.pressed, true)
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, -control.width, control.height / 2, Qt.LeftButton)
@@ -225,6 +229,7 @@ TestCase {
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control.indicator, control.indicator.width)
@@ -259,6 +264,7 @@ TestCase {
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width)
@@ -293,6 +299,7 @@ TestCase {
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width)
@@ -317,6 +324,7 @@ TestCase {
"pressed",
["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
keyClick(Qt.Key_Space)
@@ -328,6 +336,7 @@ TestCase {
"pressed",
["pressedChanged", { "pressed": false, "checked": true }],
["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
"released",
"clicked"]
keyClick(Qt.Key_Space)
diff --git a/tests/auto/controls/data/tst_switchdelegate.qml b/tests/auto/controls/data/tst_switchdelegate.qml
index 4a5d711f..b1c6c82d 100644
--- a/tests/auto/controls/data/tst_switchdelegate.qml
+++ b/tests/auto/controls/data/tst_switchdelegate.qml
@@ -58,7 +58,7 @@ TestCase {
Component {
id: signalSequenceSpy
SignalSequenceSpy {
- signals: ["pressed", "released", "canceled", "clicked", "pressedChanged", "checkedChanged"]
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged"]
}
}
@@ -127,6 +127,7 @@ TestCase {
verify(spy.success)
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
@@ -142,6 +143,7 @@ TestCase {
verify(spy.success)
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
@@ -159,6 +161,7 @@ TestCase {
compare(control.pressed, true)
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width * 2, control.height / 2, Qt.LeftButton)
@@ -176,6 +179,7 @@ TestCase {
compare(control.pressed, true)
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, -control.width, control.height / 2, Qt.LeftButton)
@@ -221,6 +225,7 @@ TestCase {
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control.indicator, control.indicator.width)
@@ -255,6 +260,7 @@ TestCase {
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width)
@@ -289,6 +295,7 @@ TestCase {
spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
"released",
"clicked"]
mouseRelease(control, control.width)