diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-12-17 15:39:19 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-12-17 14:40:54 +0000 |
commit | 087b1029cbe301aca0ae52e1a7ddce0deacea1d8 (patch) | |
tree | 27c62239e776d88477658dd27e57c436210b879b /src/templates | |
parent | 4d96e8160e477893aa8394de526f8f45901f5e54 (diff) |
Drawer: fix positioning when content size changes
Change-Id: I0664084b3d96a2c6cbd387fb63aae700a588247d
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/templates')
-rw-r--r-- | src/templates/qquickdrawer.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/templates/qquickdrawer.cpp b/src/templates/qquickdrawer.cpp index a1fdf8f8..b28bbe60 100644 --- a/src/templates/qquickdrawer.cpp +++ b/src/templates/qquickdrawer.cpp @@ -40,6 +40,7 @@ #include <QtGui/private/qguiapplication_p.h> #include <QtQuick/private/qquickwindow_p.h> #include <QtQuick/private/qquickanimation_p.h> +#include <QtQuick/private/qquickitemchangelistener_p.h> #include <QtLabsTemplates/private/qquickcontrol_p_p.h> QT_BEGIN_NAMESPACE @@ -88,7 +89,7 @@ QT_BEGIN_NAMESPACE This signal is emitted when the drawer is clicked. */ -class QQuickDrawerPrivate : public QQuickControlPrivate +class QQuickDrawerPrivate : public QQuickControlPrivate, public QQuickItemChangeListener { Q_DECLARE_PUBLIC(QQuickDrawer) @@ -101,6 +102,8 @@ public: bool handleMouseMoveEvent(QQuickItem *item, QMouseEvent *event); bool handleMouseReleaseEvent(QQuickItem *item, QMouseEvent *event); + void itemGeometryChanged(QQuickItem *, const QRectF &, const QRectF &) Q_DECL_OVERRIDE; + Qt::Edge edge; qreal offset; qreal position; @@ -242,6 +245,11 @@ bool QQuickDrawerPrivate::handleMouseReleaseEvent(QQuickItem *item, QMouseEvent return wasGrabbed; } +void QQuickDrawerPrivate::itemGeometryChanged(QQuickItem *, const QRectF &, const QRectF &) +{ + updateContent(); +} + QQuickDrawer::QQuickDrawer(QQuickItem *parent) : QQuickControl(*(new QQuickDrawerPrivate), parent) { @@ -319,12 +327,17 @@ void QQuickDrawer::setContentItem(QQuickItem *item) { Q_D(QQuickDrawer); if (d->content != item) { - delete d->content; + if (d->content) { + QQuickItemPrivate::get(d->content)->removeItemChangeListener(d, QQuickItemPrivate::Geometry); + delete d->content; + } d->content = item; - if (item) + if (item) { item->setParentItem(this); - if (isComponentComplete()) - d->updateContent(); + QQuickItemPrivate::get(item)->updateOrAddGeometryChangeListener(d, QQuickItemPrivate::SizeChange); + if (isComponentComplete()) + d->updateContent(); + } emit contentItemChanged(); } } |