aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-09-03 14:49:49 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-09-05 13:03:45 +0000
commit6f3f262574d2bb0cf7ccd5148f29e078aef8d16a (patch)
tree1ab603d9ba54d676dfa71d5a1904df6567ed00fa
parentc7b8289a706f982c1cf5091a4d86606ec758b05d (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.cpp8
-rw-r--r--src/quicktemplates2/qquickoverlay.cpp22
-rw-r--r--src/quicktemplates2/qquickoverlay_p.h1
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);