diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-12-19 11:20:15 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-12-19 18:35:05 +0000 |
commit | 27a7cb2b36a2e23845f3b91c55b6254681f40545 (patch) | |
tree | 909e78c71b2aaeaddb1f869d0a1b3e4d9774a8de /src | |
parent | 6b1bc337410dcfcafc6ceecaa268464f6214ea33 (diff) |
Just tidy up QQuickPopup a bit
Change-Id: Ibc8097299f0796f943682f0c1de628a8da87e430
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/templates/qquickoverlay.cpp | 13 | ||||
-rw-r--r-- | src/templates/qquickpopup.cpp | 56 | ||||
-rw-r--r-- | src/templates/qquickpopup_p.h | 10 | ||||
-rw-r--r-- | src/templates/qquickpopup_p_p.h | 10 |
4 files changed, 41 insertions, 48 deletions
diff --git a/src/templates/qquickoverlay.cpp b/src/templates/qquickoverlay.cpp index a3f9b573..949715c4 100644 --- a/src/templates/qquickoverlay.cpp +++ b/src/templates/qquickoverlay.cpp @@ -138,7 +138,6 @@ void QQuickOverlay::itemChange(ItemChange change, const ItemChangeData &data) Q_D(QQuickOverlay); QQuickItem::itemChange(change, data); - QQuickItem *contentItem = const_cast<QQuickItem *>(data.item); QQuickPopup *popup = Q_NULLPTR; if (change == ItemChildAddedChange || change == ItemChildRemovedChange) { QQuickDrawer *drawer = qobject_cast<QQuickDrawer *>(data.item); @@ -152,7 +151,7 @@ void QQuickOverlay::itemChange(ItemChange change, const ItemChangeData &data) } d->updateBackground(); } else { - popup = qobject_cast<QQuickPopup *>(contentItem->parent()); + popup = qobject_cast<QQuickPopup *>(data.item->parent()); } setVisible(!childItems().isEmpty()); } @@ -160,27 +159,27 @@ void QQuickOverlay::itemChange(ItemChange change, const ItemChangeData &data) return; if (change == ItemChildAddedChange) { - if (QQuickPopup *prevPopup = d->popups.value(contentItem)) { - qmlInfo(popup).nospace() << "Popup is sharing item " << contentItem << " with " << prevPopup + if (QQuickPopup *prevPopup = d->popups.value(data.item)) { + qmlInfo(popup).nospace() << "Popup is sharing item " << data.item << " with " << prevPopup << ". This is not supported and strange things are about to happen."; return; } - d->popups.insert(contentItem, popup); + d->popups.insert(data.item, popup); if (popup->isModal()) ++d->modalPopups; connect(this, &QQuickOverlay::pressed, popup, &QQuickPopup::pressedOutside); connect(this, &QQuickOverlay::released, popup, &QQuickPopup::releasedOutside); } else if (change == ItemChildRemovedChange) { - Q_ASSERT(popup == d->popups.value(contentItem)); + Q_ASSERT(popup == d->popups.value(data.item)); disconnect(this, &QQuickOverlay::pressed, popup, &QQuickPopup::pressedOutside); disconnect(this, &QQuickOverlay::released, popup, &QQuickPopup::releasedOutside); if (popup->isModal()) --d->modalPopups; - d->popups.remove(contentItem); + d->popups.remove(data.item); } d->updateBackground(); diff --git a/src/templates/qquickpopup.cpp b/src/templates/qquickpopup.cpp index f3c87846..2da468d0 100644 --- a/src/templates/qquickpopup.cpp +++ b/src/templates/qquickpopup.cpp @@ -38,6 +38,7 @@ #include "qquickpopup_p_p.h" #include "qquickapplicationwindow_p.h" #include "qquickoverlay_p.h" + #include <QtQml/qqmlinfo.h> #include <QtQuick/qquickitem.h> #include <QtQuick/private/qquicktransition_p.h> @@ -58,17 +59,15 @@ QT_BEGIN_NAMESPACE QQuickPopupPrivate::QQuickPopupPrivate() : QObjectPrivate() - , contentItem(Q_NULLPTR) - , overlay(Q_NULLPTR) , focus(false) , modal(false) + , contentItem(Q_NULLPTR) + , overlay(Q_NULLPTR) , enter(Q_NULLPTR) , exit(Q_NULLPTR) , transitionManager(this) -{ } - -QQuickPopupPrivate::~QQuickPopupPrivate() -{ } +{ +} void QQuickPopupPrivate::finalizeEnterTransition() { @@ -78,16 +77,18 @@ void QQuickPopupPrivate::finalizeEnterTransition() void QQuickPopupPrivate::finalizeExitTransition() { + Q_Q(QQuickPopup); overlay = Q_NULLPTR; contentItem->setParentItem(Q_NULLPTR); - emit q_func()->visibleChanged(); + emit q->visibleChanged(); } -QQuickPopupTransitionManager::QQuickPopupTransitionManager(QQuickPopupPrivate *priv) +QQuickPopupTransitionManager::QQuickPopupTransitionManager(QQuickPopupPrivate *popup) : QQuickTransitionManager() , state(Off) - , pp(priv) -{ } + , popup(popup) +{ +} void QQuickPopupTransitionManager::transitionEnter() { @@ -95,7 +96,7 @@ void QQuickPopupTransitionManager::transitionEnter() return; QList<QQuickStateAction> actions; state = Enter; - transition(actions, pp->enter, pp->contentItem); + transition(actions, popup->enter, popup->contentItem); } void QQuickPopupTransitionManager::transitionExit() @@ -104,15 +105,15 @@ void QQuickPopupTransitionManager::transitionExit() return; QList<QQuickStateAction> actions; state = Exit; - transition(actions, pp->exit, pp->contentItem); + transition(actions, popup->exit, popup->contentItem); } void QQuickPopupTransitionManager::finished() { if (state == Enter) - pp->finalizeEnterTransition(); + popup->finalizeEnterTransition(); else if (state == Exit) - pp->finalizeExitTransition(); + popup->finalizeExitTransition(); state = Off; } @@ -127,10 +128,6 @@ QQuickPopup::QQuickPopup(QQuickPopupPrivate &dd, QObject *parent) { } -QQuickPopup::~QQuickPopup() -{ -} - /*! \qmlmethod void Qt.labs.controls::Popup::open() @@ -149,33 +146,33 @@ void QQuickPopup::open() return; } - QQuickWindow *win = Q_NULLPTR; + QQuickWindow *window = Q_NULLPTR; QObject *p = parent(); - while (p && !win) { + while (p && !window) { if (QQuickItem *item = qobject_cast<QQuickItem *>(p)) { - win = item->window(); - if (!win) + window = item->window(); + if (!window) p = item->parentItem(); } else { - win = qobject_cast<QQuickWindow *>(p); - if (!win) + window = qobject_cast<QQuickWindow *>(p); + if (!window) p = p->parent(); } } - if (!win) { + if (!window) { qmlInfo(this) << "cannot find any window to open popup in."; return; } - if (QQuickApplicationWindow *appWin = qobject_cast<QQuickApplicationWindow*>(win)) { - d->overlay = static_cast<QQuickOverlay *>(appWin->overlay()); - d->contentItem->setParentItem(d->overlay); - } else { + QQuickApplicationWindow *applicationWindow = qobject_cast<QQuickApplicationWindow*>(window); + if (!applicationWindow) { // FIXME Maybe try to open it in that window somehow qmlInfo(this) << "is not in an ApplicationWindow."; return; } + d->overlay = static_cast<QQuickOverlay *>(applicationWindow->overlay()); + d->contentItem->setParentItem(d->overlay); emit aboutToShow(); d->transitionManager.transitionEnter(); emit visibleChanged(); @@ -189,7 +186,6 @@ void QQuickPopup::open() void QQuickPopup::close() { Q_D(QQuickPopup); - if (!d->overlay) { // TODO This could mean we opened the popup item in a plain QQuickWindow qmlInfo(this) << "trying to close non-visible Popup."; diff --git a/src/templates/qquickpopup_p.h b/src/templates/qquickpopup_p.h index c8095609..d2c04316 100644 --- a/src/templates/qquickpopup_p.h +++ b/src/templates/qquickpopup_p.h @@ -69,7 +69,6 @@ class Q_LABSTEMPLATES_EXPORT QQuickPopup : public QObject public: explicit QQuickPopup(QObject *parent = Q_NULLPTR); - ~QQuickPopup(); QQuickItem *contentItem() const; void setContentItem(QQuickItem *item); @@ -88,6 +87,10 @@ public: QQuickTransition *exit() const; void setExit(QQuickTransition *transition); +public Q_SLOTS: + void open(); + void close(); + Q_SIGNALS: void contentItemChanged(); void focusChanged(); @@ -103,11 +106,6 @@ Q_SIGNALS: void aboutToShow(); void aboutToHide(); - -public Q_SLOTS: - void open(); - void close(); - protected: QQuickPopup(QQuickPopupPrivate &dd, QObject *parent); diff --git a/src/templates/qquickpopup_p_p.h b/src/templates/qquickpopup_p_p.h index 900ced9b..b0c6d709 100644 --- a/src/templates/qquickpopup_p_p.h +++ b/src/templates/qquickpopup_p_p.h @@ -63,7 +63,8 @@ class QQuickOverlay; class QQuickPopupTransitionManager : public QQuickTransitionManager { public: - QQuickPopupTransitionManager(QQuickPopupPrivate *); + QQuickPopupTransitionManager(QQuickPopupPrivate *popup); + void transitionEnter(); void transitionExit(); @@ -76,7 +77,7 @@ private: }; TransitionState state; - QQuickPopupPrivate *pp; + QQuickPopupPrivate *popup; }; class QQuickPopupPrivate : public QObjectPrivate @@ -85,15 +86,14 @@ class QQuickPopupPrivate : public QObjectPrivate public: QQuickPopupPrivate(); - ~QQuickPopupPrivate(); void finalizeEnterTransition(); void finalizeExitTransition(); - QQuickItem *contentItem; - QQuickOverlay *overlay; bool focus; bool modal; + QQuickItem *contentItem; + QQuickOverlay *overlay; QQuickTransition *enter; QQuickTransition *exit; QQuickPopupTransitionManager transitionManager; |