diff options
author | Liang Qi <liang.qi@qt.io> | 2016-08-23 07:50:52 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-08-23 07:50:52 +0200 |
commit | 0524ddb9489cd9816fadc330f75efc7b40994013 (patch) | |
tree | 834607a15e646d416e2512f8f4a05ae222495de5 /src/quicktemplates2/qquickpopup.cpp | |
parent | 2568869819863de6b1f303dfe470aedf38b841c3 (diff) | |
parent | 53c780f15c2d170514f74d949a8165033275bddd (diff) |
Merge remote-tracking branch 'origin/5.7' into 5.8
Conflicts:
src/imports/controls/material/qquickmaterialstyle.cpp
src/imports/controls/universal/qquickuniversalstyle.cpp
src/quicktemplates2/qquickpopup_p_p.h
src/quicktemplates2/qquicktooltip.cpp
tests/auto/auto.pro
Change-Id: I88b347dd85278e14f7b2ca468e30648c6432b6f2
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(); |