From 4367951cbb4a0ddb739724878dc9a1cabad5a773 Mon Sep 17 00:00:00 2001
From: Joona Petrell <joona.t.petrell@nokia.com>
Date: Mon, 8 Mar 2010 15:26:30 +1000
Subject: Make QDeclarativeItem NOTIFY signals canonical

Task-number: QTBUG-7193
Reviewed-by: akennedy
---
 .../qdeclarativegraphicsobjectcontainer.cpp        |  8 +-
 src/declarative/graphicsitems/qdeclarativeitem.cpp | 40 ++++------
 src/declarative/graphicsitems/qdeclarativeitem.h   | 23 +++---
 src/declarative/graphicsitems/qdeclarativeitem_p.h |  6 +-
 .../graphicsitems/qdeclarativelistview.cpp         |  4 +-
 .../graphicsitems/qdeclarativepainteditem.cpp      |  4 +-
 .../graphicsitems/qdeclarativetextedit.cpp         | 14 +---
 .../graphicsitems/qdeclarativetextedit_p.h         |  2 -
 .../graphicsitems/qdeclarativetextedit_p_p.h       |  1 +
 .../graphicsitems/qdeclarativetextinput.cpp        | 10 +--
 .../graphicsitems/qdeclarativetextinput_p.h        |  2 -
 .../graphicsitems/qdeclarativetextinput_p_p.h      |  1 +
 src/declarative/util/qdeclarativeview.cpp          |  4 +-
 src/imports/webkit/qdeclarativewebview.cpp         |  8 +-
 src/imports/webkit/qdeclarativewebview_p.h         |  1 -
 .../qdeclarativeitem/data/propertychanges.qml      | 10 +++
 .../qdeclarativeitem/tst_qdeclarativeitem.cpp      | 92 +++++++++++++++++++++-
 .../tst_qdeclarativerepeater.cpp                   |  2 +-
 18 files changed, 158 insertions(+), 74 deletions(-)
 create mode 100644 tests/auto/declarative/qdeclarativeitem/data/propertychanges.qml

diff --git a/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer.cpp b/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer.cpp
index 1977817..eb5b6ce 100644
--- a/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer.cpp
@@ -65,12 +65,12 @@ public:
         if (graphicsObject && graphicsObject->isWidget()) {
             if (!on) {
                 graphicsObject->removeEventFilter(q);
-                QObject::disconnect(q, SIGNAL(widthChanged()), q, SLOT(_q_updateSize()));
-                QObject::disconnect(q, SIGNAL(heightChanged()), q, SLOT(_q_updateSize()));
+                QObject::disconnect(q, SIGNAL(widthChanged(qreal)), q, SLOT(_q_updateSize()));
+                QObject::disconnect(q, SIGNAL(heightChanged(qreal)), q, SLOT(_q_updateSize()));
             } else {
                 graphicsObject->installEventFilter(q);
-                QObject::connect(q, SIGNAL(widthChanged()), q, SLOT(_q_updateSize()));
-                QObject::connect(q, SIGNAL(heightChanged()), q, SLOT(_q_updateSize()));
+                QObject::connect(q, SIGNAL(widthChanged(qreal)), q, SLOT(_q_updateSize()));
+                QObject::connect(q, SIGNAL(heightChanged(qreal)), q, SLOT(_q_updateSize()));
             }
         }
     }
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index 1ac26b4..7c6c46b 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -273,7 +273,7 @@ void QDeclarativeContents::calcHeight()
     m_height = qMax(bottom - top, qreal(0.0));
 
     if (m_height != oldheight || m_y != oldy)
-        emit rectChanged();
+        emit rectChanged(rectF());
 }
 
 //TODO: optimization: only check sender(), if there is one
@@ -301,7 +301,7 @@ void QDeclarativeContents::calcWidth()
     m_width = qMax(right - left, qreal(0.0));
 
     if (m_width != oldwidth || m_x != oldx)
-        emit rectChanged();
+        emit rectChanged(rectF());
 }
 
 void QDeclarativeContents::setItem(QDeclarativeItem *item)
@@ -313,11 +313,11 @@ void QDeclarativeContents::setItem(QDeclarativeItem *item)
         QDeclarativeItem *child = qobject_cast<QDeclarativeItem *>(children.at(i));
         if(!child)//### Should this be ignoring non-QDeclarativeItem graphicsobjects?
             continue;
-        connect(child, SIGNAL(heightChanged()), this, SLOT(calcHeight()));
+        connect(child, SIGNAL(heightChanged(qreal)), this, SLOT(calcHeight()));
         connect(child, SIGNAL(yChanged()), this, SLOT(calcHeight()));
-        connect(child, SIGNAL(widthChanged()), this, SLOT(calcWidth()));
+        connect(child, SIGNAL(widthChanged(qreal)), this, SLOT(calcWidth()));
         connect(child, SIGNAL(xChanged()), this, SLOT(calcWidth()));
-        connect(this, SIGNAL(rectChanged()), m_item, SIGNAL(childrenRectChanged()));
+        connect(this, SIGNAL(rectChanged(QRectF)), m_item, SIGNAL(childrenRectChanged(QRectF)));
     }
 
     calcHeight();
@@ -1652,7 +1652,7 @@ void QDeclarativeItem::setClip(bool c)
     if (clip() == c)
         return;
     setFlag(ItemClipsChildrenToShape, c);
-    emit clipChanged();
+    emit clipChanged(c);
 }
 
 /*!
@@ -1792,11 +1792,11 @@ void QDeclarativeItem::geometryChanged(const QRectF &newGeometry,
     if (newGeometry.x() != oldGeometry.x())
         emit xChanged();
     if (newGeometry.width() != oldGeometry.width())
-        emit widthChanged();
+        emit widthChanged(newGeometry.width());
     if (newGeometry.y() != oldGeometry.y())
         emit yChanged();
     if (newGeometry.height() != oldGeometry.height())
-        emit heightChanged();
+        emit heightChanged(newGeometry.height());
 
     for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
         const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
@@ -2058,7 +2058,6 @@ void QDeclarativeItem::setBaselineOffset(qreal offset)
         return;
 
     d->_baselineOffset = offset;
-    emit baselineOffsetChanged();
 
     for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
         const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
@@ -2068,6 +2067,7 @@ void QDeclarativeItem::setBaselineOffset(qreal offset)
                 anchor->updateVerticalAnchors();
         }
     }
+    emit baselineOffsetChanged(offset);
 }
 
 /*!
@@ -2265,18 +2265,10 @@ QScriptValue QDeclarativeItem::mapToItem(const QScriptValue &item, qreal x, qrea
     return sv;
 }
 
-/*!
-  \internal
-
-  This function emits the \e focusChanged signal.
-
-  Subclasses overriding this function should call up
-  to their base class.
-*/
-void QDeclarativeItem::focusChanged(bool flag)
+void QDeclarativeItemPrivate::focusChanged(bool flag)
 {
-    Q_UNUSED(flag);
-    emit focusChanged();
+    Q_Q(QDeclarativeItem);
+    emit q->focusChanged(flag);
 }
 
 /*! \internal */
@@ -2569,9 +2561,9 @@ QPointF QDeclarativeItemPrivate::computeTransformOrigin() const
 /*! \internal */
 bool QDeclarativeItem::sceneEvent(QEvent *event)
 {
+    Q_D(QDeclarativeItem);
     if (event->type() == QEvent::KeyPress) {
         QKeyEvent *k = static_cast<QKeyEvent *>(event);
-
         if ((k->key() == Qt::Key_Tab || k->key() == Qt::Key_Backtab) &&
             !(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier))) {
             keyPressEvent(static_cast<QKeyEvent *>(event));
@@ -2587,7 +2579,7 @@ bool QDeclarativeItem::sceneEvent(QEvent *event)
 
         if (event->type() == QEvent::FocusIn ||
             event->type() == QEvent::FocusOut) {
-            focusChanged(hasFocus());
+            d->focusChanged(hasFocus());
         }
         return rv;
     }
@@ -2600,7 +2592,7 @@ QVariant QDeclarativeItem::itemChange(GraphicsItemChange change,
     Q_D(const QDeclarativeItem);
     switch (change) {
     case ItemParentHasChanged:
-        emit parentChanged();
+        emit parentChanged(parentItem());
         break;
     case ItemChildAddedChange:
     case ItemChildRemovedChange:
@@ -2713,7 +2705,7 @@ void QDeclarativeItem::setSmooth(bool smooth)
     if (d->smooth == smooth)
         return;
     d->smooth = smooth;
-    emit smoothChanged();
+    emit smoothChanged(smooth);
     update();
 }
 
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.h b/src/declarative/graphicsitems/qdeclarativeitem.h
index f9e0c7e..9b85ba3 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.h
+++ b/src/declarative/graphicsitems/qdeclarativeitem.h
@@ -42,8 +42,8 @@
 #ifndef QDECLARATIVEITEM_H
 #define QDECLARATIVEITEM_H
 
-#include <qdeclarative.h>
-#include <qdeclarativecomponent.h>
+#include <QtDeclarative/qdeclarative.h>
+#include <QtDeclarative/qdeclarativecomponent.h>
 
 #include <QtCore/QObject>
 #include <QtCore/QList>
@@ -173,18 +173,18 @@ public:
     QDeclarativeAnchorLine baseline() const;
 
 Q_SIGNALS:
-    void widthChanged();
-    void heightChanged();
+    void widthChanged(qreal);
+    void heightChanged(qreal);
     void childrenChanged();
-    void childrenRectChanged();
-    void baselineOffsetChanged();
+    void childrenRectChanged(const QRectF &);
+    void baselineOffsetChanged(qreal);
     void stateChanged(const QString &);
-    void focusChanged();
-    void wantsFocusChanged();
-    void parentChanged();
+    void focusChanged(bool);
+    void wantsFocusChanged(bool);
+    void parentChanged(QDeclarativeItem *);
     void transformOriginChanged(TransformOrigin);
-    void smoothChanged();
-    void clipChanged();
+    void smoothChanged(bool);
+    void clipChanged(bool);
 
 protected:
     bool isComponentComplete() const;
@@ -199,7 +199,6 @@ protected:
 
     virtual void classBegin();
     virtual void componentComplete();
-    virtual void focusChanged(bool);
     virtual void keyPressEvent(QKeyEvent *event);
     virtual void keyReleaseEvent(QKeyEvent *event);
     virtual void inputMethodEvent(QInputMethodEvent *);
diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h
index e424970..76ebcb4 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h
@@ -91,7 +91,7 @@ public Q_SLOTS:
     void calcWidth();
 
 Q_SIGNALS:
-    void rectChanged();
+    void rectChanged(QRectF);
 
 private:
     QDeclarativeItem *m_item;
@@ -240,7 +240,7 @@ public:
     // Reimplemented from QGraphicsItemPrivate
     virtual void subFocusItemChange()
     {
-        emit q_func()->wantsFocusChanged();
+        emit q_func()->wantsFocusChanged(subFocusItem != 0);
     }
 
     // Reimplemented from QGraphicsItemPrivate
@@ -255,6 +255,8 @@ public:
         }
     }
 
+    virtual void focusChanged(bool);
+
     static int consistentTime;
     static QTime currentTime();
     static void Q_DECLARATIVE_EXPORT setConsistentTime(int t);
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 73fe1e4..6385ddd 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -557,7 +557,7 @@ void QDeclarativeListViewPrivate::releaseItem(FxListItem *item)
         return;
     if (trackedItem == item) {
         const char *notifier1 = orient == QDeclarativeListView::Vertical ? SIGNAL(yChanged()) : SIGNAL(xChanged());
-        const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged()) : SIGNAL(widthChanged());
+        const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged(qreal)) : SIGNAL(widthChanged(qreal));
         QObject::disconnect(trackedItem->item, notifier1, q, SLOT(trackedPositionChanged()));
         QObject::disconnect(trackedItem->item, notifier2, q, SLOT(trackedPositionChanged()));
         trackedItem = 0;
@@ -748,7 +748,7 @@ void QDeclarativeListViewPrivate::updateTrackedItem()
     FxListItem *oldTracked = trackedItem;
 
     const char *notifier1 = orient == QDeclarativeListView::Vertical ? SIGNAL(yChanged()) : SIGNAL(xChanged());
-    const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged()) : SIGNAL(widthChanged());
+    const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged(qreal)) : SIGNAL(widthChanged(qreal));
 
     if (trackedItem && item != trackedItem) {
         QObject::disconnect(trackedItem->item, notifier1, q, SLOT(trackedPositionChanged()));
diff --git a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp
index ab6007a..28a93d2 100644
--- a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp
@@ -211,8 +211,8 @@ QDeclarativePaintedItem::~QDeclarativePaintedItem()
 */
 void QDeclarativePaintedItem::init()
 {
-    connect(this,SIGNAL(widthChanged()),this,SLOT(clearCache()));
-    connect(this,SIGNAL(heightChanged()),this,SLOT(clearCache()));
+    connect(this,SIGNAL(widthChanged(qreal)),this,SLOT(clearCache()));
+    connect(this,SIGNAL(heightChanged(qreal)),this,SLOT(clearCache()));
     connect(this,SIGNAL(visibleChanged()),this,SLOT(clearCache()));
 }
 
diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
index be73b39..dbae47d 100644
--- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
@@ -760,17 +760,11 @@ void QDeclarativeTextEdit::keyReleaseEvent(QKeyEvent *event)
         QDeclarativePaintedItem::keyReleaseEvent(event);
 }
 
-/*!
-    \overload
-    Handles changing of the focus property.  Focus is applied to the control
-    even if the edit does not have active focus.  This is because things
-    like KeyProxy can give the behavior of focus even when hasFocus() isn't
-    true.
-*/
-void QDeclarativeTextEdit::focusChanged(bool hasFocus)
+void QDeclarativeTextEditPrivate::focusChanged(bool hasFocus)
 {
-    setCursorVisible(hasFocus);
-    QDeclarativeItem::focusChanged(hasFocus);
+    Q_Q(QDeclarativeTextEdit);
+    q->setCursorVisible(hasFocus);
+    QDeclarativeItemPrivate::focusChanged(hasFocus);
 }
 
 /*!
diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h
index 6183b1d..b1682c4 100644
--- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h
@@ -215,8 +215,6 @@ protected:
     void keyPressEvent(QKeyEvent *);
     void keyReleaseEvent(QKeyEvent *);
 
-    void focusChanged(bool);
-
     // mouse filter?
     void mousePressEvent(QGraphicsSceneMouseEvent *event);
     void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h
index 002fac4..dd2a29d 100644
--- a/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h
@@ -80,6 +80,7 @@ public:
     void updateDefaultTextOption();
     void relayoutDocument();
     void updateSelection();
+    void focusChanged(bool);
 
     QString text;
     QFont font;
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
index 3382628..6df3533 100644
--- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
@@ -636,12 +636,12 @@ int QDeclarativeTextInput::xToPos(int x)
     return d->control->xToPos(x - d->hscroll);
 }
 
-void QDeclarativeTextInput::focusChanged(bool hasFocus)
+void QDeclarativeTextInputPrivate::focusChanged(bool hasFocus)
 {
-    Q_D(QDeclarativeTextInput);
-    d->focused = hasFocus;
-    setCursorVisible(hasFocus);
-    QDeclarativeItem::focusChanged(hasFocus);
+    Q_Q(QDeclarativeTextInput);
+    focused = hasFocus;
+    q->setCursorVisible(hasFocus);
+    QDeclarativeItemPrivate::focusChanged(hasFocus);
 }
 
 void QDeclarativeTextInput::keyPressEvent(QKeyEvent* ev)
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h
index f690ae2..6a61c2d 100644
--- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h
@@ -199,8 +199,6 @@ protected:
     void keyPressEvent(QKeyEvent* ev);
     bool event(QEvent *e);
 
-    void focusChanged(bool hasFocus);
-
 public Q_SLOTS:
     void selectAll();
 
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h
index 3d28f40..5d17a55 100644
--- a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h
@@ -83,6 +83,7 @@ public:
 
     void init();
     void startCreatingCursor();
+    void focusChanged(bool hasFocus);
 
     QLineControl* control;
 
diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp
index cd67aeb..218b587 100644
--- a/src/declarative/util/qdeclarativeview.cpp
+++ b/src/declarative/util/qdeclarativeview.cpp
@@ -447,8 +447,8 @@ void QDeclarativeView::setRootObject(QObject *obj)
         QPerformanceLog::clear();
         d->root = item;
         d->qmlRoot = item;
-        connect(item, SIGNAL(widthChanged()), this, SLOT(sizeChanged()));
-        connect(item, SIGNAL(heightChanged()), this, SLOT(sizeChanged()));
+        connect(item, SIGNAL(widthChanged(qreal)), this, SLOT(sizeChanged()));
+        connect(item, SIGNAL(heightChanged(qreal)), this, SLOT(sizeChanged()));
         if (d->initialSize.height() <= 0 && d->qmlRoot->width() > 0)
             d->initialSize.setWidth(d->qmlRoot->width());
         if (d->initialSize.height() <= 0 && d->qmlRoot->height() > 0)
diff --git a/src/imports/webkit/qdeclarativewebview.cpp b/src/imports/webkit/qdeclarativewebview.cpp
index d78ba28..f8b2b88 100644
--- a/src/imports/webkit/qdeclarativewebview.cpp
+++ b/src/imports/webkit/qdeclarativewebview.cpp
@@ -80,6 +80,7 @@ public:
             rendering(true)
     {
     }
+    void focusChanged(bool);
 
     QUrl url; // page url might be different if it has not loaded yet
     QWebPage *page;
@@ -378,11 +379,12 @@ QVariant QDeclarativeWebView::evaluateJavaScript(const QString &scriptSource)
     return this->page()->mainFrame()->evaluateJavaScript(scriptSource);
 }
 
-void QDeclarativeWebView::focusChanged(bool hasFocus)
+void QDeclarativeWebViewPrivate::focusChanged(bool hasFocus)
 {
+    Q_Q(QDeclarativeWebView);
     QFocusEvent e(hasFocus ? QEvent::FocusIn : QEvent::FocusOut);
-    page()->event(&e);
-    QDeclarativeItem::focusChanged(hasFocus);
+    q->page()->event(&e);
+    QDeclarativeItemPrivate::focusChanged(hasFocus);
 }
 
 void QDeclarativeWebView::initialLayout()
diff --git a/src/imports/webkit/qdeclarativewebview_p.h b/src/imports/webkit/qdeclarativewebview_p.h
index 145e74b..95f51d1 100644
--- a/src/imports/webkit/qdeclarativewebview_p.h
+++ b/src/imports/webkit/qdeclarativewebview_p.h
@@ -239,7 +239,6 @@ protected:
     void keyReleaseEvent(QKeyEvent* event);
     virtual void geometryChanged(const QRectF &newGeometry,
                                  const QRectF &oldGeometry);
-    virtual void focusChanged(bool);
     virtual bool sceneEvent(QEvent *event);
     QDeclarativeWebView *createWindow(QWebPage::WebWindowType type);
 
diff --git a/tests/auto/declarative/qdeclarativeitem/data/propertychanges.qml b/tests/auto/declarative/qdeclarativeitem/data/propertychanges.qml
new file mode 100644
index 0000000..bf4dd85
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeitem/data/propertychanges.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+Item {
+    Item {
+        objectName: "item"
+    }
+    Item {
+        objectName: "parentItem"
+    }
+}
\ No newline at end of file
diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
index bbcc86e..45d670f 100644
--- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
+++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
@@ -60,6 +60,7 @@ private slots:
     void clip();
     void mapCoordinates();
     void mapCoordinates_data();
+    void propertyChanges();
 
 private:
     template<typename T>
@@ -289,7 +290,7 @@ void tst_QDeclarativeItem::smooth()
     QDeclarativeComponent component(&engine);
     component.setData("import Qt 4.6; Item { smooth: false; }", QUrl::fromLocalFile(""));
     QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(component.create());
-    QSignalSpy spy(item, SIGNAL(smoothChanged()));
+    QSignalSpy spy(item, SIGNAL(smoothChanged(bool)));
 
     QVERIFY(item);
     QVERIFY(!item->smooth());
@@ -297,6 +298,10 @@ void tst_QDeclarativeItem::smooth()
     item->setSmooth(true);
     QVERIFY(item->smooth());
     QCOMPARE(spy.count(),1);
+    QList<QVariant> arguments = spy.first();
+    QVERIFY(arguments.count() == 1);
+    QVERIFY(arguments.at(0).toBool() == true);
+
     item->setSmooth(true);
     QCOMPARE(spy.count(),1);
 
@@ -314,13 +319,18 @@ void tst_QDeclarativeItem::clip()
     QDeclarativeComponent component(&engine);
     component.setData("import Qt 4.6\nItem { clip: false\n }", QUrl::fromLocalFile(""));
     QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(component.create());
-    QSignalSpy spy(item, SIGNAL(clipChanged()));
+    QSignalSpy spy(item, SIGNAL(clipChanged(bool)));
 
     QVERIFY(item);
     QVERIFY(!item->clip());
 
     item->setClip(true);
     QVERIFY(item->clip());
+
+    QList<QVariant> arguments = spy.first();
+    QVERIFY(arguments.count() == 1);
+    QVERIFY(arguments.at(0).toBool() == true);
+
     QCOMPARE(spy.count(),1);
     item->setClip(true);
     QCOMPARE(spy.count(),1);
@@ -392,6 +402,84 @@ void tst_QDeclarativeItem::mapCoordinates_data()
         QTest::newRow(QTest::toString(i)) << i << i;
 }
 
+void tst_QDeclarativeItem::propertyChanges()
+{
+    QDeclarativeView *canvas = new QDeclarativeView(0);
+    canvas->setFixedSize(240,320);
+    canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/propertychanges.qml"));
+    canvas->show();
+
+    QEvent wa(QEvent::WindowActivate);
+    QApplication::sendEvent(canvas, &wa);
+    QFocusEvent fe(QEvent::FocusIn);
+    QApplication::sendEvent(canvas, &fe);
+
+    QDeclarativeItem *item = findItem<QDeclarativeItem>(canvas->rootObject(), "item");
+    QDeclarativeItem *parentItem = findItem<QDeclarativeItem>(canvas->rootObject(), "parentItem");
+
+    QVERIFY(item);
+    QVERIFY(parentItem);
+
+    QSignalSpy parentSpy(item, SIGNAL(parentChanged(QDeclarativeItem *)));
+    QSignalSpy widthSpy(item, SIGNAL(widthChanged(qreal)));
+    QSignalSpy heightSpy(item, SIGNAL(heightChanged(qreal)));
+    QSignalSpy baselineOffsetSpy(item, SIGNAL(baselineOffsetChanged(qreal)));
+    QSignalSpy childrenRectSpy(parentItem, SIGNAL(childrenRectChanged(QRectF)));
+    QSignalSpy focusSpy(item, SIGNAL(focusChanged(bool)));
+    QSignalSpy wantsFocusSpy(parentItem, SIGNAL(wantsFocusChanged(bool)));
+
+    item->setParentItem(parentItem);
+    item->setWidth(100.0);
+    item->setHeight(200.0);
+    item->setFocus(true);
+    item->setBaselineOffset(10.0);
+
+    QCOMPARE(item->parentItem(), parentItem);
+    QCOMPARE(parentSpy.count(),1);
+    QList<QVariant> parentArguments = parentSpy.first();
+    QVERIFY(parentArguments.count() == 1);
+    QCOMPARE(item->parentItem(), qvariant_cast<QDeclarativeItem *>(parentArguments.at(0)));
+
+    QCOMPARE(item->width(), 100.0);
+    QCOMPARE(widthSpy.count(),1);
+    QList<QVariant> widthArguments = widthSpy.first();
+    QVERIFY(widthArguments.count() == 1);
+    QCOMPARE(item->width(), widthArguments.at(0).toReal());
+
+    QCOMPARE(item->height(), 200.0);
+    QCOMPARE(heightSpy.count(),1);
+    QList<QVariant> heightArguments = heightSpy.first();
+    QVERIFY(heightArguments.count() == 1);
+    QCOMPARE(item->height(), heightArguments.at(0).toReal());
+
+    QCOMPARE(item->baselineOffset(), 10.0);
+    QCOMPARE(baselineOffsetSpy.count(),1);
+    QList<QVariant> baselineOffsetArguments = baselineOffsetSpy.first();
+    QVERIFY(baselineOffsetArguments.count() == 1);
+    QCOMPARE(item->baselineOffset(), baselineOffsetArguments.at(0).toReal());
+
+    QCOMPARE(parentItem->childrenRect(), QRectF(0.0,0.0,100.0,200.0));
+    QCOMPARE(childrenRectSpy.count(),2);
+    QList<QVariant> childrenRectArguments = childrenRectSpy.at(1);
+    QVERIFY(childrenRectArguments.count() == 1);
+    QCOMPARE(parentItem->childrenRect(), childrenRectArguments.at(0).toRectF());
+
+    QCOMPARE(item->hasFocus(), true);
+    QCOMPARE(focusSpy.count(),1);
+    QList<QVariant> focusArguments = focusSpy.first();
+    QVERIFY(focusArguments.count() == 1);
+    QCOMPARE(focusArguments.at(0).toBool(), true);
+
+    QCOMPARE(parentItem->hasFocus(), false);
+    QCOMPARE(parentItem->wantsFocus(), true);
+    QCOMPARE(wantsFocusSpy.count(),1);
+    QList<QVariant> wantsFocusArguments = wantsFocusSpy.first();
+    QVERIFY(wantsFocusArguments.count() == 1);
+    QCOMPARE(wantsFocusArguments.at(0).toBool(), true);
+
+    delete canvas;
+}
+
 template<typename T>
 T *tst_QDeclarativeItem::findItem(QGraphicsObject *parent, const QString &objectName)
 {
diff --git a/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp b/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp
index 7a97e60..7da9454 100644
--- a/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp
+++ b/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp
@@ -109,7 +109,7 @@ public:
         setRoleNames(roles);
     }
 
-    int rowCount(const QModelIndex &parent=QModelIndex()) const { return list.count(); }
+    int rowCount(const QModelIndex &parent=QModelIndex()) const { Q_UNUSED(parent); return list.count(); }
     QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const {
         QVariant rv;
         if (role == Name)
-- 
cgit v0.12