aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2015-12-17 15:39:19 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2015-12-17 14:40:54 +0000
commit087b1029cbe301aca0ae52e1a7ddce0deacea1d8 (patch)
tree27c62239e776d88477658dd27e57c436210b879b /src/templates
parent4d96e8160e477893aa8394de526f8f45901f5e54 (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.cpp23
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();
}
}