From 5ea88122a7442c49d2262c95a6b0cd32c5b5b541 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 22 Mar 2016 15:55:03 +0100 Subject: Support ApplicationWindow attached property for items inside Popup Change-Id: Ie8fb9fcf415670102d9364f85120bc315a8a067e Task-number: QTBUG-51991 Reviewed-by: Mitch Curtis --- src/templates/qquickapplicationwindow.cpp | 10 ++++++++++ tests/auto/controls/data/tst_popup.qml | 8 +++++++- 2 files changed, 17 insertions(+), 1 deletion(-) 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(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(p->parent())) { + d->windowChange(popup->window()); + QObjectPrivate::connect(popup, &QQuickPopup::windowChanged, d, &QQuickApplicationWindowAttachedPrivate::windowChange); + } + p = p->parentItem(); + } + } } else if (QQuickPopup *popup = qobject_cast(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() } -- cgit v1.2.3