summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qsizegrip.cpp2
-rw-r--r--tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp25
2 files changed, 26 insertions, 1 deletions
diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp
index e46de3958f..5994071bfc 100644
--- a/src/widgets/widgets/qsizegrip.cpp
+++ b/src/widgets/widgets/qsizegrip.cpp
@@ -83,7 +83,7 @@ public:
int dyMax;
Qt::Corner m_corner;
bool gotMousePress;
- QWidget *tlw;
+ QPointer<QWidget> tlw;
#ifdef Q_WS_MAC
void updateMacSizer(bool hide) const;
#endif
diff --git a/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp b/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp
index f88cd634de..2600348998 100644
--- a/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp
+++ b/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp
@@ -46,6 +46,10 @@
#include <QLineEdit>
#include <QVBoxLayout>
#include <QLabel>
+#include <QMainWindow>
+#include <QStatusBar>
+#include <QMdiArea>
+#include <QMdiSubWindow>
static inline Qt::Corner sizeGripCorner(QWidget *parent, QSizeGrip *sizeGrip)
{
@@ -75,6 +79,7 @@ private slots:
void hideAndShowOnWindowStateChange_data();
void hideAndShowOnWindowStateChange();
void orientation();
+ void dontCrashOnTLWChange();
private:
QLineEdit *dummyWidget;
@@ -191,6 +196,26 @@ void tst_QSizeGrip::orientation()
QCOMPARE(sizeGripCorner(&widget, sizeGrip), Qt::TopRightCorner);
}
+void tst_QSizeGrip::dontCrashOnTLWChange()
+{
+ // QTBUG-22867
+ QMdiArea mdiArea;
+ mdiArea.show();
+
+ QMainWindow *mw = new QMainWindow();
+ QMdiSubWindow *mdi = mdiArea.addSubWindow(mw);
+ mw->statusBar()->setSizeGripEnabled(true);
+ mdiArea.removeSubWindow(mw);
+ delete mdi;
+ mw->show();
+
+ // the above setup causes a change of TLW for the size grip,
+ // and it must not crash.
+
+ QVERIFY(QTest::qWaitForWindowExposed(&mdiArea));
+ QVERIFY(QTest::qWaitForWindowExposed(mw));
+}
+
QTEST_MAIN(tst_QSizeGrip)
#include "tst_qsizegrip.moc"