aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>2015-04-29 12:47:38 +0200
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2015-04-29 14:34:30 +0000
commite661fa1057641092428b5cb2db74b2f3a9496331 (patch)
tree7e80ccf771f0fd05d38f3ba43dbbf6773215f604 /src
parent758ecffe6450e3e64282161eeaa5f76fb8b158c3 (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.cpp39
-rw-r--r--src/controls/qquickbutton_p.h1
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();