aboutsummaryrefslogtreecommitdiffstats
path: root/src/controls/qquickbutton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/controls/qquickbutton.cpp')
-rw-r--r--src/controls/qquickbutton.cpp39
1 files changed, 30 insertions, 9 deletions
diff --git a/src/controls/qquickbutton.cpp b/src/controls/qquickbutton.cpp
index 240c4397..4bf2c08a 100644
--- a/src/controls/qquickbutton.cpp
+++ b/src/controls/qquickbutton.cpp
@@ -121,6 +121,14 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \qmlsignal QtQuickControls2::Button::canceled()
+
+ This signal is emitted when the button loses mouse grab
+ while being pressed, or when it would emit the \l release
+ signal but the mouse cursor is not inside the button.
+*/
+
+/*!
\qmlsignal QtQuickControls2::Button::clicked()
This signal is emitted when the button is clicked.
@@ -202,10 +210,6 @@ void QQuickButton::setPressed(bool isPressed)
if (d->pressed != isPressed) {
d->pressed = isPressed;
emit pressedChanged();
- if (isPressed)
- emit pressed();
- else
- emit released();
}
}
@@ -242,8 +246,12 @@ void QQuickButton::setLabel(QQuickItem *label)
void QQuickButton::focusOutEvent(QFocusEvent *event)
{
+ Q_D(QQuickButton);
QQuickControl::focusOutEvent(event);
- setPressed(false);
+ if (d->pressed) {
+ setPressed(false);
+ emit canceled();
+ }
}
void QQuickButton::keyPressEvent(QKeyEvent *event)
@@ -251,6 +259,7 @@ void QQuickButton::keyPressEvent(QKeyEvent *event)
QQuickControl::keyPressEvent(event);
if (event->key() == Qt::Key_Space) {
setPressed(true);
+ emit pressed();
event->accept();
}
}
@@ -259,8 +268,9 @@ void QQuickButton::keyReleaseEvent(QKeyEvent *event)
{
QQuickControl::keyReleaseEvent(event);
if (event->key() == Qt::Key_Space) {
- emit clicked();
setPressed(false);
+ emit released();
+ emit clicked();
event->accept();
}
}
@@ -269,6 +279,7 @@ void QQuickButton::mousePressEvent(QMouseEvent *event)
{
QQuickControl::mousePressEvent(event);
setPressed(true);
+ emit pressed();
event->accept();
}
@@ -281,17 +292,27 @@ void QQuickButton::mouseMoveEvent(QMouseEvent *event)
void QQuickButton::mouseReleaseEvent(QMouseEvent *event)
{
+ Q_D(QQuickButton);
QQuickControl::mouseReleaseEvent(event);
- if (contains(event->pos()))
- emit clicked();
+ bool wasPressed = d->pressed;
setPressed(false);
+ if (wasPressed) {
+ emit released();
+ emit clicked();
+ } else {
+ emit canceled();
+ }
event->accept();
}
void QQuickButton::mouseUngrabEvent()
{
+ Q_D(QQuickButton);
QQuickControl::mouseUngrabEvent();
- setPressed(false);
+ if (d->pressed) {
+ setPressed(false);
+ emit canceled();
+ }
}
void QQuickButton::componentComplete()