From 26ddb586acd49834c7cffac781ce504ec78635cc Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Mon, 9 Sep 2013 13:10:37 +0200 Subject: xcb: QWindow never uses XCB_GRAVITY_CENTER Center gravity doesn't mean center the window, it only affects the method of converting between internal window bounds and decorated bounds. So wanting to have each dialog centered w.r.t. its transient parent is not a reason for using center gravity. Instead it caused the bug that when you resize a QMessageBox by clicking the Show Details button, it jumps downwards on the screen. Task-number: QTBUG-32473 Change-Id: I3fabf3caa1e4d10fd4f7508e297f73efe5cc51b6 Reviewed-by: Gunnar Sletta --- .../dialogs/qmessagebox/tst_qmessagebox.cpp | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'tests/auto/widgets/dialogs') diff --git a/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp b/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp index c3faa93309..0425db3098 100644 --- a/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp +++ b/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp @@ -114,6 +114,7 @@ private slots: void about(); void detailsText(); void detailsButtonText(); + void expandDetails_QTBUG_32473(); #ifndef Q_OS_MAC void shortcut(); @@ -137,6 +138,19 @@ private: QTimer keySendTimer; }; +class tst_ResizingMessageBox : public QMessageBox +{ +public: + tst_ResizingMessageBox() : QMessageBox(), resized(false) { } + bool resized; + +protected: + void resizeEvent ( QResizeEvent * event ) { + resized = true; + QMessageBox::resizeEvent(event); + } +}; + tst_QMessageBox::tst_QMessageBox() : keyToSend(-1) { } @@ -603,6 +617,37 @@ void tst_QMessageBox::detailsButtonText() } } +void tst_QMessageBox::expandDetails_QTBUG_32473() +{ + tst_ResizingMessageBox box; + box.setDetailedText("bla"); + box.show(); + QApplication::postEvent(&box, new QEvent(QEvent::LanguageChange)); + QApplication::processEvents(); + QDialogButtonBox* bb = box.findChild("qt_msgbox_buttonbox"); + QVERIFY(bb); + + QList list = bb->buttons(); + QAbstractButton* moreButton = NULL; + foreach (QAbstractButton* btn, list) + if (btn && bb->buttonRole(btn) == QDialogButtonBox::ActionRole) + moreButton = btn; + QVERIFY(moreButton); + QVERIFY(QTest::qWaitForWindowExposed(&box)); + QRect geom = box.geometry(); + box.resized = false; + moreButton->click(); + QTRY_VERIFY(box.resized); + // After we receive the expose event for a second widget, it's likely + // that the window manager is also done manipulating the first QMessageBox. + QWidget fleece; + fleece.show(); + QTest::qWaitForWindowExposed(&fleece); + if (geom.topLeft() == box.geometry().topLeft()) + QTest::qWait(500); + QCOMPARE(geom.topLeft(), box.geometry().topLeft()); +} + void tst_QMessageBox::incorrectDefaultButton() { keyToSend = Qt::Key_Escape; -- cgit v1.2.3