summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2020-06-11 15:06:39 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2020-06-11 15:52:25 +0200
commitf9940b15f7f0fde731431626172939b9821fd660 (patch)
treeafe9900e3515917a7e5b9f033fbb49f79e5ae8bf /tests/auto
parentcde86464dfceabeaf8320e2d48bab037f9d2d4b5 (diff)
Fix breakage of QPushButton on macOS when a style sheet was set
Amends comment 6e1d70ae12baae4610356ec7b69635ad75a97b4e, which introduced SE_PushButtonBevel so that QPushButton could ignore clicks outside of the button's bevel. In the macOS style, make sure that the framerect we pass to NSButton::alignmentRectForFrame is the rect we receive from QPushButton in the style options. The frame property of the shared NSButton* object might not be initialized. In the style sheet style, handle SE_PushButtonBevel the same ways as Contents and FocusRect, as it is not a separately styleable property. Change-Id: I12eb1b046c864a02b34d276e6352e2e16d44231e Fixes: QTBUG-84852 Fixes: QTBUG-84879 Task-number: QTBUG-81452 Pick-to: 5.15 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp b/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp
index 51eb7d2020..634497f22f 100644
--- a/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp
+++ b/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp
@@ -71,6 +71,7 @@ private slots:
void taskQTBUG_20191_shortcutWithKeypadModifer();
#endif
void emitReleasedAfterChange();
+ void hitButton();
protected slots:
void resetCounters();
@@ -662,5 +663,45 @@ void tst_QPushButton::emitReleasedAfterChange()
QCOMPARE(spy.count(), 1);
}
+/*
+ Test that QPushButton::hitButton returns true for points that
+ are certainly inside the bevel, also when a style sheet is set.
+*/
+void tst_QPushButton::hitButton()
+{
+ class PushButton : public QPushButton
+ {
+ public:
+ PushButton(const QString &text = {})
+ : QPushButton(text)
+ {}
+
+ bool hitButton(const QPoint &point) const override
+ {
+ return QPushButton::hitButton(point);
+ }
+ };
+
+ QDialog dialog;
+ QVBoxLayout *layout = new QVBoxLayout;
+ PushButton *button1 = new PushButton("Ok");
+ PushButton *button2 = new PushButton("Cancel");
+ button2->setStyleSheet("QPushButton { margin: 10px; border-radius: 4px; border: 1px solid black; }");
+
+ layout->addWidget(button1);
+ layout->addWidget(button2);
+
+ dialog.setLayout(layout);
+ dialog.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&dialog));
+
+ const QPoint button1Center = button1->rect().center();
+ QVERIFY(button1->hitButton(button1Center));
+
+ const QPoint button2Center = button2->rect().center();
+ QVERIFY(button2->hitButton(button2Center));
+ QVERIFY(!button2->hitButton(QPoint(0, 0)));
+}
+
QTEST_MAIN(tst_QPushButton)
#include "tst_qpushbutton.moc"