summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qabstractbutton.cpp3
-rw-r--r--tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp32
2 files changed, 34 insertions, 1 deletions
diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp
index dbd94e890d..5854472ff0 100644
--- a/src/widgets/widgets/qabstractbutton.cpp
+++ b/src/widgets/widgets/qabstractbutton.cpp
@@ -991,13 +991,14 @@ void QAbstractButton::mousePressEvent(QMouseEvent *e)
void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)
{
Q_D(QAbstractButton);
- d->pressed = false;
if (e->button() != Qt::LeftButton) {
e->ignore();
return;
}
+ d->pressed = false;
+
if (!d->down) {
// refresh is required by QMacStyle to resume the default button animation
d->refresh();
diff --git a/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp b/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp
index 9efa8cf47e..bc7756d32f 100644
--- a/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp
+++ b/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp
@@ -68,6 +68,7 @@ private slots:
void shortcutEvents();
void stopRepeatTimer();
+ void mouseReleased(); // QTBUG-53244
#ifdef QT_KEYPAD_NAVIGATION
void keyNavigation();
#endif
@@ -563,6 +564,37 @@ void tst_QAbstractButton::stopRepeatTimer()
QCOMPARE(button.timerEventCount(), 0);
}
+void tst_QAbstractButton::mouseReleased() // QTBUG-53244
+{
+ MyButton button(nullptr);
+ button.setObjectName("button");
+ button.setGeometry(0, 0, 20, 20);
+ QSignalSpy spyPress(&button, &QAbstractButton::pressed);
+ QSignalSpy spyRelease(&button, &QAbstractButton::released);
+
+ QTest::mousePress(&button, Qt::LeftButton);
+ QCOMPARE(spyPress.count(), 1);
+ QCOMPARE(button.isDown(), true);
+ QCOMPARE(spyRelease.count(), 0);
+
+ QTest::mouseClick(&button, Qt::RightButton);
+ QCOMPARE(spyPress.count(), 1);
+ QCOMPARE(button.isDown(), true);
+ QCOMPARE(spyRelease.count(), 0);
+
+ QPointF posOutOfWidget = QPointF(30, 30);
+ QMouseEvent me(QEvent::MouseMove,
+ posOutOfWidget, Qt::NoButton,
+ Qt::MouseButtons(Qt::LeftButton),
+ Qt::NoModifier); // mouse press and move
+
+ qApp->sendEvent(&button, &me);
+ // should emit released signal once mouse is dragging out of boundary
+ QCOMPARE(spyPress.count(), 1);
+ QCOMPARE(button.isDown(), false);
+ QCOMPARE(spyRelease.count(), 1);
+}
+
#ifdef QT_KEYPAD_NAVIGATION
void tst_QAbstractButton::keyNavigation()
{