diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-06-11 15:06:39 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-06-11 15:52:25 +0200 |
commit | f9940b15f7f0fde731431626172939b9821fd660 (patch) | |
tree | afe9900e3515917a7e5b9f033fbb49f79e5ae8bf /tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp | |
parent | cde86464dfceabeaf8320e2d48bab037f9d2d4b5 (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/widgets/widgets/qpushbutton/tst_qpushbutton.cpp')
-rw-r--r-- | tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp | 41 |
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" |