From 6f3f262574d2bb0cf7ccd5148f29e078aef8d16a Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 3 Sep 2016 14:49:49 +0200 Subject: 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 --- src/quicktemplates2/qquickoverlay.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/quicktemplates2/qquickoverlay.cpp') 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 #include #include +#include QT_BEGIN_NAMESPACE -class QQuickOverlayPrivate : public QQuickItemPrivate +class QQuickOverlayPrivate : public QQuickItemPrivate, public QQuickItemChangeListener { Q_DECLARE_PUBLIC(QQuickOverlay) @@ -61,6 +62,8 @@ public: QVector stackingOrderPopups() const; + void itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) override; + QQmlComponent *modal; QQmlComponent *modeless; QVector drawers; @@ -179,6 +182,12 @@ QVector 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 -- cgit v1.2.3