diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-09-03 14:49:49 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-09-05 13:03:45 +0000 |
commit | 6f3f262574d2bb0cf7ccd5148f29e078aef8d16a (patch) | |
tree | 1ab603d9ba54d676dfa71d5a1904df6567ed00fa | |
parent | c7b8289a706f982c1cf5091a4d86606ec758b05d (diff) |
Make QQuickOverlay resize itself
This prepares QQuickOverlay to be usable with a plain QQuickWindow,
for which we cannot override resizeEvent().
Change-Id: Ib021c510539b134477bb8d532787721a5ac7fca4
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/quicktemplates2/qquickapplicationwindow.cpp | 8 | ||||
-rw-r--r-- | src/quicktemplates2/qquickoverlay.cpp | 22 | ||||
-rw-r--r-- | src/quicktemplates2/qquickoverlay_p.h | 1 |
3 files changed, 23 insertions, 8 deletions
diff --git a/src/quicktemplates2/qquickapplicationwindow.cpp b/src/quicktemplates2/qquickapplicationwindow.cpp index 2706d9b6..bf903b8a 100644 --- a/src/quicktemplates2/qquickapplicationwindow.cpp +++ b/src/quicktemplates2/qquickapplicationwindow.cpp @@ -157,12 +157,6 @@ void QQuickApplicationWindowPrivate::relayout() content->setWidth(q->width()); content->setHeight(q->height() - hh - fh); - if (overlay) { - overlay->setWidth(q->width()); - overlay->setHeight(q->height()); - overlay->stackAfter(content); - } - if (header) { header->setY(-hh); QQuickItemPrivate *p = QQuickItemPrivate::get(header); @@ -484,7 +478,7 @@ QQuickOverlay *QQuickApplicationWindow::overlay() const QQuickApplicationWindowPrivate *d = const_cast<QQuickApplicationWindowPrivate *>(d_func()); if (!d->overlay) { d->overlay = new QQuickOverlay(QQuickWindow::contentItem()); - d->relayout(); + d->overlay->stackAfter(QQuickApplicationWindow::contentItem()); } return d->overlay; } diff --git a/src/quicktemplates2/qquickoverlay.cpp b/src/quicktemplates2/qquickoverlay.cpp index 5dd92a26..c5818b90 100644 --- a/src/quicktemplates2/qquickoverlay.cpp +++ b/src/quicktemplates2/qquickoverlay.cpp @@ -41,10 +41,11 @@ #include <QtQml/qqmlproperty.h> #include <QtQml/qqmlcomponent.h> #include <QtQuick/private/qquickitem_p.h> +#include <QtQuick/private/qquickitemchangelistener_p.h> QT_BEGIN_NAMESPACE -class QQuickOverlayPrivate : public QQuickItemPrivate +class QQuickOverlayPrivate : public QQuickItemPrivate, public QQuickItemChangeListener { Q_DECLARE_PUBLIC(QQuickOverlay) @@ -61,6 +62,8 @@ public: QVector<QQuickPopup *> stackingOrderPopups() const; + void itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) override; + QQmlComponent *modal; QQmlComponent *modeless; QVector<QQuickDrawer *> drawers; @@ -179,6 +182,12 @@ QVector<QQuickPopup *> QQuickOverlayPrivate::stackingOrderPopups() const return popups; } +void QQuickOverlayPrivate::itemGeometryChanged(QQuickItem *, const QRectF &newGeometry, const QRectF &) +{ + Q_Q(QQuickOverlay); + q->setSize(newGeometry.size()); +} + QQuickOverlayPrivate::QQuickOverlayPrivate() : modal(nullptr), modeless(nullptr), @@ -189,10 +198,21 @@ QQuickOverlayPrivate::QQuickOverlayPrivate() : QQuickOverlay::QQuickOverlay(QQuickItem *parent) : QQuickItem(*(new QQuickOverlayPrivate), parent) { + Q_D(QQuickOverlay); setZ(1000001); // DefaultWindowDecoration+1 setAcceptedMouseButtons(Qt::AllButtons); setFiltersChildMouseEvents(true); setVisible(false); + + if (parent) + QQuickItemPrivate::get(parent)->addItemChangeListener(d, QQuickItemPrivate::Geometry); +} + +QQuickOverlay::~QQuickOverlay() +{ + Q_D(QQuickOverlay); + if (QQuickItem *parent = parentItem()) + QQuickItemPrivate::get(parent)->removeItemChangeListener(d, QQuickItemPrivate::Geometry); } QQmlComponent *QQuickOverlay::modal() const diff --git a/src/quicktemplates2/qquickoverlay_p.h b/src/quicktemplates2/qquickoverlay_p.h index 99d7ba75..480a5a6a 100644 --- a/src/quicktemplates2/qquickoverlay_p.h +++ b/src/quicktemplates2/qquickoverlay_p.h @@ -64,6 +64,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickOverlay : public QQuickItem public: explicit QQuickOverlay(QQuickItem *parent = nullptr); + ~QQuickOverlay(); QQmlComponent *modal() const; void setModal(QQmlComponent *modal); |