diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-08-27 20:46:09 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-08-27 20:53:00 +0200 |
commit | df946a834f6c7d7b9513fb71dc2a93ff148d5a1f (patch) | |
tree | 215ffb3e3716db58360bcc1b09f36f49d5d2bf00 /src/quicktemplates2/qquickpopup.cpp | |
parent | 2568869819863de6b1f303dfe470aedf38b841c3 (diff) | |
parent | 67f67f2cc6de160ddea4aa76afc56e86415ed99b (diff) |
Merge remote-tracking branch 'origin/5.8' into dev
Change-Id: I10fadb2673912436340b485d8a738e1ae65d629e
Diffstat (limited to 'src/quicktemplates2/qquickpopup.cpp')
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 14810c98..414ba782 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -115,8 +115,7 @@ static const QQuickItemPrivate::ChangeTypes AncestorChangeTypes = QQuickItemPriv | QQuickItemPrivate::Children; static const QQuickItemPrivate::ChangeTypes ItemChangeTypes = QQuickItemPrivate::Geometry - | QQuickItemPrivate::Parent - | QQuickItemPrivate::Destroyed; + | QQuickItemPrivate::Parent; QQuickPopupPrivate::QQuickPopupPrivate() : QObjectPrivate() @@ -551,14 +550,11 @@ void QQuickPopupPositioner::itemChildRemoved(QQuickItem *item, QQuickItem *child removeAncestorListeners(item); } -void QQuickPopupPositioner::itemDestroyed(QQuickItem *item) +void QQuickPopupPrivate::itemDestroyed(QQuickItem *item) { - Q_ASSERT(m_parentItem == item); - - m_parentItem = nullptr; - m_popup->parentItem = nullptr; - QQuickItemPrivate::get(item)->removeItemChangeListener(this, ItemChangeTypes); - removeAncestorListeners(item->parentItem()); + Q_Q(QQuickPopup); + if (item == parentItem) + q->setParentItem(nullptr); } void QQuickPopupPrivate::reposition() @@ -728,7 +724,10 @@ void QQuickPopupTransitionManager::transitionEnter() state = Enter; popup->prepareEnterTransition(); - transition(popup->enterActions, popup->enter, popup->q_func()); + if (popup->window) + transition(popup->enterActions, popup->enter, popup->q_func()); + else + finished(); } void QQuickPopupTransitionManager::transitionExit() @@ -738,7 +737,10 @@ void QQuickPopupTransitionManager::transitionExit() state = Exit; popup->prepareExitTransition(); - transition(popup->exitActions, popup->exit, popup->q_func()); + if (popup->window) + transition(popup->exitActions, popup->exit, popup->q_func()); + else + finished(); } void QQuickPopupTransitionManager::finished() @@ -768,8 +770,7 @@ QQuickPopup::QQuickPopup(QQuickPopupPrivate &dd, QObject *parent) QQuickPopup::~QQuickPopup() { Q_D(QQuickPopup); - d->setWindow(nullptr); - d->positioner.setParentItem(nullptr); + setParentItem(nullptr); delete d->popupItem; } @@ -1463,17 +1464,23 @@ void QQuickPopup::setParentItem(QQuickItem *parent) if (d->parentItem == parent) return; - if (d->parentItem) + if (d->parentItem) { QObjectPrivate::disconnect(d->parentItem, &QQuickItem::windowChanged, d, &QQuickPopupPrivate::setWindow); + QQuickItemPrivate::get(d->parentItem)->removeItemChangeListener(d, QQuickItemPrivate::Destroyed); + } d->parentItem = parent; if (d->positioner.parentItem()) d->positioner.setParentItem(parent); if (parent) { QObjectPrivate::connect(parent, &QQuickItem::windowChanged, d, &QQuickPopupPrivate::setWindow); + QQuickItemPrivate::get(d->parentItem)->addItemChangeListener(d, QQuickItemPrivate::Destroyed); + QQuickControlPrivate *p = QQuickControlPrivate::get(d->popupItem); p->resolveFont(); if (QQuickApplicationWindow *window = qobject_cast<QQuickApplicationWindow *>(parent->window())) p->updateLocale(window->locale(), false); // explicit=false + } else { + close(); } d->setWindow(parent ? parent->window() : nullptr); emit parentChanged(); |