summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/widgets
diff options
context:
space:
mode:
authorDebao Zhang <dbzhang800@gmail.com>2011-12-25 00:47:41 +0800
committerQt by Nokia <qt-info@nokia.com>2012-02-23 10:14:24 +0100
commitd2f65aa470fe30849a01380e4a50e8a4ebbce07e (patch)
treec8e74ca01a820ed7a384b3eac27f65a627bc7687 /tests/auto/widgets/widgets
parentef9a86db5615a438c72a78745a8e558e687bf829 (diff)
Fix conflict between QMainWindow::restoreState() and QWidget::setStylesheet()
If QMainWindow::restoreState() then QWidget::setStylesheet() were called before the QMainWindow is shown, the size of QDockWidget can not be restored. QWidget::setStylesheet() will generate QEvent::StyleChange event, which will cause the function QDockAreaLayout::fitLayout() to be called before the layout of MainWindow is activated. Although the state info has been stored in a QMainWindowLayoutState variable by QMainWindow::restoreState(), but QMainWindowLayout::setGeometry() still isn't called at present. So QDockAreaLayout::fitLayout() will force the size of dockwidgets and centralwidget to be calculated using the wrong geometry, which will break the state restored by QMainWindow::restoreState(). This is a side effect of 692e9103ebb85b90e79377206d5d03b704d43d42. Task-number: QTBUG-15080 Change-Id: I8cda6a529d178f7467a59b780db80df0a44d4769 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto/widgets/widgets')
-rw-r--r--tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
index 13540355c7..0f07546559 100644
--- a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
+++ b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
@@ -101,6 +101,7 @@ private slots:
void centralWidgetSize();
void dockWidgetSize();
void QTBUG2774_stylechange();
+ void QTBUG15080_restoreState();
void toggleUnifiedTitleAndToolBarOnMac();
};
@@ -1705,6 +1706,41 @@ void tst_QMainWindow::QTBUG2774_stylechange()
}
}
+void tst_QMainWindow::QTBUG15080_restoreState()
+{
+ QByteArray state;
+
+ //save state
+ {
+ QMainWindow mw1;
+ QDockWidget * dw1 = new QDockWidget();
+ dw1->setObjectName("Left DockWidget");
+ mw1.addDockWidget(Qt::LeftDockWidgetArea, dw1);
+ mw1.setCentralWidget(new QTextEdit());
+ mw1.show();
+ QApplication::processEvents();
+ dw1->setFixedWidth(101);
+ QApplication::processEvents();
+
+ state = mw1.saveState();
+ }
+
+ //restore state
+
+ QMainWindow mw2;
+ QDockWidget * dw2 = new QDockWidget();
+ dw2->setObjectName("Left DockWidget");
+ mw2.addDockWidget(Qt::LeftDockWidgetArea, dw2);
+ mw2.setCentralWidget(new QTextEdit());
+ mw2.restoreState(state);
+ //QTBUG15080 caused by setStyleSheet
+ mw2.setStyleSheet("color:red");
+ mw2.show();
+ QApplication::processEvents();
+
+ QCOMPARE(dw2->width(), 101);
+}
+
void tst_QMainWindow::toggleUnifiedTitleAndToolBarOnMac()
{
#ifdef Q_OS_MAC