diff options
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 33 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget_p.h | 1 | ||||
-rw-r--r-- | src/widgets/widgets/qmdisubwindow.cpp | 6 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp | 38 |
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); } |