diff options
-rw-r--r-- | src/templates/qquickapplicationwindow.cpp | 10 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_popup.qml | 8 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/templates/qquickapplicationwindow.cpp b/src/templates/qquickapplicationwindow.cpp index 1cc21d74..0e85fc2b 100644 --- a/src/templates/qquickapplicationwindow.cpp +++ b/src/templates/qquickapplicationwindow.cpp @@ -620,6 +620,16 @@ QQuickApplicationWindowAttached::QQuickApplicationWindowAttached(QObject *parent if (QQuickItem *item = qobject_cast<QQuickItem *>(parent)) { d->windowChange(item->window()); QObjectPrivate::connect(item, &QQuickItem::windowChanged, d, &QQuickApplicationWindowAttachedPrivate::windowChange); + if (!d->window) { + QQuickItem *p = item; + while (p) { + if (QQuickPopup *popup = qobject_cast<QQuickPopup *>(p->parent())) { + d->windowChange(popup->window()); + QObjectPrivate::connect(popup, &QQuickPopup::windowChanged, d, &QQuickApplicationWindowAttachedPrivate::windowChange); + } + p = p->parentItem(); + } + } } else if (QQuickPopup *popup = qobject_cast<QQuickPopup *>(parent)) { d->windowChange(popup->window()); QObjectPrivate::connect(popup, &QQuickPopup::windowChanged, d, &QQuickApplicationWindowAttachedPrivate::windowChange); diff --git a/tests/auto/controls/data/tst_popup.qml b/tests/auto/controls/data/tst_popup.qml index d9bef42f..05340d18 100644 --- a/tests/auto/controls/data/tst_popup.qml +++ b/tests/auto/controls/data/tst_popup.qml @@ -907,13 +907,19 @@ TestCase { } function test_attached_applicationwindow() { - var control = popupTemplate.createObject(applicationWindow.contentItem) + var control = popupControl.createObject(applicationWindow.contentItem) verify(control) + var child = rect.createObject(control.contentItem) + compare(control.ApplicationWindow.window, applicationWindow) + compare(control.contentItem.ApplicationWindow.window, applicationWindow) + compare(child.ApplicationWindow.window, applicationWindow) control.parent = null compare(control.ApplicationWindow.window, null) + compare(control.contentItem.ApplicationWindow.window, null) + compare(child.ApplicationWindow.window, null) control.destroy() } |