diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 4b7ce0a9797..2b9091f079a 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -2152,12 +2152,8 @@ void QWindowsWindow::setGeometry(const QRect &rectIn) const QMargins margins = frameMargins(); rect.moveTopLeft(rect.topLeft() + QPoint(margins.left(), margins.top())); } - if (m_windowState & Qt::WindowMinimized) m_data.geometry = rect; // Otherwise set by handleGeometryChange() triggered by event. - else - setWindowState(Qt::WindowNoState);// Update window state to WindowNoState unless minimized - if (m_data.hwnd) { // A ResizeEvent with resulting geometry will be sent. If we cannot // achieve that size (for example, window title minimal constraint), diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index d3e4fa95482..2345cb0ab88 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -573,8 +573,6 @@ void QXcbWindow::destroy() void QXcbWindow::setGeometry(const QRect &rect) { - setWindowState(Qt::WindowNoState); - QPlatformWindow::setGeometry(rect); propagateSizeHints(); diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index cac968c5dd7..f22570bdaf0 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -216,7 +216,6 @@ private slots: void reparent(); void setScreen(); void windowState(); - void resizePropagation(); void showMaximized(); void showFullScreen(); void showMinimized(); @@ -3172,119 +3171,6 @@ void tst_QWidget::windowState() QTRY_COMPARE(widget1.size(), size); } -// Test propagation of size and state from platform window to QWidget -// Windows and linux/XCB only -void tst_QWidget::resizePropagation() -{ -#if !defined(Q_OS_LINUX) && !defined(Q_OS_WIN) - QSKIP("resizePropagation test is designed for Linux/XCB and Windows only"); -#endif - const bool xcb = (m_platform == QStringLiteral("xcb")); -#ifdef Q_OS_LINUX - if (!xcb) - QSKIP("resizePropagation test is designed for XCB only"); -#endif - - // Windows: - // When a widget is maximized after it has been resized, the widget retains its original size, - // while the window shows maximum size. - // windowStateChanged signal gets fired on a no-op change from/to WindowNoState - - // Initialize widget and signal spy for window handle - QWidget widget; - widget.showMaximized(); - QVERIFY(QTest::qWaitForWindowExposed(&widget)); - QWindow *window = widget.windowHandle(); - QTRY_VERIFY(window); - QSignalSpy spy(window, &QWindow::windowStateChanged); - int count = 0; - - const QSize screenSize = QGuiApplication::primaryScreen()->size(); - const QSize size1 = QSize(screenSize.width() * 0.5, screenSize.height() * 0.5); - const QSize size2 = QSize(screenSize.width() * 0.625, screenSize.height() * 0.833); - - enum CountIncrementCheck {Equal, Greater}; - enum TargetSizeCheck {Fail, Warn}; - auto verifyResize = [&](const QSize &size, Qt::WindowState windowState, - CountIncrementCheck checkCountIncrement, - TargetSizeCheck checkTargetSize) - { - // Capture count of latest async signals - if (checkCountIncrement == Equal) - count = spy.count(); - - // Resize if required - if (size.isValid()) - widget.resize(size); - - // Wait for the widget anyway - QVERIFY(QTest::qWaitForWindowExposed(&widget)); - - // Check signal count and qDebug output for fail analysis - switch (checkCountIncrement) { - case Greater: { - auto logger = qScopeGuard([&](){ - qDebug() << "spy count:" << spy.count() << "previous count:" << count; - }); - QTRY_VERIFY(spy.count() > count); - logger.dismiss(); - count = spy.count(); - } - break; - case Equal: { - auto logger = qScopeGuard([&](){ - qDebug() << spy << widget.windowState() << window->windowState(); - }); - QCOMPARE(spy.count(), count); - logger.dismiss(); - } - break; - } - - // QTRY necessary because state changes are propagated async - QTRY_COMPARE(widget.windowState(), windowState); - QTRY_COMPARE(window->windowState(), windowState); - - // Check target size with fail or warning - switch (checkTargetSize) { - case Fail: - QCOMPARE(widget.size(), window->size()); - break; - case Warn: - if (widget.size() != window->size()) { - qWarning() << m_platform << "size mismtach tolerated. Widget:" - << widget.size() << "Window:" << window->size(); - } - break; - } - }; - - // test state and size consistency of maximized window - verifyResize(QSize(), Qt::WindowMaximized, Equal, Fail); - if (QTest::currentTestFailed()) - return; - - // test state transition, state and size consistency after resize - verifyResize(size1, Qt::WindowNoState, Greater, xcb ? Warn : Fail ); - if (QTest::currentTestFailed()) - return; - - // test unchanged state, state and size consistency after resize - verifyResize(size2, Qt::WindowNoState, Equal, xcb ? Warn : Fail); - if (QTest::currentTestFailed()) - return; - - // test state transition, state and size consistency after maximize - widget.showMaximized(); - verifyResize(QSize(), Qt::WindowMaximized, Greater, xcb ? Fail : Warn); - if (QTest::currentTestFailed()) - return; - -#ifdef Q_OS_WIN - QCOMPARE(widget.size(), size2); -#endif -} - void tst_QWidget::showMaximized() { QWidget plain;