summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/kernel/qwidget.cpp33
-rw-r--r--src/widgets/kernel/qwidget_p.h1
-rw-r--r--src/widgets/widgets/qmdisubwindow.cpp6
-rw-r--r--tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp38
4 files changed, 27 insertions, 51 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 6b2f88ce58..596b92e06b 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -9479,27 +9479,36 @@ void QWidget::updateGeometry()
*/
void QWidget::setWindowFlags(Qt::WindowFlags flags)
{
- if (data->window_flags == flags)
- return;
-
Q_D(QWidget);
+ d->setWindowFlags(flags);
+}
+
+/*! \internal
+
+ Implemented in QWidgetPrivate so that QMdiSubWindowPrivate can reimplement it.
+*/
+void QWidgetPrivate::setWindowFlags(Qt::WindowFlags flags)
+{
+ Q_Q(QWidget);
+ if (q->data->window_flags == flags)
+ return;
- if ((data->window_flags | flags) & Qt::Window) {
+ if ((q->data->window_flags | flags) & Qt::Window) {
// the old type was a window and/or the new type is a window
- QPoint oldPos = pos();
- bool visible = isVisible();
- setParent(parentWidget(), flags);
+ QPoint oldPos = q->pos();
+ bool visible = q->isVisible();
+ q->setParent(q->parentWidget(), flags);
// if both types are windows or neither of them are, we restore
// the old position
- if (!((data->window_flags ^ flags) & Qt::Window)
- && (visible || testAttribute(Qt::WA_Moved))) {
- move(oldPos);
+ if (!((q->data->window_flags ^ flags) & Qt::Window)
+ && (visible || q->testAttribute(Qt::WA_Moved))) {
+ q->move(oldPos);
}
// for backward-compatibility we change Qt::WA_QuitOnClose attribute value only when the window was recreated.
- d->adjustQuitOnCloseAttribute();
+ adjustQuitOnCloseAttribute();
} else {
- data->window_flags = flags;
+ q->data->window_flags = flags;
}
}
diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h
index 943b7057b5..5387341a75 100644
--- a/src/widgets/kernel/qwidget_p.h
+++ b/src/widgets/kernel/qwidget_p.h
@@ -489,6 +489,7 @@ public:
void setWindowTitle_helper(const QString &cap);
void setWindowFilePath_helper(const QString &filePath);
void setWindowModified_helper();
+ virtual void setWindowFlags(Qt::WindowFlags windowFlags);
bool setMinimumSize_helper(int &minw, int &minh);
bool setMaximumSize_helper(int &maxw, int &maxh);
diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp
index 8e1dcbee18..94674319bc 100644
--- a/src/widgets/widgets/qmdisubwindow.cpp
+++ b/src/widgets/widgets/qmdisubwindow.cpp
@@ -2057,13 +2057,13 @@ void QMdiSubWindowPrivate::restoreFocus()
/*!
\internal
- ### Please add QEvent::WindowFlagsChange event
*/
void QMdiSubWindowPrivate::setWindowFlags(Qt::WindowFlags windowFlags)
{
Q_Q(QMdiSubWindow);
+
if (!parent) {
- q->setWindowFlags(windowFlags);
+ QWidgetPrivate::setWindowFlags(windowFlags);
return;
}
@@ -2097,7 +2097,7 @@ void QMdiSubWindowPrivate::setWindowFlags(Qt::WindowFlags windowFlags)
delete sizeGrip;
#endif
- q->setWindowFlags(windowFlags);
+ QWidgetPrivate::setWindowFlags(windowFlags);
updateGeometryConstraints();
updateActions();
QSize currentSize = q->size();
diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
index 72fbb6fd3d..268638a504 100644
--- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
+++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
@@ -901,40 +901,12 @@ void tst_QMdiSubWindow::setWindowFlags()
QVERIFY(QTest::qWaitForWindowExposed(&workspace));
window->setWindowFlags(windowType | customFlags);
- QEXPECT_FAIL("Qt::Widget", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Window", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Dialog", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Sheet", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Drawer", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Popup", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Tool", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::ToolTip", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::SplashScreen", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Desktop", "QTBUG-27274", Continue);
QCOMPARE(window->windowType(), expectedWindowType);
- if (!expectedCustomFlags) {
- // We expect the same as 'customFlags'
+ if (!expectedCustomFlags) // We expect the same as 'customFlags'
QCOMPARE(window->windowFlags() & ~expectedWindowType, customFlags);
- } else {
- QEXPECT_FAIL("Qt::Widget", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Window", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Dialog", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Sheet", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Drawer", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Popup", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Tool", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::ToolTip", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::SplashScreen", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::Desktop", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Qt::SubWindow", "QTBUG-27274", Continue);
- QEXPECT_FAIL("StandardAndFrameless", "QTBUG-27274", Continue);
- QEXPECT_FAIL("StandardAndFramelessAndStaysOnTop", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Shade", "QTBUG-27274", Continue);
- QEXPECT_FAIL("Context", "QTBUG-27274", Continue);
- QEXPECT_FAIL("ShadeAndContext", "QTBUG-27274", Continue);
+ else
QCOMPARE(window->windowFlags() & ~expectedWindowType, expectedCustomFlags);
- }
}
void tst_QMdiSubWindow::mouseDoubleClick()
@@ -981,18 +953,12 @@ void tst_QMdiSubWindow::mouseDoubleClick()
sendMouseDoubleClick(window, mousePosition);
qApp->processEvents();
QVERIFY(!window->isShaded());
-#ifndef Q_OS_MAC
- QEXPECT_FAIL("", "QTBUG-27274", Continue);
-#endif
QCOMPARE(window->geometry(), originalGeometry);
window->showMinimized();
QVERIFY(window->isMinimized());
sendMouseDoubleClick(window, mousePosition);
QVERIFY(!window->isMinimized());
-#ifndef Q_OS_MAC
- QEXPECT_FAIL("", "QTBUG-27274", Continue);
-#endif
QCOMPARE(window->geometry(), originalGeometry);
}