QQuickPopup: add reset-method for parent

Change-Id: Ia7d205bacf4da4cb13e31ab34fb62d13a77f7ddd
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
This commit is contained in:
J-P Nurmi 2017-07-11 16:04:17 +02:00
parent b9637d71b3
commit bdebb54522
3 changed files with 34 additions and 7 deletions

View File

@ -1570,6 +1570,14 @@ void QQuickPopup::setParentItem(QQuickItem *parent)
emit parentChanged();
}
void QQuickPopup::resetParentItem()
{
if (QQuickWindow *window = qobject_cast<QQuickWindow *>(parent()))
setParentItem(window->contentItem());
else
setParentItem(qobject_cast<QQuickItem *>(parent()));
}
/*!
\qmlproperty Item QtQuick.Controls::Popup::background
@ -2107,12 +2115,8 @@ void QQuickPopup::classBegin()
void QQuickPopup::componentComplete()
{
Q_D(QQuickPopup);
if (!parentItem()) {
if (QQuickItem *item = qobject_cast<QQuickItem *>(parent()))
setParentItem(item);
else if (QQuickWindow *window = qobject_cast<QQuickWindow *>(parent()))
setParentItem(window->contentItem());
}
if (!parentItem())
resetParentItem();
if (d->visible && d->window)
d->transitionManager.transitionEnter();

View File

@ -100,7 +100,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickPopup : public QObject, public QQml
Q_PROPERTY(bool mirrored READ isMirrored NOTIFY mirroredChanged FINAL REVISION 3)
Q_PROPERTY(QFont font READ font WRITE setFont RESET resetFont NOTIFY fontChanged FINAL)
Q_PROPERTY(QPalette palette READ palette WRITE setPalette RESET resetPalette NOTIFY paletteChanged FINAL REVISION 3)
Q_PROPERTY(QQuickItem *parent READ parentItem WRITE setParentItem NOTIFY parentChanged FINAL)
Q_PROPERTY(QQuickItem *parent READ parentItem WRITE setParentItem RESET resetParentItem NOTIFY parentChanged FINAL)
Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL)
Q_PROPERTY(QQuickItem *contentItem READ contentItem WRITE setContentItem NOTIFY contentItemChanged FINAL)
Q_PROPERTY(QQmlListProperty<QObject> contentData READ contentData FINAL)
@ -223,6 +223,7 @@ public:
QQuickItem *parentItem() const;
void setParentItem(QQuickItem *parent);
void resetParentItem();
QQuickItem *background() const;
void setBackground(QQuickItem *background);

View File

@ -407,6 +407,28 @@ void tst_popup::windowChange()
popup.setParentItem(window.contentItem());
QCOMPARE(popup.window(), &window);
QCOMPARE(spy.count(), 3);
popup.resetParentItem();
QVERIFY(!popup.window());
QCOMPARE(spy.count(), 4);
popup.setParent(&window);
popup.resetParentItem();
QCOMPARE(popup.window(), &window);
QCOMPARE(spy.count(), 5);
popup.setParent(this);
popup.resetParentItem();
QVERIFY(!popup.window());
QCOMPARE(spy.count(), 6);
item.setParentItem(window.contentItem());
popup.setParent(&item);
popup.resetParentItem();
QCOMPARE(popup.window(), &window);
QCOMPARE(spy.count(), 7);
popup.setParent(nullptr);
}
Q_DECLARE_METATYPE(QQuickPopup::ClosePolicy)