diff options
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 2 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget_qpa.cpp | 5 | ||||
-rw-r--r-- | tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 6 |
3 files changed, 3 insertions, 10 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index ca5a410a42..747d0a049a 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -9486,7 +9486,6 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) desktopWidget = parent; bool newParent = (parent != parentWidget()) || !wasCreated || desktopWidget; -#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_MAC) if (newParent && parent && !desktopWidget) { if (testAttribute(Qt::WA_NativeWindow) && !qApp->testAttribute(Qt::AA_DontCreateNativeWidgetSiblings) #ifdef Q_WS_MAC @@ -9499,7 +9498,6 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) else if (parent->d_func()->nativeChildrenForced() || parent->testAttribute(Qt::WA_PaintOnScreen)) setAttribute(Qt::WA_NativeWindow); } -#endif if (wasCreated) { if (!testAttribute(Qt::WA_WState_Hidden)) { diff --git a/src/widgets/kernel/qwidget_qpa.cpp b/src/widgets/kernel/qwidget_qpa.cpp index 3661a0802c..5b3155fbc0 100644 --- a/src/widgets/kernel/qwidget_qpa.cpp +++ b/src/widgets/kernel/qwidget_qpa.cpp @@ -259,8 +259,6 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (!(f&Qt::Window) && (oldFlags&Qt::Window) && !q->testAttribute(Qt::WA_NativeWindow)) { //qDebug() << "setParent_sys() change from toplevel"; q->destroy(); - } else if (newparent && wasCreated) { - q->createWinId(); } adjustFlags(f, q); @@ -269,6 +267,9 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) q->setAttribute(Qt::WA_WState_Visible, false); q->setAttribute(Qt::WA_WState_Hidden, false); + if (newparent && wasCreated && (q->testAttribute(Qt::WA_NativeWindow) || (f & Qt::Window))) + q->createWinId(); + if (q->isWindow() || (!newparent || newparent->isVisible()) || explicitlyHidden) q->setAttribute(Qt::WA_WState_Hidden); q->setAttribute(Qt::WA_WState_ExplicitShowHide, explicitlyHidden); diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 8d6ef38775..caaabe0e76 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -7174,14 +7174,8 @@ void tst_QWidget::alienWidgets() topLevel.show(); QVERIFY(topLevel.internalWinId()); - if (m_platform == QStringLiteral("xcb") || m_platform == QStringLiteral("windows")) - QEXPECT_FAIL("", "QTBUG-26424", Continue); QVERIFY(widget->testAttribute(Qt::WA_NativeWindow)); - if (m_platform == QStringLiteral("xcb") || m_platform == QStringLiteral("windows")) - QEXPECT_FAIL("", "QTBUG-26424", Continue); QVERIFY(child->internalWinId()); - if (m_platform == QStringLiteral("xcb") || m_platform == QStringLiteral("windows")) - QEXPECT_FAIL("", "QTBUG-26424", Continue); QVERIFY(child->testAttribute(Qt::WA_NativeWindow)); QVERIFY(!child->testAttribute(Qt::WA_PaintOnScreen)); QVERIFY(!dummy->internalWinId()); |