diff options
author | Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com> | 2015-04-29 12:47:38 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-04-29 14:34:30 +0000 |
commit | e661fa1057641092428b5cb2db74b2f3a9496331 (patch) | |
tree | 7e80ccf771f0fd05d38f3ba43dbbf6773215f604 /src | |
parent | 758ecffe6450e3e64282161eeaa5f76fb8b158c3 (diff) |
QQuickButton: Add canceled signal
We now support the following pattern:
1. Press the mouse button => emit pressed
2. Move the mouse cursor outside the button => pressed = false
3. Release the mouse button => emit canceled
Note that getting the mouse grabbed away by another item, at any
stage, will also emit the canceled signal.
Change-Id: I97e485327370ea47943dfef75553000cee449a01
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/controls/qquickbutton.cpp | 39 | ||||
-rw-r--r-- | src/controls/qquickbutton_p.h | 1 |
2 files changed, 31 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() diff --git a/src/controls/qquickbutton_p.h b/src/controls/qquickbutton_p.h index 1622be76..903af206 100644 --- a/src/controls/qquickbutton_p.h +++ b/src/controls/qquickbutton_p.h @@ -76,6 +76,7 @@ public: Q_SIGNALS: void pressed(); void released(); + void canceled(); void clicked(); void textChanged(); void pressedChanged(); |