From 03daf059647c0a0222e8774b0a083f58c8e64934 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Tue, 2 Mar 2010 11:03:12 +0100
Subject: QMetaType: Now we can register typedefs.

Task-number: QTBUG-6833
Task-number: QTBUG-937
Reviewed-by: Brad
Reviewed-by: Kent Hansen
---
 .../snippets/code/src_corelib_kernel_qmetatype.cpp |  5 ++
 src/corelib/kernel/qmetatype.cpp                   | 60 +++++++++++++++++++++-
 src/corelib/kernel/qmetatype.h                     | 37 ++++++++++++-
 tests/auto/qmetaobject/tst_qmetaobject.cpp         | 20 ++++++++
 tests/auto/qmetatype/tst_qmetatype.cpp             | 14 ++++-
 tests/auto/qobject/tst_qobject.cpp                 | 16 ++++++
 6 files changed, 146 insertions(+), 6 deletions(-)

diff --git a/doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp b/doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp
index bff72a0..19e37ba 100644
--- a/doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp
+++ b/doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp
@@ -108,3 +108,8 @@ int id = qRegisterMetaType<MyStruct>();
 int id = qMetaTypeId<QString>();    // id is now QMetaType::QString
 id = qMetaTypeId<MyStruct>();       // compile error if MyStruct not declared
 //! [8]
+
+//! [9]
+typedef QString CustomString;
+qRegisterMetaType<CustomString>("CustomString");
+//! [9]
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index 779b69b..be506b4 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -352,6 +352,7 @@ public:
     QMetaType::SaveOperator saveOp;
     QMetaType::LoadOperator loadOp;
 #endif
+    int alias;
 };
 
 Q_DECLARE_TYPEINFO(QCustomTypeInfo, Q_MOVABLE_TYPE);
@@ -436,8 +437,11 @@ static int qMetaTypeCustomType_unlocked(const char *typeName, int length)
         return 0;
 
     for (int v = 0; v < ct->count(); ++v) {
-        if ((length == ct->at(v).typeName.size())
-            && !strcmp(typeName, ct->at(v).typeName.constData())) {
+        const QCustomTypeInfo &customInfo = ct->at(v);
+        if ((length == customInfo.typeName.size())
+            && !strcmp(typeName, customInfo.typeName.constData())) {
+            if (customInfo.alias >= 0)
+                return customInfo.alias;
             return v + QMetaType::User;
         }
     }
@@ -475,6 +479,7 @@ int QMetaType::registerType(const char *typeName, Destructor destructor,
             inf.typeName = normalizedTypeName;
             inf.constr = constructor;
             inf.destr = destructor;
+            inf.alias = -1;
             idx = ct->size() + User;
             ct->append(inf);
         }
@@ -482,6 +487,51 @@ int QMetaType::registerType(const char *typeName, Destructor destructor,
     return idx;
 }
 
+/*! \internal
+    \since 4.7
+
+    Registers a user type for marshalling, as an alias of another type (typedef)
+*/
+int QMetaType::registerTypedef(const char* typeName, int aliasId)
+{
+    QVector<QCustomTypeInfo> *ct = customTypes();
+    if (!ct || !typeName)
+        return -1;
+
+#ifdef QT_NO_QOBJECT
+    NS(QByteArray) normalizedTypeName = typeName;
+#else
+    NS(QByteArray) normalizedTypeName = QMetaObject::normalizedType(typeName);
+#endif
+
+    int idx = qMetaTypeStaticType(normalizedTypeName.constData(),
+                                  normalizedTypeName.size());
+
+    if (idx) {
+        Q_ASSERT(idx == aliasId);
+        return idx;
+    }
+
+    QWriteLocker locker(customTypesLock());
+    idx = qMetaTypeCustomType_unlocked(normalizedTypeName.constData(),
+                                           normalizedTypeName.size());
+
+    if (idx) {
+        Q_ASSERT(idx == aliasId);
+        return idx;
+    }
+
+    if (!idx) {
+        QCustomTypeInfo inf;
+        inf.typeName = normalizedTypeName;
+        inf.alias = aliasId;
+        inf.constr = 0;
+        inf.destr = 0;
+        ct->append(inf);
+    }
+    return aliasId;
+}
+
 /*!
     \since 4.4
 
@@ -507,6 +557,7 @@ void QMetaType::unregisterType(const char *typeName)
             inf.typeName.clear();
             inf.constr = 0;
             inf.destr = 0;
+            inf.alias = -1;
         }
     }
 }
@@ -1349,6 +1400,11 @@ void QMetaType::destroy(int type, void *data)
 
     \snippet doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp 4
 
+    This function is usefull to register typedefs so they can be used
+    by QMetaProperty, or in QueuedConnections
+
+    \snippet doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp 9
+
     \sa qRegisterMetaTypeStreamOperators(), QMetaType::isRegistered(),
         Q_DECLARE_METATYPE()
 */
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 33126e8..2ed4a1f 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -113,6 +113,7 @@ public:
 #endif
     static int registerType(const char *typeName, Destructor destructor,
                             Constructor constructor);
+    static int registerTypedef(const char *typeName, int aliasId);
     static int type(const char *typeName);
     static const char *typeName(int type);
     static bool isRegistered(int type);
@@ -154,13 +155,31 @@ void qMetaTypeLoadHelper(QDataStream &stream, T *t)
 }
 #endif // QT_NO_DATASTREAM
 
+template <typename T> struct QMetaTypeId2;
+
+namespace QtPrivate {
+    template <typename T, bool Defined = QMetaTypeId2<T>::Defined>
+    struct QMetaTypeIdHelper {
+        static inline int qt_metatype_id()
+        { return QMetaTypeId2<T>::qt_metatype_id(); }
+    };
+    template <typename T> struct QMetaTypeIdHelper<T, false> {
+        static inline int qt_metatype_id()
+        { return -1; }
+    };
+}
+
 template <typename T>
 int qRegisterMetaType(const char *typeName
 #ifndef qdoc
-    , T * /* dummy */ = 0
+    , typename QMetaTypeId2<T>::CustomType * dummy = 0
 #endif
 )
 {
+    const int typedefOf = dummy ? -1 : QtPrivate::QMetaTypeIdHelper<T>::qt_metatype_id();
+    if (typedefOf != -1)
+        return QMetaType::registerTypedef(typeName, typedefOf);
+
     typedef void*(*ConstructPtr)(const T*);
     ConstructPtr cptr = qMetaTypeConstructHelper<T>;
     typedef void(*DeletePtr)(T*);
@@ -170,6 +189,17 @@ int qRegisterMetaType(const char *typeName
                                    reinterpret_cast<QMetaType::Constructor>(cptr));
 }
 
+template <typename T>
+int qRegisterMetaType(const char *typeName
+#ifndef qdoc
+    , typename QMetaTypeId2<T>::BuiltinType * /* dummy */ = 0
+#endif
+)
+{
+    return QMetaType::registerTypedef(typeName, QMetaTypeId2<T>::MetaType);
+}
+
+
 #ifndef QT_NO_DATASTREAM
 template <typename T>
 void qRegisterMetaTypeStreamOperators(const char *typeName
@@ -198,6 +228,7 @@ struct QMetaTypeId
 template <typename T>
 struct QMetaTypeId2
 {
+    typedef T CustomType;
     enum { Defined = QMetaTypeId<T>::Defined };
     static inline int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); }
 };
@@ -254,7 +285,8 @@ inline int qRegisterMetaTypeStreamOperators()
             {                                                           \
                 static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); \
                 if (!metatype_id)                                       \
-                    metatype_id = qRegisterMetaType< TYPE >(#TYPE);     \
+                    metatype_id = qRegisterMetaType< TYPE >(#TYPE,      \
+                               reinterpret_cast< TYPE *>(quintptr(-1))); \
                 return metatype_id;                                     \
             }                                                           \
     };                                                                  \
@@ -264,6 +296,7 @@ inline int qRegisterMetaTypeStreamOperators()
     QT_BEGIN_NAMESPACE \
     template<> struct QMetaTypeId2<TYPE> \
     { \
+        typedef TYPE BuiltinType; \
         enum { Defined = 1, MetaType = QMetaType::NAME }; \
         static inline int qt_metatype_id() { return QMetaType::NAME; } \
     }; \
diff --git a/tests/auto/qmetaobject/tst_qmetaobject.cpp b/tests/auto/qmetaobject/tst_qmetaobject.cpp
index bd54975..bb4a0d2 100644
--- a/tests/auto/qmetaobject/tst_qmetaobject.cpp
+++ b/tests/auto/qmetaobject/tst_qmetaobject.cpp
@@ -157,6 +157,7 @@ private slots:
     void invokeQueuedMetaMember();
     void invokeCustomTypes();
     void invokeMetaConstructor();
+    void invokeTypedefTypes();
     void qtMetaObjectInheritance();
     void normalizedSignature_data();
     void normalizedSignature();
@@ -598,6 +599,8 @@ struct MyType
     int i1, i2, i3;
 };
 
+typedef QString CustomString;
+
 class QtTestCustomObject: public QObject
 {
     Q_OBJECT
@@ -607,6 +610,9 @@ public:
 public slots:
     void sl1(MyType myType);
 
+signals:
+    void sig_custom(const CustomString &string);
+
 public:
     int sum;
 };
@@ -664,6 +670,20 @@ void tst_QMetaObject::invokeMetaConstructor()
     }
 }
 
+void tst_QMetaObject::invokeTypedefTypes()
+{
+    qRegisterMetaType<CustomString>("CustomString");
+    QtTestCustomObject obj;
+    QSignalSpy spy(&obj, SIGNAL(sig_custom(CustomString)));
+
+    QCOMPARE(spy.count(), 0);
+    CustomString arg("hello");
+    QVERIFY(QMetaObject::invokeMethod(&obj, "sig_custom", Q_ARG(CustomString, arg)));
+    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.at(0).count(), 1);
+    QCOMPARE(spy.at(0).at(0), QVariant(arg));
+}
+
 void tst_QMetaObject::normalizedSignature_data()
 {
     QTest::addColumn<QString>("signature");
diff --git a/tests/auto/qmetatype/tst_qmetatype.cpp b/tests/auto/qmetatype/tst_qmetatype.cpp
index 943b05b..f4e122f 100644
--- a/tests/auto/qmetatype/tst_qmetatype.cpp
+++ b/tests/auto/qmetatype/tst_qmetatype.cpp
@@ -241,6 +241,9 @@ void tst_QMetaType::construct()
     QMetaType::destroy(QMetaType::QSize, size);
 }
 
+typedef QString CustomString;
+Q_DECLARE_METATYPE(CustomString) //this line is useless
+
 void tst_QMetaType::typedefs()
 {
     QCOMPARE(QMetaType::type("long long"), int(QMetaType::LongLong));
@@ -256,6 +259,13 @@ void tst_QMetaType::typedefs()
 
     // make sure the qreal typeId is the type id of the type it's defined to
     QCOMPARE(QMetaType::type("qreal"), ::qMetaTypeId<qreal>());
+
+    qRegisterMetaType<CustomString>("CustomString");
+    QCOMPARE(QMetaType::type("CustomString"), ::qMetaTypeId<CustomString>());
+
+    typedef Whity<double> WhityDouble;
+    qRegisterMetaType<WhityDouble>("WhityDouble");
+    QCOMPARE(QMetaType::type("WhityDouble"), ::qMetaTypeId<WhityDouble>());
 }
 
 class IsRegisteredDummyType { };
@@ -286,9 +296,9 @@ void tst_QMetaType::isRegistered()
     QCOMPARE(QMetaType::isRegistered(typeId), registered);
 }
 
-class RegUnreg 
+class RegUnreg
 {
-public: 
+public:
     RegUnreg() {};
     RegUnreg(const RegUnreg &) {};
     ~RegUnreg() {};
diff --git a/tests/auto/qobject/tst_qobject.cpp b/tests/auto/qobject/tst_qobject.cpp
index 3896d70..c8f846e 100644
--- a/tests/auto/qobject/tst_qobject.cpp
+++ b/tests/auto/qobject/tst_qobject.cpp
@@ -1112,6 +1112,8 @@ void tst_QObject::streamCustomTypes()
     QCOMPARE(instanceCount, 0);
 }
 
+typedef QString CustomString;
+
 class PropertyObject : public QObject
 {
     Q_OBJECT
@@ -1125,6 +1127,7 @@ class PropertyObject : public QObject
     Q_PROPERTY(CustomType* custom READ custom WRITE setCustom)
     Q_PROPERTY(float myFloat READ myFloat WRITE setMyFloat)
     Q_PROPERTY(qreal myQReal READ myQReal WRITE setMyQReal)
+    Q_PROPERTY(CustomString customString READ customString WRITE setCustomString )
 
 public:
     enum Alpha {
@@ -1163,6 +1166,9 @@ public:
     void setMyQReal(qreal value) { m_qreal = value; }
     qreal myQReal() const { return m_qreal; }
 
+    CustomString customString() const { return m_customString; }
+    void setCustomString(const QString &string) { m_customString = string; }
+
 private:
     Alpha m_alpha;
     Priority m_priority;
@@ -1172,6 +1178,7 @@ private:
     CustomType *m_custom;
     float m_float;
     qreal m_qreal;
+    CustomString m_customString;
 };
 
 Q_DECLARE_METATYPE(PropertyObject::Priority)
@@ -1626,6 +1633,15 @@ void tst_QObject::property()
     QCOMPARE(qVariantValue<PropertyObject::Priority>(object.property("priority")), PropertyObject::Low);
     object.setProperty("priority", var);
     QCOMPARE(qVariantValue<PropertyObject::Priority>(object.property("priority")), PropertyObject::High);
+
+    qRegisterMetaType<CustomString>("CustomString");
+    QVERIFY(mo->indexOfProperty("customString") != -1);
+    QCOMPARE(object.property("customString").toString(), QString());
+    object.setCustomString("String1");
+    QCOMPARE(object.property("customString"), QVariant("String1"));
+    QVERIFY(object.setProperty("customString", "String2"));
+    QCOMPARE(object.property("customString"), QVariant("String2"));
+    QVERIFY(!object.setProperty("customString", QVariant()));
 }
 
 void tst_QObject::metamethod()
-- 
cgit v0.12


From e614e3548bbe505c75e8b3a54f44f07522a6ecf5 Mon Sep 17 00:00:00 2001
From: Tom Cooksey <thomas.cooksey@nokia.com>
Date: Tue, 2 Mar 2010 16:41:16 +0100
Subject: Add and use QGLContextPrivate::eglSurfaceForDevice()

The QGLContext only stores the EGLSurface for QWidgets & QGLWidgets,
other device types like QPixmap & QGLPixelBuffer store the surface
themsselves. With this patch it is possible to create a QGLContext
on a QPixmap, make it current and render GL to that QPixmap on X11.

Reviewed-By: TrustMe
---
 src/opengl/qgl_egl.cpp      | 33 ++++++++++++++++++++++++++++++---
 src/opengl/qgl_p.h          |  1 +
 src/opengl/qgl_x11egl.cpp   |  2 +-
 src/opengl/qglpixelbuffer.h |  1 +
 4 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/src/opengl/qgl_egl.cpp b/src/opengl/qgl_egl.cpp
index f1abab8..7bfcf27 100644
--- a/src/opengl/qgl_egl.cpp
+++ b/src/opengl/qgl_egl.cpp
@@ -40,8 +40,14 @@
 ****************************************************************************/
 
 #include <QtOpenGL/qgl.h>
+#include <QtOpenGL/qglpixelbuffer.h>
 #include "qgl_p.h"
 #include "qgl_egl_p.h"
+#include "qglpixelbuffer_p.h"
+
+#ifdef Q_WS_X11
+#include <QtGui/private/qpixmap_x11_p.h>
+#endif
 
 QT_BEGIN_NAMESPACE
 
@@ -154,12 +160,12 @@ void QGLContext::reset()
 void QGLContext::makeCurrent()
 {
     Q_D(QGLContext);
-    if (!d->valid || !d->eglContext || d->eglSurface == EGL_NO_SURFACE) {
+    if (!d->valid || !d->eglContext || d->eglSurfaceForDevice() == EGL_NO_SURFACE) {
         qWarning("QGLContext::makeCurrent(): Cannot make invalid context current");
         return;
     }
 
-    if (d->eglContext->makeCurrent(d->eglSurface))
+    if (d->eglContext->makeCurrent(d->eglSurfaceForDevice()))
         QGLContextPrivate::setCurrentContext(this);
 }
 
@@ -179,7 +185,7 @@ void QGLContext::swapBuffers() const
     if (!d->valid || !d->eglContext)
         return;
 
-    d->eglContext->swapBuffers(d->eglSurface);
+    d->eglContext->swapBuffers(d->eglSurfaceForDevice());
 }
 
 void QGLContextPrivate::destroyEglSurfaceForDevice()
@@ -202,6 +208,27 @@ void QGLContextPrivate::destroyEglSurfaceForDevice()
     }
 }
 
+EGLSurface QGLContextPrivate::eglSurfaceForDevice() const
+{
+    if (paintDevice->devType() == QInternal::Widget)
+        return eglSurface;
+    if (paintDevice->devType() == QInternal::Pixmap) {
+#ifdef Q_WS_X11
+        QPixmapData *pmd = static_cast<QPixmap*>(paintDevice)->data_ptr().data();
+        if (pmd->classId() == QPixmapData::X11Class) {
+            QX11PixmapData* x11PixmapData = static_cast<QX11PixmapData*>(pmd);
+            return (EGLSurface)x11PixmapData->gl_surface;
+        } else
+#endif
+            return eglSurface;
+    }
+    if (paintDevice->devType() == QInternal::Pbuffer) {
+        QGLPixelBuffer* pbuf = static_cast<QGLPixelBuffer*>(paintDevice);
+        return pbuf->d_func()->pbuf;
+    }
+    return EGL_NO_SURFACE;
+}
+
 void QGLWidget::setMouseTracking(bool enable)
 {
     QWidget::setMouseTracking(enable);
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index ecd8b43..b828bea 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -356,6 +356,7 @@ public:
     QEglContext *eglContext;
     EGLSurface eglSurface;
     void destroyEglSurfaceForDevice();
+    EGLSurface eglSurfaceForDevice() const;
 #elif defined(Q_WS_X11) || defined(Q_WS_MAC)
     void* cx;
 #endif
diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp
index bcde8c4..ba05e72 100644
--- a/src/opengl/qgl_x11egl.cpp
+++ b/src/opengl/qgl_x11egl.cpp
@@ -229,7 +229,7 @@ bool QGLContext::chooseContext(const QGLContext* shareContext)
     //    QWidget - yes, create the EGLSurface and store it in QGLContextPrivate::eglSurface
     //    QGLWidget - yes, create the EGLSurface and store it in QGLContextPrivate::eglSurface
     //    QPixmap - yes, create the EGLSurface but store it in QX11PixmapData::gl_surface
-    //    QGLPixelBuffer - no, it creates the surface itself
+    //    QGLPixelBuffer - no, it creates the surface itself and stores it in QGLPixelBufferPrivate::pbuf
 
     if (devType == QInternal::Widget) {
         if (d->eglSurface != EGL_NO_SURFACE)
diff --git a/src/opengl/qglpixelbuffer.h b/src/opengl/qglpixelbuffer.h
index 3304dd8..d9c7e3e 100644
--- a/src/opengl/qglpixelbuffer.h
+++ b/src/opengl/qglpixelbuffer.h
@@ -112,6 +112,7 @@ private:
     friend class QGLWindowSurface;
     friend class QGLPaintDevice;
     friend class QGLPBufferGLPaintDevice;
+    friend class QGLContextPrivate;
 };
 
 QT_END_NAMESPACE
-- 
cgit v0.12


From 0b44693aec2eed33cb54876edb7641e981aa883c Mon Sep 17 00:00:00 2001
From: Warwick Allison <warwick.allison@nokia.com>
Date: Wed, 3 Mar 2010 16:16:43 +1000
Subject: 4.6.x compat

---
 src/declarative/graphicsitems/qdeclarativeparticles.cpp | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/declarative/graphicsitems/qdeclarativeparticles.cpp b/src/declarative/graphicsitems/qdeclarativeparticles.cpp
index 1a58d3f..deabdd6 100644
--- a/src/declarative/graphicsitems/qdeclarativeparticles.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeparticles.cpp
@@ -1260,7 +1260,11 @@ void QDeclarativeParticlesPainter::paint(QPainter *p, const QStyleOptionGraphics
     const int myX = x() + parentItem()->x();
     const int myY = y() + parentItem()->y();
 
+#if (QT_VERSION >= QT_VERSION_CHECK(4,7,0))
     QVarLengthArray<QPainter::Fragment, 256> pixmapData;
+#else
+    QVarLengthArray<QDrawPixmaps::Data, 256> pixmapData;
+#endif
     pixmapData.resize(d->particles.count());
 
     const QRectF sourceRect = d->image.rect();
@@ -1268,20 +1272,32 @@ void QDeclarativeParticlesPainter::paint(QPainter *p, const QStyleOptionGraphics
     qreal halfPHeight = sourceRect.height()/2.;
     for (int i = 0; i < d->particles.count(); ++i) {
         const QDeclarativeParticle &particle = d->particles.at(i);
+#if (QT_VERSION >= QT_VERSION_CHECK(4,7,0))
         pixmapData[i].x = particle.x - myX + halfPWidth;
         pixmapData[i].y = particle.y - myY + halfPHeight;
+#else
+         pixmapData[i].point = QPointF(particle.x - myX + halfPWidth, particle.y - myY + halfPHeight);
+#endif
         pixmapData[i].opacity = particle.opacity;
 
         //these never change
         pixmapData[i].rotation = 0;
         pixmapData[i].scaleX = 1;
         pixmapData[i].scaleY = 1;
+#if (QT_VERSION >= QT_VERSION_CHECK(4,7,0))
         pixmapData[i].sourceLeft = sourceRect.left();
         pixmapData[i].sourceTop = sourceRect.top();
         pixmapData[i].width = sourceRect.width();
         pixmapData[i].height = sourceRect.height();
+#else
+        pixmapData[i].source = sourceRect;
+#endif
     }
+#if (QT_VERSION >= QT_VERSION_CHECK(4,7,0))
     p->drawPixmapFragments(pixmapData.data(), d->particles.count(), d->image);
+#else
+    qDrawPixmaps(p, pixmapData.data(), d->particles.count(), d->image);
+#endif
 }
 
 void QDeclarativeParticles::componentComplete()
-- 
cgit v0.12


From f68389023cb8f0365c51fdc1fca06910f36dda2d Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Wed, 3 Mar 2010 15:07:34 +1000
Subject: Remove dependency on declarative from multimedia.

Move all declarative related classes into the multimedia declarative module.

Reviewed-by: Andrew den Exter
---
 src/multimedia/effects/effects.pri                 |  24 +
 src/multimedia/effects/qsoundeffect.cpp            | 255 ++++++
 src/multimedia/effects/qsoundeffect_p.h            | 123 +++
 src/multimedia/effects/qsoundeffect_pulse_p.cpp    | 509 +++++++++++
 src/multimedia/effects/qsoundeffect_pulse_p.h      | 138 +++
 src/multimedia/effects/qsoundeffect_qmedia_p.cpp   | 167 ++++
 src/multimedia/effects/qsoundeffect_qmedia_p.h     | 109 +++
 src/multimedia/effects/qsoundeffect_qsound_p.cpp   | 225 +++++
 src/multimedia/effects/qsoundeffect_qsound_p.h     | 129 +++
 src/multimedia/effects/wavedecoder_p.cpp           | 140 +++
 src/multimedia/effects/wavedecoder_p.h             | 134 +++
 src/multimedia/multimedia.pro                      |   2 +-
 src/multimedia/qml/multimediadeclarative.cpp       |  70 --
 src/multimedia/qml/multimediadeclarative.h         |  60 --
 src/multimedia/qml/qdeclarativeaudio.cpp           | 327 -------
 src/multimedia/qml/qdeclarativeaudio_p.h           | 173 ----
 src/multimedia/qml/qdeclarativemediabase.cpp       | 413 ---------
 src/multimedia/qml/qdeclarativemediabase_p.h       | 168 ----
 src/multimedia/qml/qdeclarativevideo.cpp           | 945 ---------------------
 src/multimedia/qml/qdeclarativevideo_p.h           | 204 -----
 src/multimedia/qml/qmetadatacontrolmetaobject.cpp  | 362 --------
 src/multimedia/qml/qmetadatacontrolmetaobject_p.h  |  92 --
 src/multimedia/qml/qml.pri                         |  37 -
 src/multimedia/qml/qsoundeffect.cpp                | 255 ------
 src/multimedia/qml/qsoundeffect_p.h                | 126 ---
 src/multimedia/qml/qsoundeffect_pulse_p.cpp        | 509 -----------
 src/multimedia/qml/qsoundeffect_pulse_p.h          | 138 ---
 src/multimedia/qml/qsoundeffect_qmedia_p.cpp       | 167 ----
 src/multimedia/qml/qsoundeffect_qmedia_p.h         | 109 ---
 src/multimedia/qml/qsoundeffect_qsound_p.cpp       | 225 -----
 src/multimedia/qml/qsoundeffect_qsound_p.h         | 129 ---
 src/multimedia/qml/wavedecoder_p.cpp               | 140 ---
 src/multimedia/qml/wavedecoder_p.h                 | 134 ---
 .../qdeclarativemodules/multimedia/multimedia.cpp  |  19 +-
 .../qdeclarativemodules/multimedia/multimedia.pro  |  13 +-
 .../multimedia/qdeclarativeaudio.cpp               | 327 +++++++
 .../multimedia/qdeclarativeaudio_p.h               | 173 ++++
 .../multimedia/qdeclarativemediabase.cpp           | 413 +++++++++
 .../multimedia/qdeclarativemediabase_p.h           | 168 ++++
 .../multimedia/qdeclarativevideo.cpp               | 945 +++++++++++++++++++++
 .../multimedia/qdeclarativevideo_p.h               | 204 +++++
 .../multimedia/qmetadatacontrolmetaobject.cpp      | 362 ++++++++
 .../multimedia/qmetadatacontrolmetaobject_p.h      |  92 ++
 src/src.pro                                        |   1 -
 tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro |  12 +-
 .../qdeclarativeaudio/tst_qdeclarativeaudio.cpp    |   2 +-
 tests/auto/qdeclarativevideo/qdeclarativevideo.pro |  12 +-
 .../qdeclarativevideo/tst_qdeclarativevideo.cpp    |   2 +-
 48 files changed, 4689 insertions(+), 4794 deletions(-)
 create mode 100644 src/multimedia/effects/effects.pri
 create mode 100644 src/multimedia/effects/qsoundeffect.cpp
 create mode 100644 src/multimedia/effects/qsoundeffect_p.h
 create mode 100644 src/multimedia/effects/qsoundeffect_pulse_p.cpp
 create mode 100644 src/multimedia/effects/qsoundeffect_pulse_p.h
 create mode 100644 src/multimedia/effects/qsoundeffect_qmedia_p.cpp
 create mode 100644 src/multimedia/effects/qsoundeffect_qmedia_p.h
 create mode 100644 src/multimedia/effects/qsoundeffect_qsound_p.cpp
 create mode 100644 src/multimedia/effects/qsoundeffect_qsound_p.h
 create mode 100644 src/multimedia/effects/wavedecoder_p.cpp
 create mode 100644 src/multimedia/effects/wavedecoder_p.h
 delete mode 100644 src/multimedia/qml/multimediadeclarative.cpp
 delete mode 100644 src/multimedia/qml/multimediadeclarative.h
 delete mode 100644 src/multimedia/qml/qdeclarativeaudio.cpp
 delete mode 100644 src/multimedia/qml/qdeclarativeaudio_p.h
 delete mode 100644 src/multimedia/qml/qdeclarativemediabase.cpp
 delete mode 100644 src/multimedia/qml/qdeclarativemediabase_p.h
 delete mode 100644 src/multimedia/qml/qdeclarativevideo.cpp
 delete mode 100644 src/multimedia/qml/qdeclarativevideo_p.h
 delete mode 100644 src/multimedia/qml/qmetadatacontrolmetaobject.cpp
 delete mode 100644 src/multimedia/qml/qmetadatacontrolmetaobject_p.h
 delete mode 100644 src/multimedia/qml/qml.pri
 delete mode 100644 src/multimedia/qml/qsoundeffect.cpp
 delete mode 100644 src/multimedia/qml/qsoundeffect_p.h
 delete mode 100644 src/multimedia/qml/qsoundeffect_pulse_p.cpp
 delete mode 100644 src/multimedia/qml/qsoundeffect_pulse_p.h
 delete mode 100644 src/multimedia/qml/qsoundeffect_qmedia_p.cpp
 delete mode 100644 src/multimedia/qml/qsoundeffect_qmedia_p.h
 delete mode 100644 src/multimedia/qml/qsoundeffect_qsound_p.cpp
 delete mode 100644 src/multimedia/qml/qsoundeffect_qsound_p.h
 delete mode 100644 src/multimedia/qml/wavedecoder_p.cpp
 delete mode 100644 src/multimedia/qml/wavedecoder_p.h
 create mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio.cpp
 create mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h
 create mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp
 create mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h
 create mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo.cpp
 create mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h
 create mode 100644 src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp
 create mode 100644 src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h

diff --git a/src/multimedia/effects/effects.pri b/src/multimedia/effects/effects.pri
new file mode 100644
index 0000000..5edd452
--- /dev/null
+++ b/src/multimedia/effects/effects.pri
@@ -0,0 +1,24 @@
+
+
+
+system(pkg-config --exists \'libpulse >= 0.9.10\') {
+    DEFINES += QT_MULTIMEDIA_PULSEAUDIO
+    HEADERS += $$PWD/qsoundeffect_pulse_p.h
+    SOURCES += $$PWD/qsoundeffect_pulse_p.cpp
+    LIBS += -lpulse
+} else:x11 {
+    DEFINES += QT_MULTIMEDIA_QMEDIAPLAYER
+    HEADERS += $$PWD/qsoundeffect_qmedia_p.h
+    SOURCES += $$PWD/qsoundeffect_qmedia_p.cpp
+} else {
+    HEADERS += $$PWD/qsoundeffect_qsound_p.h
+    SOURCES += $$PWD/qsoundeffect_qsound_p.cpp
+}
+
+HEADERS += \
+    $$PWD/qsoundeffect_p.h \
+    $$PWD/wavedecoder_p.h
+
+SOURCES += \
+    $$PWD/qsoundeffect.cpp \
+    $$PWD/wavedecoder_p.cpp
diff --git a/src/multimedia/effects/qsoundeffect.cpp b/src/multimedia/effects/qsoundeffect.cpp
new file mode 100644
index 0000000..541e6c9
--- /dev/null
+++ b/src/multimedia/effects/qsoundeffect.cpp
@@ -0,0 +1,255 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qmediacontent.h"
+#include "qmediaplayer.h"
+
+#include "qsoundeffect_p.h"
+
+#if defined(QT_MULTIMEDIA_PULSEAUDIO)
+#include "qsoundeffect_pulse_p.h"
+#elif(QT_MULTIMEDIA_QMEDIAPLAYER)
+#include "qsoundeffect_qmedia_p.h"
+#else
+#include "qsoundeffect_qsound_p.h"
+#endif
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \qmlclass SoundEffect QSoundEffect
+    \since 4.7
+    \brief The SoundEffect element provides a way to play sound effects in qml.
+
+    The following example plays a wav file on mouse click.
+
+    \qml
+    SoundEffect {
+        id: playSound
+        source: "test.wav"
+    }
+    MouseRegion {
+        id: playArea
+        anchors.fill: parent
+        onPressed: {
+            playSound.play()
+        }
+    }
+    \endqml
+
+    \sa SoundEffect
+*/
+
+/*!
+    \qmlproperty QUrl SoundEffect::source
+
+    This property provides a way to control the sound to play.
+*/
+
+/*!
+    \qmlproperty int SoundEffect::loopCount
+
+    This property provides a way to control the number of times to repeat the sound on each play().
+*/
+
+/*!
+    \qmlproperty int SoundEffect::volume
+
+    This property provides a way to control the volume for playback.
+*/
+
+/*!
+    \qmlproperty bool SoundEffect::muted
+
+    This property provides a way to control muting.
+*/
+
+/*!
+    \qmlproperty int SoundEffect::duration
+
+    This property holds the duration in milliseconds of the current source audio.
+*/
+
+/*!
+    \qmlsignal SoundEffect::sourceChanged()
+
+    This handler is called when the source has changed.
+*/
+
+/*!
+    \qmlsignal SoundEffect::loopCountChanged()
+
+    This handler is called when the number of loops has changes.
+*/
+
+/*!
+    \qmlsignal SoundEffect::volumeChanged()
+
+    This handler is called when the volume has changed.
+*/
+
+/*!
+    \qmlsignal SoundEffect::mutedChanged()
+
+    This handler is called when the mute state has changed.
+*/
+
+/*!
+    \qmlsignal SoundEffect::durationChanged()
+
+    This handler is called when the duration has changed.
+*/
+
+QSoundEffect::QSoundEffect(QObject *parent) :
+    QObject(parent),
+    m_loopCount(1),
+    m_vol(100),
+    m_muted(false),
+    m_runningCount(0)
+{
+    d = new QSoundEffectPrivate(this);
+    connect(d, SIGNAL(volumeChanged(int)), SIGNAL(volumeChanged()));
+    connect(d, SIGNAL(mutedChanged(bool)), SIGNAL(mutedChanged()));
+    connect(d, SIGNAL(durationChanged(qint64)), SIGNAL(durationChanged()));
+    connect(d, SIGNAL(stateChanged(QMediaPlayer::State)), SLOT(repeat()));
+}
+
+QSoundEffect::~QSoundEffect()
+{
+    delete d;
+}
+
+QUrl QSoundEffect::source() const
+{
+    return d != 0 ? d->media().canonicalUrl() : QUrl();
+}
+
+void QSoundEffect::setSource(const QUrl &url)
+{
+    if (d != 0 && d->media().canonicalUrl() == url)
+        return;
+
+    d->setVolume(m_vol);
+    d->setMuted(m_muted);
+    d->setMedia(url);
+
+    if (url.isEmpty())
+        return;
+
+    emit sourceChanged();
+}
+
+int QSoundEffect::loopCount() const
+{
+    return m_loopCount;
+}
+
+void QSoundEffect::setLoopCount(int loopCount)
+{
+    if (m_loopCount == loopCount)
+        return;
+
+    m_loopCount = loopCount;
+    emit loopCountChanged();
+}
+
+int QSoundEffect::volume() const
+{
+    return d != 0 ? d->volume() : m_vol;
+}
+
+void QSoundEffect::setVolume(int volume)
+{
+    if (m_vol == volume)
+        return;
+
+    m_vol = volume;
+    if (d != 0)
+        d->setVolume(volume);
+    else
+        emit volumeChanged();
+}
+
+bool QSoundEffect::isMuted() const
+{
+    return d !=  0 ? d->isMuted() : m_muted;
+}
+
+void QSoundEffect::setMuted(bool muted)
+{
+    if (m_muted == muted)
+        return;
+
+    m_muted = muted;
+    if (d != 0)
+        d->setMuted(muted);
+    else
+        emit mutedChanged();
+}
+
+int QSoundEffect::duration() const
+{
+    return d != 0 ? d->duration() : 0;
+}
+
+void QSoundEffect::play()
+{
+    m_runningCount = 0;
+
+    if (d != 0)
+        d->play();
+}
+
+void QSoundEffect::stop()
+{
+    if (d != 0)
+        d->stop();
+}
+
+void QSoundEffect::repeat()
+{
+    if (d->state() == QMediaPlayer::StoppedState) {
+        if (++m_runningCount < m_loopCount)
+            d->play();
+    }
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/effects/qsoundeffect_p.h b/src/multimedia/effects/qsoundeffect_p.h
new file mode 100644
index 0000000..c5554bf
--- /dev/null
+++ b/src/multimedia/effects/qsoundeffect_p.h
@@ -0,0 +1,123 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSOUNDEFFECT_H
+#define QSOUNDEFFECT_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include <QtCore/qobject.h>
+#include <QtCore/qurl.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QSoundEffectPrivate;
+class Q_MULTIMEDIA_EXPORT QSoundEffect : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
+    Q_PROPERTY(int loopCount READ loopCount WRITE setLoopCount NOTIFY loopCountChanged)
+    Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged)
+    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
+    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
+
+public:
+    explicit QSoundEffect(QObject *parent = 0);
+    ~QSoundEffect();
+
+    QUrl source() const;
+    void setSource(const QUrl &url);
+
+    int loopCount() const;
+    void setLoopCount(int loopCount);
+
+    int volume() const;
+    void setVolume(int volume);
+
+    bool isMuted() const;
+    void setMuted(bool muted);
+
+    int duration() const;
+
+signals:
+    void sourceChanged();
+    void loopCountChanged();
+    void volumeChanged();
+    void mutedChanged();
+    void durationChanged();
+
+public slots:
+    void play();
+    void stop();
+
+private slots:
+    void repeat();
+
+private:
+    Q_DISABLE_COPY(QSoundEffect)
+
+    int m_loopCount;
+    int m_vol;
+    bool m_muted;
+    int m_runningCount;
+
+    QSoundEffectPrivate* d;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+
+#endif // QSOUNDEFFECT_H
diff --git a/src/multimedia/effects/qsoundeffect_pulse_p.cpp b/src/multimedia/effects/qsoundeffect_pulse_p.cpp
new file mode 100644
index 0000000..7e9a25c
--- /dev/null
+++ b/src/multimedia/effects/qsoundeffect_pulse_p.cpp
@@ -0,0 +1,509 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qcoreapplication.h>
+#include <QtMultimedia/qaudioformat.h>
+#include <QtNetwork>
+#include <QTime>
+
+#include "qmediacontent.h"
+#include "qmediaplayer.h"
+#include "qsoundeffect_p.h"
+
+#include "wavedecoder_p.h"
+
+#include "qsoundeffect_pulse_p.h"
+
+#if(Q_WS_MAEMO_5)
+#include <pulse/ext-stream-restore.h>
+#endif
+
+#include <unistd.h>
+
+// Less than ideal
+#define PA_SCACHE_ENTRY_SIZE_MAX (1024*1024*16)
+
+QT_BEGIN_NAMESPACE
+
+namespace
+{
+inline pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format)
+{
+    pa_sample_spec  spec;
+
+    spec.rate = format.frequency();
+    spec.channels = format.channels();
+
+    if (format.sampleSize() == 8)
+        spec.format = PA_SAMPLE_U8;
+    else if (format.sampleSize() == 16) {
+        switch (format.byteOrder()) {
+            case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S16BE; break;
+            case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S16LE; break;
+        }
+    }
+    else if (format.sampleSize() == 32) {
+        switch (format.byteOrder()) {
+            case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S32BE; break;
+            case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S32LE; break;
+        }
+    }
+
+    return spec;
+}
+
+class PulseDaemon
+{
+public:
+    PulseDaemon():m_prepared(false)
+    {
+        prepare();
+    }
+
+    ~PulseDaemon()
+    {
+        if (m_prepared)
+            release();
+    }
+
+    inline void lock()
+    {
+        pa_threaded_mainloop_lock(m_mainLoop);
+    }
+
+    inline void unlock()
+    {
+        pa_threaded_mainloop_unlock(m_mainLoop);
+    }
+
+    inline pa_context *context() const
+    {
+        return m_context;
+    }
+
+    int volume()
+    {
+        return m_vol;
+    }
+
+private:
+    void prepare()
+    {
+        m_vol = 100;
+
+        m_mainLoop = pa_threaded_mainloop_new();
+        if (m_mainLoop == 0) {
+            qWarning("PulseAudioService: unable to create pulseaudio mainloop");
+            return;
+        }
+
+        if (pa_threaded_mainloop_start(m_mainLoop) != 0) {
+            qWarning("PulseAudioService: unable to start pulseaudio mainloop");
+            pa_threaded_mainloop_free(m_mainLoop);
+            return;
+        }
+
+        m_mainLoopApi = pa_threaded_mainloop_get_api(m_mainLoop);
+
+        lock();
+        m_context = pa_context_new(m_mainLoopApi, QString(QLatin1String("QtPulseAudio:%1")).arg(::getpid()).toAscii().constData());
+
+#if(Q_WS_MAEMO_5)
+        pa_context_set_state_callback(m_context, context_state_callback, this);
+#endif
+        if (m_context == 0) {
+            qWarning("PulseAudioService: Unable to create new pulseaudio context");
+            pa_threaded_mainloop_free(m_mainLoop);
+            return;
+        }
+
+        if (pa_context_connect(m_context, NULL, (pa_context_flags_t)0, NULL) < 0) {
+            qWarning("PulseAudioService: pa_context_connect() failed");
+            pa_context_unref(m_context);
+            pa_threaded_mainloop_free(m_mainLoop);
+            return;
+        }
+        unlock();
+
+        m_prepared = true;
+    }
+
+    void release()
+    {
+        if (!m_prepared) return;
+        pa_threaded_mainloop_stop(m_mainLoop);
+        pa_threaded_mainloop_free(m_mainLoop);
+        m_prepared = false;
+    }
+
+#if(Q_WS_MAEMO_5)
+    static void context_state_callback(pa_context *c, void *userdata)
+    {
+        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
+        switch (pa_context_get_state(c)) {
+            case PA_CONTEXT_CONNECTING:
+            case PA_CONTEXT_AUTHORIZING:
+            case PA_CONTEXT_SETTING_NAME:
+                break;
+            case PA_CONTEXT_READY:
+                pa_ext_stream_restore_set_subscribe_cb(c, &stream_restore_monitor_callback, self);
+                pa_ext_stream_restore_subscribe(c, 1, NULL, self);
+                break;
+            default:
+                break;
+        }
+    }
+    static void stream_restore_monitor_callback(pa_context *c, void *userdata)
+    {
+        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
+        pa_ext_stream_restore2_read(c, &stream_restore_info_callback, self);
+    }
+    static void stream_restore_info_callback(pa_context *c, const pa_ext_stream_restore2_info *info,
+            int eol, void *userdata)
+    {
+        Q_UNUSED(c)
+
+        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
+
+        if (!eol) {
+            if (QString(info->name).startsWith(QLatin1String("sink-input-by-media-role:x-maemo"))) {
+                const unsigned str_length = 256;
+                char str[str_length];
+                pa_cvolume_snprint(str, str_length, &info->volume);
+                self->m_vol = QString(str).replace(" ","").replace("%","").mid(2).toInt();
+            }
+        }
+    }
+#endif
+
+    int  m_vol;
+    bool m_prepared;
+    pa_context *m_context;
+    pa_threaded_mainloop *m_mainLoop;
+    pa_mainloop_api *m_mainLoopApi;
+};
+}
+
+Q_GLOBAL_STATIC(PulseDaemon, daemon)
+
+
+QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
+    QObject(parent),
+    m_muted(false),
+    m_playQueued(false),
+    m_vol(100),
+    m_duration(0),
+    m_dataUploaded(0),
+    m_state(QMediaPlayer::StoppedState),
+    m_status(QMediaPlayer::NoMedia),
+    m_reply(0),
+    m_stream(0),
+    m_networkAccessManager(0)
+{
+}
+
+QSoundEffectPrivate::~QSoundEffectPrivate()
+{
+    delete m_reply;
+    unloadSample();
+}
+
+qint64 QSoundEffectPrivate::duration() const
+{
+    return m_duration;
+}
+
+int QSoundEffectPrivate::volume() const
+{
+    return m_vol;
+}
+
+bool QSoundEffectPrivate::isMuted() const
+{
+    return m_muted;
+}
+
+QMediaContent QSoundEffectPrivate::media() const
+{
+    return m_media;
+}
+
+QMediaPlayer::State QSoundEffectPrivate::state() const
+{
+    return m_state;
+}
+
+QMediaPlayer::MediaStatus QSoundEffectPrivate::mediaStatus() const
+{
+    return m_status;
+}
+
+void QSoundEffectPrivate::play()
+{
+    if (m_status == QMediaPlayer::LoadingMedia) {
+        m_playQueued = true;
+        return;
+    }
+
+    if (m_status != QMediaPlayer::BufferedMedia ||
+            m_state == QMediaPlayer::PlayingState)
+        return;
+
+    pa_volume_t m_vol = PA_VOLUME_NORM;
+
+    daemon()->lock();
+#if(Q_WS_MAEMO_5)
+    m_vol = PA_VOLUME_NORM/100*((daemon()->volume()+m_vol)/2);
+#endif
+    pa_operation_unref(
+            pa_context_play_sample(daemon()->context(),
+                m_name.constData(),
+                0,
+                m_vol,
+                play_callback,
+                this)
+            );
+    daemon()->unlock();
+
+    m_playbackTime.start();
+
+    emit stateChanged(m_state = QMediaPlayer::PlayingState);
+}
+
+void QSoundEffectPrivate::stop()
+{
+    emit stateChanged(m_state = QMediaPlayer::StoppedState);
+}
+
+void QSoundEffectPrivate::setVolume(int volume)
+{
+    m_vol = volume;
+}
+
+void QSoundEffectPrivate::setMuted(bool muted)
+{
+    m_muted = muted;
+}
+
+void QSoundEffectPrivate::setMedia(const QMediaContent &media)
+{
+    if (media.isNull()) {
+        m_media = QMediaContent();
+        unloadSample();
+        return;
+    }
+    if (m_media == media)
+        return;
+    m_media = media;
+
+    if (m_networkAccessManager == 0)
+        m_networkAccessManager = new QNetworkAccessManager(this);
+
+    m_stream = m_networkAccessManager->get(QNetworkRequest(m_media.canonicalUrl()));
+
+    unloadSample();
+    loadSample();
+
+    emit mediaChanged(m_media);
+}
+
+void QSoundEffectPrivate::decoderReady()
+{
+    if (m_waveDecoder->size() >= PA_SCACHE_ENTRY_SIZE_MAX) {
+        m_status = QMediaPlayer::InvalidMedia;
+        emit mediaStatusChanged(m_status);
+        qWarning("QtPulseAudio: attempting to load to large a sample");
+        return;
+    }
+
+    if (m_name.isNull())
+        m_name = QString(QLatin1String("QtPulseSample-%1-%2")).arg(::getpid()).arg(quintptr(this)).toUtf8();
+
+    pa_sample_spec spec = audioFormatToSampleSpec(m_waveDecoder->audioFormat());
+
+    daemon()->lock();
+    pa_stream *stream = pa_stream_new(daemon()->context(), m_name.constData(), &spec, 0);
+    pa_stream_set_state_callback(stream, stream_state_callback, this);
+    pa_stream_set_write_callback(stream, stream_write_callback, this);
+    pa_stream_connect_upload(stream, (size_t)m_waveDecoder->size());
+    daemon()->unlock();
+}
+
+void QSoundEffectPrivate::decoderError()
+{
+    emit mediaStatusChanged(m_status = QMediaPlayer::InvalidMedia);
+}
+
+void QSoundEffectPrivate::checkPlayTime()
+{
+    int elapsed = m_playbackTime.elapsed();
+
+    if (elapsed >= m_duration) {
+        m_state = QMediaPlayer::StoppedState;
+        emit stateChanged(m_state);
+    }
+    else
+        startTimer(m_duration - elapsed);
+}
+
+void QSoundEffectPrivate::loadSample()
+{
+    m_waveDecoder = new WaveDecoder(m_stream);
+    connect(m_waveDecoder, SIGNAL(formatKnown()), SLOT(decoderReady()));
+    connect(m_waveDecoder, SIGNAL(invalidFormat()), SLOT(decoderError()));
+
+    m_status = QMediaPlayer::LoadingMedia;
+    emit mediaStatusChanged(m_status);
+}
+
+void QSoundEffectPrivate::unloadSample()
+{
+    if (m_status != QMediaPlayer::BufferedMedia)
+        return;
+
+    m_status = QMediaPlayer::NoMedia;
+
+    daemon()->lock();
+    pa_context_remove_sample(daemon()->context(), m_name.constData(), NULL, NULL);
+    daemon()->unlock();
+
+    m_duration = 0;
+    m_dataUploaded = 0;
+}
+
+void QSoundEffectPrivate::timerEvent(QTimerEvent *event)
+{
+    if (m_state == QMediaPlayer::PlayingState) {
+        m_state = QMediaPlayer::StoppedState;
+        emit stateChanged(m_state);
+    }
+
+    killTimer(event->timerId());
+}
+
+void QSoundEffectPrivate::stream_write_callback(pa_stream *s, size_t length, void *userdata)
+{
+    Q_UNUSED(length);
+
+    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
+
+    size_t bufferSize = qMin(pa_stream_writable_size(s),
+            size_t(self->m_waveDecoder->bytesAvailable()));
+    char buffer[bufferSize];
+
+    size_t len = 0;
+    while (len < length) {
+        qint64 read = self->m_waveDecoder->read(buffer, qMin(bufferSize, length -len));
+        if (read > 0) {
+            if (pa_stream_write(s, buffer, size_t(read), 0, 0, PA_SEEK_RELATIVE) == 0)
+                len += size_t(read);
+            else
+                break;
+        }
+    }
+    self->m_dataUploaded += len;
+
+    if (self->m_waveDecoder->size() == self->m_dataUploaded) {
+        pa_stream_finish_upload(s);
+
+        self->m_duration = self->m_waveDecoder->duration();
+        emit self->durationChanged(self->m_duration);
+
+        self->m_status = QMediaPlayer::BufferedMedia;
+        emit self->mediaStatusChanged(self->m_status);
+
+        self->m_waveDecoder->deleteLater();
+        if (!self->m_media.isNull())
+            self->m_stream->deleteLater();
+
+        if (self->m_playQueued) {
+            self->m_playQueued = false;
+            QMetaObject::invokeMethod(self, "play");
+        }
+    }
+}
+
+void QSoundEffectPrivate::stream_state_callback(pa_stream *s, void *userdata)
+{
+    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
+
+    switch (pa_stream_get_state(s)) {
+        case PA_STREAM_CREATING:
+        case PA_STREAM_READY:
+        case PA_STREAM_TERMINATED:
+            break;
+
+        case PA_STREAM_FAILED:
+        default:
+            self->m_status = QMediaPlayer::InvalidMedia;
+            emit self->mediaStatusChanged(self->m_status);
+            break;
+    }
+}
+
+void QSoundEffectPrivate::play_callback(pa_context *c, int success, void *userdata)
+{
+    Q_UNUSED(c);
+
+    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
+
+    if (success == 1)
+        QMetaObject::invokeMethod(self, "checkPlayTime", Qt::QueuedConnection);
+    else {
+        self->m_state = QMediaPlayer::StoppedState;
+        emit self->stateChanged(self->m_state);
+    }
+}
+
+QT_END_NAMESPACE
+
+
diff --git a/src/multimedia/effects/qsoundeffect_pulse_p.h b/src/multimedia/effects/qsoundeffect_pulse_p.h
new file mode 100644
index 0000000..247f8a3
--- /dev/null
+++ b/src/multimedia/effects/qsoundeffect_pulse_p.h
@@ -0,0 +1,138 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSOUNDEFFECT_PULSE_H
+#define QSOUNDEFFECT_PULSE_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include "qsoundeffect_p.h"
+
+#include <QtCore/qobject.h>
+#include <QtCore/qdatetime.h>
+#include <QtMultimedia/qmediaplayer.h>
+#include <pulse/pulseaudio.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QNetworkReply;
+class QNetworkAccessManager;
+class WaveDecoder;
+
+class QSoundEffectPrivate : public QObject
+{
+    Q_OBJECT
+public:
+    explicit QSoundEffectPrivate(QObject* parent);
+    ~QSoundEffectPrivate();
+
+    qint64 duration() const;
+    int volume() const;
+    bool isMuted() const;
+    QMediaContent media() const;
+    QMediaPlayer::State state() const;
+    QMediaPlayer::MediaStatus mediaStatus() const;
+
+public Q_SLOTS:
+    void play();
+    void stop();
+    void setVolume(int volume);
+    void setMuted(bool muted);
+    void setMedia(const QMediaContent &media);
+
+Q_SIGNALS:
+    void mediaChanged(const QMediaContent &media);
+    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
+    void stateChanged(QMediaPlayer::State newState);
+    void durationChanged(qint64 duration);
+    void volumeChanged(int volume);
+    void mutedChanged(bool muted);
+    void error(QMediaPlayer::Error error);
+
+private slots:
+    void decoderReady();
+    void decoderError();
+    void checkPlayTime();
+
+private:
+    void loadSample();
+    void unloadSample();
+
+    void timerEvent(QTimerEvent *event);
+
+    static void stream_write_callback(pa_stream *s, size_t length, void *userdata);
+    static void stream_state_callback(pa_stream *s, void *userdata);
+    static void play_callback(pa_context *c, int success, void *userdata);
+
+    bool    m_muted;
+    bool    m_playQueued;
+    int     m_vol;
+    int     m_duration;
+    int     m_dataUploaded;
+    QTime  m_playbackTime;
+    QMediaPlayer::State m_state;
+    QMediaPlayer::MediaStatus m_status;
+    QByteArray m_name;
+    QMediaContent   m_media;
+    QNetworkReply *m_reply;
+    WaveDecoder *m_waveDecoder;
+    QIODevice *m_stream;
+    QNetworkAccessManager *m_networkAccessManager;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QSOUNDEFFECT_PULSE_H
diff --git a/src/multimedia/effects/qsoundeffect_qmedia_p.cpp b/src/multimedia/effects/qsoundeffect_qmedia_p.cpp
new file mode 100644
index 0000000..48fb257
--- /dev/null
+++ b/src/multimedia/effects/qsoundeffect_qmedia_p.cpp
@@ -0,0 +1,167 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qcoreapplication.h>
+
+#include "qmediacontent.h"
+#include "qmediaplayer.h"
+
+#include "qsoundeffect_p.h"
+#include "qsoundeffect_qmedia_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
+    QObject(parent),
+    m_muted(false),
+    m_vol(100),
+    m_player(0)
+{
+}
+
+QSoundEffectPrivate::~QSoundEffectPrivate()
+{
+    if (m_player) delete m_player;
+}
+
+qint64 QSoundEffectPrivate::duration() const
+{
+    if (m_player) return m_player->duration();
+
+    return 0;
+}
+
+int QSoundEffectPrivate::volume() const
+{
+    if (m_player) return m_player->volume();
+
+    return m_vol;
+}
+
+bool QSoundEffectPrivate::isMuted() const
+{
+    if (m_player) return m_player->isMuted();
+
+    return m_muted;
+}
+
+QMediaContent QSoundEffectPrivate::media() const
+{
+    if (m_player) return m_player->media();
+
+    return QMediaContent();
+}
+
+QMediaPlayer::State QSoundEffectPrivate::state() const
+{
+    if (m_player) return m_player->state();
+
+    return QMediaPlayer::StoppedState;
+}
+
+QMediaPlayer::MediaStatus QSoundEffectPrivate::mediaStatus() const
+{
+    if (m_player) return m_player->mediaStatus();
+
+    return QMediaPlayer::UnknownMediaStatus;
+}
+
+void QSoundEffectPrivate::play()
+{
+    if (m_player && !m_player->isMuted())
+        m_player->play();
+}
+
+void QSoundEffectPrivate::stop()
+{
+    if (m_player)
+        m_player->stop();
+}
+
+void QSoundEffectPrivate::setVolume(int volume)
+{
+    m_vol = volume;
+
+    if (m_player)
+        m_player->setVolume(volume);
+}
+
+void QSoundEffectPrivate::setMuted(bool muted)
+{
+    m_muted = muted;
+
+    if (m_player)
+        m_player->setMuted(muted);
+}
+
+void QSoundEffectPrivate::setMedia(const QMediaContent &media)
+{
+    if (media.isNull())
+        return;
+
+    if (m_player == 0) {
+        m_player = new QMediaPlayer(this, QMediaPlayer::LowLatency);
+        m_player->setVolume(m_vol);
+        m_player->setMuted(m_muted);
+
+        connect(m_player, SIGNAL(volumeChanged(int)), SIGNAL(volumeChanged(int)));
+        connect(m_player, SIGNAL(mutedChanged(bool)), SIGNAL(mutedChanged(bool)));
+        connect(m_player, SIGNAL(durationChanged(qint64)), SIGNAL(durationChanged(qint64)));
+        connect(m_player, SIGNAL(stateChanged(QMediaPlayer::State)), SIGNAL(stateChanged(QMediaPlayer::State)));
+    }
+
+    m_player->setMedia(media.canonicalUrl());
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/effects/qsoundeffect_qmedia_p.h b/src/multimedia/effects/qsoundeffect_qmedia_p.h
new file mode 100644
index 0000000..8267f79
--- /dev/null
+++ b/src/multimedia/effects/qsoundeffect_qmedia_p.h
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSOUNDEFFECT_QMEDIA_H
+#define QSOUNDEFFECT_QMEDIA_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include <QtCore/qobject.h>
+#include <QtCore/qurl.h>
+#include <QtMultimedia/qmediaplayer.h>
+#include "qsoundeffect_p.h"
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class WaveDecoder;
+
+class QSoundEffectPrivate : public QObject
+{
+    Q_OBJECT
+public:
+    explicit QSoundEffectPrivate(QObject* parent);
+    ~QSoundEffectPrivate();
+
+    qint64 duration() const;
+    int volume() const;
+    bool isMuted() const;
+    QMediaContent media() const;
+    QMediaPlayer::State state() const;
+    QMediaPlayer::MediaStatus mediaStatus() const;
+
+public Q_SLOTS:
+    void play();
+    void stop();
+    void setVolume(int volume);
+    void setMuted(bool muted);
+    void setMedia(const QMediaContent &media);
+
+Q_SIGNALS:
+    void mediaChanged(const QMediaContent &media);
+    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
+    void stateChanged(QMediaPlayer::State newState);
+    void durationChanged(qint64 duration);
+    void volumeChanged(int volume);
+    void mutedChanged(bool muted);
+    void error(QMediaPlayer::Error error);
+
+private:
+    bool m_muted;
+    int  m_vol;
+    QMediaPlayer *m_player;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QSOUNDEFFECT_QMEDIA_H
diff --git a/src/multimedia/effects/qsoundeffect_qsound_p.cpp b/src/multimedia/effects/qsoundeffect_qsound_p.cpp
new file mode 100644
index 0000000..df160a9
--- /dev/null
+++ b/src/multimedia/effects/qsoundeffect_qsound_p.cpp
@@ -0,0 +1,225 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qcoreapplication.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qfile.h>
+#include <QtGui/qsound.h>
+#include <QtMultimedia/qaudioformat.h>
+#include <QDebug>
+
+#include "qmediacontent.h"
+#include "qmediaplayer.h"
+#include "qsoundeffect_p.h"
+
+#include "wavedecoder_p.h"
+
+#include "qsoundeffect_qsound_p.h"
+
+QT_BEGIN_NAMESPACE
+
+QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
+    QObject(parent),
+    m_queued(false),
+    m_muted(false),
+    m_state(QMediaPlayer::StoppedState),
+    m_status(QMediaPlayer::NoMedia),
+    m_file(0),
+    m_sound(0)
+{
+    m_timer = new QTimer(this);
+    connect(m_timer,SIGNAL(timeout()),SLOT(checkPlayTime()));
+    m_media = QMediaContent();
+}
+
+QSoundEffectPrivate::~QSoundEffectPrivate()
+{
+    if (m_sound) delete m_sound;
+    if (m_waveDecoder) delete m_waveDecoder;
+    m_file->close();
+}
+
+qint64 QSoundEffectPrivate::duration() const
+{
+    if (m_waveDecoder)
+        return m_waveDecoder->size();
+
+    return 0;
+}
+
+int QSoundEffectPrivate::volume() const
+{
+    return 100;
+}
+
+bool QSoundEffectPrivate::isMuted() const
+{
+    return m_muted;
+}
+
+QMediaContent QSoundEffectPrivate::media() const
+{
+    return m_media;
+}
+
+QMediaPlayer::State QSoundEffectPrivate::state() const
+{
+    return m_state;
+}
+
+QMediaPlayer::MediaStatus QSoundEffectPrivate::mediaStatus() const
+{
+    return m_status;
+}
+
+void QSoundEffectPrivate::play()
+{
+    if (m_sound && !m_muted) {
+        m_queued = false;
+        m_timer->start(20);
+        m_playbackTime.start();
+        m_sound->play();
+        emit stateChanged(m_state = QMediaPlayer::PlayingState);
+    } else if (m_status == QMediaPlayer::LoadingMedia)
+        m_queued = true;
+}
+
+void QSoundEffectPrivate::stop()
+{
+    m_timer->stop();
+
+    if (m_sound) {
+        m_sound->stop();
+        emit stateChanged(m_state = QMediaPlayer::StoppedState);
+    }
+}
+
+void QSoundEffectPrivate::setVolume(int volume)
+{
+    Q_UNUSED(volume)
+}
+
+void QSoundEffectPrivate::setMuted(bool muted)
+{
+    m_muted = muted;
+}
+
+void QSoundEffectPrivate::setMedia(const QMediaContent &media)
+{
+    m_queued = false;
+
+    if (media.isNull() || media.canonicalUrl().scheme() != QLatin1String("file")) {
+        m_media = QMediaContent();
+        return;
+    }
+    if (m_media == media)
+        return;
+
+    m_media = media;
+    m_file = new QFile(m_media.canonicalUrl().toLocalFile());
+    m_file->open(QIODevice::ReadOnly|QIODevice::Unbuffered);
+
+    unloadSample();
+    loadSample();
+
+    emit mediaChanged(m_media);
+}
+
+void QSoundEffectPrivate::decoderReady()
+{
+    m_file->close();
+    m_sound = new QSound(m_media.canonicalUrl().toLocalFile());
+    emit mediaStatusChanged(m_status = QMediaPlayer::LoadedMedia);
+
+    if (m_queued)
+        play();
+}
+
+void QSoundEffectPrivate::decoderError()
+{
+    m_file->close();
+    emit mediaStatusChanged(m_status = QMediaPlayer::InvalidMedia);
+}
+
+void QSoundEffectPrivate::checkPlayTime()
+{
+    if (m_sound->isFinished()) {
+        m_timer->stop();
+        m_state = QMediaPlayer::StoppedState;
+        emit stateChanged(m_state);
+    }
+}
+
+void QSoundEffectPrivate::loadSample()
+{
+    m_waveDecoder = new WaveDecoder(m_file);
+    connect(m_waveDecoder, SIGNAL(formatKnown()), SLOT(decoderReady()));
+    connect(m_waveDecoder, SIGNAL(invalidFormat()), SLOT(decoderError()));
+
+    m_status = QMediaPlayer::LoadingMedia;
+    emit mediaStatusChanged(m_status);
+}
+
+void QSoundEffectPrivate::unloadSample()
+{
+    if (m_sound == 0)
+        return;
+
+    m_status = QMediaPlayer::NoMedia;
+
+    if (m_sound)
+        delete m_sound;
+
+    m_sound = 0;
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/effects/qsoundeffect_qsound_p.h b/src/multimedia/effects/qsoundeffect_qsound_p.h
new file mode 100644
index 0000000..45c0888
--- /dev/null
+++ b/src/multimedia/effects/qsoundeffect_qsound_p.h
@@ -0,0 +1,129 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSOUNDEFFECT_QSOUND_H
+#define QSOUNDEFFECT_QSOUND_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include <QtCore/qobject.h>
+#include <QtCore/qdatetime.h>
+#include <QtMultimedia/qmediaplayer.h>
+
+#include "qsoundeffect_p.h"
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QTimer;
+class QSound;
+class QFile;
+class WaveDecoder;
+
+class QSoundEffectPrivate : public QObject
+{
+    Q_OBJECT
+public:
+    explicit QSoundEffectPrivate(QObject* parent);
+    ~QSoundEffectPrivate();
+
+    qint64 duration() const;
+    int volume() const;
+    bool isMuted() const;
+    QMediaContent media() const;
+    QMediaPlayer::State state() const;
+    QMediaPlayer::MediaStatus mediaStatus() const;
+
+public Q_SLOTS:
+    void play();
+    void stop();
+    void setVolume(int volume);
+    void setMuted(bool muted);
+    void setMedia(const QMediaContent &media);
+
+Q_SIGNALS:
+    void mediaChanged(const QMediaContent &media);
+    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
+    void stateChanged(QMediaPlayer::State newState);
+    void durationChanged(qint64 duration);
+    void volumeChanged(int volume);
+    void mutedChanged(bool muted);
+    void error(QMediaPlayer::Error error);
+
+private slots:
+    void decoderReady();
+    void decoderError();
+    void checkPlayTime();
+
+private:
+    void loadSample();
+    void unloadSample();
+
+    bool    m_queued;
+    bool    m_muted;
+    QTime  m_playbackTime;
+    QMediaPlayer::State m_state;
+    QMediaPlayer::MediaStatus m_status;
+    QFile *m_file;
+    QByteArray m_name;
+    QMediaContent   m_media;
+    WaveDecoder *m_waveDecoder;
+    QSound *m_sound;
+    QTimer *m_timer;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QSOUNDEFFECT_QSOUND_H
diff --git a/src/multimedia/effects/wavedecoder_p.cpp b/src/multimedia/effects/wavedecoder_p.cpp
new file mode 100644
index 0000000..f2277ae
--- /dev/null
+++ b/src/multimedia/effects/wavedecoder_p.cpp
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "wavedecoder_p.h"
+
+#include <QtCore/qtimer.h>
+#include <QtCore/qendian.h>
+
+QT_BEGIN_NAMESPACE
+
+WaveDecoder::WaveDecoder(QIODevice *s, QObject *parent):
+    QIODevice(parent),
+    haveFormat(false),
+    dataSize(0),
+    remaining(0),
+    source(s)
+{
+    open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+
+    if (source->bytesAvailable() >= sizeof(CombinedHeader))
+        QTimer::singleShot(0, this, SLOT(handleData()));
+    else
+        connect(source, SIGNAL(readyRead()), SLOT(handleData()));
+}
+
+WaveDecoder::~WaveDecoder()
+{
+}
+
+QAudioFormat WaveDecoder::audioFormat() const
+{
+    return format;
+}
+
+int WaveDecoder::duration() const
+{
+    return size() * 1000 / (format.sampleSize() / 8) / format.channels() / format.frequency();
+}
+
+qint64 WaveDecoder::size() const
+{
+    return haveFormat ? dataSize : 0;
+}
+
+bool WaveDecoder::isSequential() const
+{
+    return source->isSequential();
+}
+
+qint64 WaveDecoder::bytesAvailable() const
+{
+    return haveFormat ? source->bytesAvailable() : 0;
+}
+
+qint64 WaveDecoder::readData(char *data, qint64 maxlen)
+{
+    return haveFormat ? source->read(data, maxlen) : 0;
+}
+
+qint64 WaveDecoder::writeData(const char *data, qint64 len)
+{
+    Q_UNUSED(data);
+    Q_UNUSED(len);
+
+    return -1;
+}
+
+void WaveDecoder::handleData()
+{
+    if (source->bytesAvailable() < sizeof(CombinedHeader))
+        return;
+
+    source->disconnect(SIGNAL(readyRead()), this, SLOT(handleData()));
+    source->read((char*)&header, sizeof(CombinedHeader));
+
+    if (qstrncmp(header.riff.descriptor.id, "RIFF", 4) != 0 ||
+        qstrncmp(header.riff.type, "WAVE", 4) != 0 ||
+        qstrncmp(header.wave.descriptor.id, "fmt ", 4) != 0 ||
+        (header.wave.audioFormat != 0 && header.wave.audioFormat != 1) ||
+        qstrncmp(header.data.descriptor.id, "data", 4) != 0) {
+
+        emit invalidFormat();
+    }
+    else {
+        int bps = qFromLittleEndian<quint16>(header.wave.bitsPerSample);
+
+        format.setCodec(QLatin1String("audio/pcm"));
+        format.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt);
+        format.setByteOrder(QAudioFormat::LittleEndian);
+        format.setFrequency(qFromLittleEndian<quint32>(header.wave.sampleRate));
+        format.setSampleSize(bps);
+        format.setChannels(qFromLittleEndian<quint16>(header.wave.numChannels));
+
+        dataSize = qFromLittleEndian<quint32>(header.data.descriptor.size);
+
+        haveFormat = true;
+        connect(source, SIGNAL(readyRead()), SIGNAL(readyRead()));
+        emit formatKnown();
+    }
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/effects/wavedecoder_p.h b/src/multimedia/effects/wavedecoder_p.h
new file mode 100644
index 0000000..00aa14e
--- /dev/null
+++ b/src/multimedia/effects/wavedecoder_p.h
@@ -0,0 +1,134 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef WAVEDECODER_H
+#define WAVEDECODER_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qiodevice.h>
+#include <QtMultimedia/qaudioformat.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+
+class WaveDecoder : public QIODevice
+{
+    Q_OBJECT
+
+public:
+    explicit WaveDecoder(QIODevice *source, QObject *parent = 0);
+    ~WaveDecoder();
+
+    QAudioFormat audioFormat() const;
+    int duration() const;
+
+    qint64 size() const;
+    bool isSequential() const;
+    qint64 bytesAvailable() const;
+
+signals:
+    void formatKnown();
+    void invalidFormat();
+
+private slots:
+    void handleData();
+
+private:
+    qint64 readData(char *data, qint64 maxlen);
+    qint64 writeData(const char *data, qint64 len);
+
+    struct chunk
+    {
+        char        id[4];
+        quint32     size;
+    };
+    struct RIFFHeader
+    {
+        chunk       descriptor;
+        char        type[4];
+    };
+    struct WAVEHeader
+    {
+        chunk       descriptor;
+        quint16     audioFormat;
+        quint16     numChannels;
+        quint32     sampleRate;
+        quint32     byteRate;
+        quint16     blockAlign;
+        quint16     bitsPerSample;
+    };
+    struct DATAHeader
+    {
+        chunk       descriptor;
+    };
+    struct CombinedHeader
+    {
+        RIFFHeader  riff;
+        WAVEHeader  wave;
+        DATAHeader  data;
+    };
+
+    bool haveFormat;
+    qint64 dataSize;
+    qint64 remaining;
+    QAudioFormat format;
+    QIODevice *source;
+    CombinedHeader header;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // WAVEDECODER_H
diff --git a/src/multimedia/multimedia.pro b/src/multimedia/multimedia.pro
index 106d3ab..500aff7 100644
--- a/src/multimedia/multimedia.pro
+++ b/src/multimedia/multimedia.pro
@@ -12,6 +12,6 @@ include(audio/audio.pri)
 include(video/video.pri)
 include(base/base.pri)
 include(playback/playback.pri)
-include(qml/qml.pri)
+include(effects/effects.pri)
 
 symbian: TARGET.UID3 = 0x2001E627
diff --git a/src/multimedia/qml/multimediadeclarative.cpp b/src/multimedia/qml/multimediadeclarative.cpp
deleted file mode 100644
index 7f5298f..0000000
--- a/src/multimedia/qml/multimediadeclarative.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/multimediadeclarative.h>
-#include <QtMultimedia/private/qsoundeffect_p.h>
-#include <QtMultimedia/private/qdeclarativeaudio_p.h>
-#include <QtMultimedia/private/qdeclarativevideo_p.h>
-
-
-QT_BEGIN_NAMESPACE
-
-namespace QtMultimedia
-{
-
-/*!
-    Register the Multimedia QML elements.
-    \internal
-*/
-
-void qRegisterDeclarativeElements(const char *uri)
-{
-    Q_ASSERT(QLatin1String(uri) == QLatin1String("Qt.multimedia"));
-
-    qmlRegisterType<QSoundEffect>(uri, 4, 7, "SoundEffect");
-    qmlRegisterType<QDeclarativeAudio>(uri, 4, 7, "Audio");
-    qmlRegisterType<QDeclarativeVideo>(uri, 4, 7, "Video");
-}
-
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/qml/multimediadeclarative.h b/src/multimedia/qml/multimediadeclarative.h
deleted file mode 100644
index 29af65a..0000000
--- a/src/multimedia/qml/multimediadeclarative.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QTMULTIMEDIA_QML_H
-#define QTMULTIMEDIA_QML_H
-
-#include <QtCore/qglobal.h>
-
-QT_BEGIN_HEADER
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-namespace QtMultimedia
-{
-extern void Q_MULTIMEDIA_EXPORT qRegisterDeclarativeElements(const char *uri);
-}
-
-QT_END_NAMESPACE
-QT_END_HEADER
-
-#endif  // ifndef QTMULTIMEDIA_QML_H
diff --git a/src/multimedia/qml/qdeclarativeaudio.cpp b/src/multimedia/qml/qdeclarativeaudio.cpp
deleted file mode 100644
index 1cbf594..0000000
--- a/src/multimedia/qml/qdeclarativeaudio.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativeaudio_p.h"
-
-#include <QtMultimedia/qmediaplayercontrol.h>
-
-QT_BEGIN_NAMESPACE
-
-
-/*!
-    \qmlclass Audio QDeclarativeAudio
-    \since 4.7
-    \brief The Audio element allows you to add audio playback to a scene.
-
-    \qml
-    Audio { source: "audio/song.mp3" }
-    \endqml
-
-    \sa Video
-*/
-
-/*!
-    \internal
-    \class QDeclarativeAudio
-    \brief The QDeclarativeAudio class provides an audio item that you can add to a QDeclarativeView.
-*/
-
-void QDeclarativeAudio::_q_error(int errorCode, const QString &errorString)
-{
-    m_error = QMediaPlayer::Error(errorCode);
-    m_errorString = errorString;
-
-    emit error(Error(errorCode), errorString);
-    emit errorChanged();
-}
-
-
-QDeclarativeAudio::QDeclarativeAudio(QObject *parent)
-    : QObject(parent)
-{
-    setObject(this);
-}
-
-QDeclarativeAudio::~QDeclarativeAudio()
-{
-    shutdown();
-}
-
-/*!
-    \qmlmethod Audio::play()
-
-    Starts playback of the media.
-
-    Sets the \l playing property to true, and the \l paused property to false.
-*/
-
-void QDeclarativeAudio::play()
-{    
-    m_playerControl->play();
-
-    if (m_paused) {
-        m_paused = false;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlmethod Audio::pause()
-
-    Pauses playback of the media.
-
-    Sets the \l playing and \l paused properties to true.
-*/
-
-void QDeclarativeAudio::pause()
-{
-    m_playerControl->pause();
-
-    if (!m_paused && m_state == QMediaPlayer::PausedState) {
-        m_paused = true;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlmethod Audio::stop()
-
-    Stops playback of the media.
-
-    Sets the \l playing and \l paused properties to false.
-*/
-
-void QDeclarativeAudio::stop()
-{
-    m_playerControl->stop();
-
-    if (m_paused) {
-        m_paused = false;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlproperty url Audio::source
-
-    This property holds the source URL of the media.
-*/
-
-/*!
-    \qmlproperty bool Audio::playing
-
-    This property holds whether the media is playing.
-
-    Defaults to false, and can be set to true to start playback.
-*/
-
-/*!
-    \qmlproperty bool Audio::paused
-
-    This property holds whether the media is paused.
-
-    Defaults to false, and can be set to true to pause playback.
-*/
-
-/*!
-    \qmlsignal Audio::onStarted()
-
-    This handler is called when playback is started.
-*/
-
-/*!
-    \qmlsignal Audio::onResumed()
-
-    This handler is called when playback is resumed from the paused state.
-*/
-
-/*!
-    \qmlsignal Audio::onPaused()
-
-    This handler is called when playback is paused.
-*/
-
-/*!
-    \qmlsignal Audio::onStopped()
-
-    This handler is called when playback is stopped.
-*/
-
-/*!
-    \qmlproperty enum Audio::status
-
-    This property holds the status of media loading. It can be one of:
-
-    \list
-    \o NoMedia - no media has been set.
-    \o Loading - the media is currently being loaded.
-    \o Loaded - the media has been loaded.
-    \o Buffering - the media is buffering data.
-    \o Stalled - playback has been interrupted while the media is buffering data.
-    \o Buffered - the media has buffered data.
-    \o EndOfMedia - the media has played to the end.
-    \o InvalidMedia - the media cannot be played.
-    \o UnknownStatus - the status of the media is unknown.
-    \endlist
-*/
-
-QDeclarativeAudio::Status QDeclarativeAudio::status() const
-{
-    return Status(m_status);
-}
-
-/*!
-    \qmlsignal Audio::onLoaded()
-
-    This handler is called when the media source has been loaded.
-*/
-
-/*!
-    \qmlsignal Audio::onBuffering()
-
-    This handler is called when the media  starts buffering.
-*/
-
-/*!
-    \qmlsignal Audio::onStalled()
-
-    This handler is called when playback has stalled while the media buffers.
-*/
-
-/*!
-    \qmlsignal Audio::onBuffered()
-
-    This handler is called when the media has finished buffering.
-*/
-
-/*!
-    \qmlsignal Audio::onEndOfMedia()
-
-    This handler is called when playback stops because end of the media has been reached.
-*/
-/*!
-    \qmlproperty int Audio::duration
-
-    This property holds the duration of the media in milliseconds.
-
-    If the media doesn't have a fixed duration (a live stream for example) this will be 0.
-*/
-
-/*!
-    \qmlproperty int Audio::position
-
-    This property holds the current playback position in milliseconds.
-
-    If the \l seekable property is true, this property can be set to seek to a new position.
-*/
-
-/*!
-    \qmlproperty qreal Audio::volume
-
-    This property holds the volume of the audio output, from 0.0 (silent) to 1.0 (maximum volume).
-*/
-
-/*!
-    \qmlproperty bool Audio::muted
-
-    This property holds whether the audio output is muted.
-*/
-
-/*!
-    \qmlproperty qreal Audio::bufferProgress
-
-    This property holds how much of the data buffer is currently filled, from 0.0 (empty) to 1.0
-    (full).
-*/
-
-/*!
-    \qmlproperty bool Audio::seekable
-
-    This property holds whether position of the audio can be changed.
-
-    If true; setting a \l position value will cause playback to seek to the new position.
-*/
-
-/*!
-    \qmlproperty qreal Audio::playbackRate
-
-    This property holds the rate at which audio is played at as a multiple of the normal rate.
-*/
-
-/*!
-    \qmlproperty enum Audio::error
-
-    This property holds the error state of the audio.  It can be one of:
-
-    \list
-    \o NoError - there is no current error.
-    \o ResourceError - the audio cannot be played due to a problem allocating resources.
-    \o FormatError - the audio format is not supported.
-    \o NetworkError - the audio cannot be played due to network issues.
-    \o AccessDenied - the audio cannot be played due to insufficient permissions.
-    \o ServiceMissing -  the audio cannot be played because the media service could not be
-    instantiated.
-    \endlist
-*/
-
-QDeclarativeAudio::Error QDeclarativeAudio::error() const
-{
-    return Error(m_error);
-}
-
-/*!
-    \qmlproperty string Audio::errorString
-
-    This property holds a string describing the current error condition in more detail.
-*/
-
-/*!
-    \qmlsignal Audio::onError(error, errorString)
-
-    This handler is called when an \l {Error}{error} has occurred.  The errorString parameter
-    may contain more detailed information about the error.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qdeclarativeaudio_p.cpp"
-
-
diff --git a/src/multimedia/qml/qdeclarativeaudio_p.h b/src/multimedia/qml/qdeclarativeaudio_p.h
deleted file mode 100644
index d1fb275..0000000
--- a/src/multimedia/qml/qdeclarativeaudio_p.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEAUDIO_P_H
-#define QDECLARATIVEAUDIO_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/private/qdeclarativemediabase_p.h>
-
-#include <QtCore/qbasictimer.h>
-#include <QtDeclarative/qdeclarativeitem.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QTimerEvent;
-
-class Q_AUTOTEST_EXPORT QDeclarativeAudio : public QObject, public QDeclarativeMediaBase, public QDeclarativeParserStatus
-{
-    Q_OBJECT
-    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
-    Q_PROPERTY(bool playing READ isPlaying WRITE setPlaying NOTIFY playingChanged)
-    Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
-    Q_PROPERTY(Status status READ status NOTIFY statusChanged)
-    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
-    Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
-    Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged)
-    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
-    Q_PROPERTY(int bufferProgress READ bufferProgress NOTIFY bufferProgressChanged)
-    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
-    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
-    Q_PROPERTY(Error error READ error NOTIFY errorChanged)
-    Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
-    Q_ENUMS(Status)
-    Q_ENUMS(Error)
-    Q_INTERFACES(QDeclarativeParserStatus)
-public:
-    enum Status
-    {
-        UnknownStatus = QMediaPlayer::UnknownMediaStatus,
-        NoMedia       = QMediaPlayer::NoMedia,
-        Loading       = QMediaPlayer::LoadingMedia,
-        Loaded        = QMediaPlayer::LoadedMedia,
-        Stalled       = QMediaPlayer::StalledMedia,
-        Buffering     = QMediaPlayer::BufferingMedia,
-        Buffered      = QMediaPlayer::BufferedMedia,
-        EndOfMedia    = QMediaPlayer::EndOfMedia,
-        InvalidMedia  = QMediaPlayer::InvalidMedia
-    };
-
-    enum Error
-    {
-        NoError        = QMediaPlayer::NoError,
-        ResourceError  = QMediaPlayer::ResourceError,
-        FormatError    = QMediaPlayer::FormatError,
-        NetworkError   = QMediaPlayer::NetworkError,
-        AccessDenied   = QMediaPlayer::AccessDeniedError,
-        ServiceMissing = QMediaPlayer::ServiceMissingError
-    };
-
-    QDeclarativeAudio(QObject *parent = 0);
-    ~QDeclarativeAudio();
-
-    Status status() const;
-    Error error() const;
-
-public Q_SLOTS:
-    void play();
-    void pause();
-    void stop();
-
-Q_SIGNALS:
-    void sourceChanged();
-
-    void playingChanged();
-    void pausedChanged();
-
-    void started();
-    void resumed();
-    void paused();
-    void stopped();
-
-    void statusChanged();
-
-    void loaded();
-    void buffering();
-    void stalled();
-    void buffered();
-    void endOfMedia();
-
-    void durationChanged();
-    void positionChanged();
-
-    void volumeChanged();
-    void mutedChanged();
-
-    void bufferProgressChanged();
-
-    void seekableChanged();
-    void playbackRateChanged();
-
-    void errorChanged();
-    void error(QDeclarativeAudio::Error error, const QString &errorString);
-
-private Q_SLOTS:
-    void _q_error(int, const QString &);
-
-private:
-    Q_DISABLE_COPY(QDeclarativeAudio)
-    Q_PRIVATE_SLOT(mediaBase(), void _q_stateChanged(QMediaPlayer::State))
-    Q_PRIVATE_SLOT(mediaBase(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
-    Q_PRIVATE_SLOT(mediaBase(), void _q_metaDataChanged())
-
-    inline QDeclarativeMediaBase *mediaBase() { return this; }
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeAudio))
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/qml/qdeclarativemediabase.cpp b/src/multimedia/qml/qdeclarativemediabase.cpp
deleted file mode 100644
index e054cb2..0000000
--- a/src/multimedia/qml/qdeclarativemediabase.cpp
+++ /dev/null
@@ -1,413 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "QtMultimedia/private/qdeclarativemediabase_p.h"
-
-#include <QtCore/qcoreevent.h>
-#include <QtCore/qurl.h>
-
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediaserviceprovider.h>
-#include <QtMultimedia/qmetadatacontrol.h>
-#include <QtMultimedia/private/qmetadatacontrolmetaobject_p.h>
-
-
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarativeMediaBaseObject : public QMediaObject
-{
-public:
-    QDeclarativeMediaBaseObject(QMediaService *service)
-        : QMediaObject(0, service)
-    {
-    }
-};
-
-class QDeclarativeMediaBasePlayerControl : public QMediaPlayerControl
-{
-public:
-    QDeclarativeMediaBasePlayerControl(QObject *parent)
-        : QMediaPlayerControl(parent)
-    {
-    }
-
-    QMediaPlayer::State state() const { return QMediaPlayer::StoppedState; }
-    QMediaPlayer::MediaStatus mediaStatus() const { return QMediaPlayer::NoMedia; }
-
-    qint64 duration() const { return 0; }
-    qint64 position() const { return 0; }
-    void setPosition(qint64) {}
-    int volume() const { return 0; }
-    void setVolume(int) {}
-    bool isMuted() const { return false; }
-    void setMuted(bool) {}
-    int bufferStatus() const { return 0; }
-    bool isAudioAvailable() const { return false; }
-    bool isVideoAvailable() const { return false; }
-    bool isSeekable() const { return false; }
-    QMediaTimeRange availablePlaybackRanges() const { return QMediaTimeRange(); }
-    qreal playbackRate() const { return 1; }
-    void setPlaybackRate(qreal) {}
-    QMediaContent media() const { return QMediaContent(); }
-    const QIODevice *mediaStream() const { return 0; }
-    void setMedia(const QMediaContent &, QIODevice *) {}
-
-    void play() {}
-    void pause() {}
-    void stop() {}
-};
-
-class QDeclarativeMediaBaseAnimation : public QObject
-{
-public:
-    QDeclarativeMediaBaseAnimation(QDeclarativeMediaBase *media)
-        : m_media(media)
-    {
-    }
-
-    void start() { if (!m_timer.isActive()) m_timer.start(500, this); }
-    void stop() { m_timer.stop(); }
-
-protected:
-    void timerEvent(QTimerEvent *event)
-    {
-        if (event->timerId() == m_timer.timerId()) {
-            event->accept();
-
-            if (m_media->m_state == QMediaPlayer::PlayingState)
-                emit m_media->positionChanged();
-            if (m_media->m_status == QMediaPlayer::BufferingMedia || QMediaPlayer::StalledMedia)
-                emit m_media->bufferProgressChanged();
-        } else {
-            QObject::timerEvent(event);
-        }
-    }
-
-private:
-    QDeclarativeMediaBase *m_media;
-    QBasicTimer m_timer;
-};
-
-void QDeclarativeMediaBase::_q_stateChanged(QMediaPlayer::State state)
-{
-    if (state != m_state) {
-        QMediaPlayer::State oldState = m_state;
-
-        m_state = state;
-
-        if (state == QMediaPlayer::StoppedState) {
-            emit stopped();
-            emit playingChanged();
-        } else if (oldState == QMediaPlayer::StoppedState) {
-            emit started();
-            emit playingChanged();
-        } else if (oldState  == QMediaPlayer::PausedState) {
-            m_paused = false;
-
-            emit resumed();
-            emit pausedChanged();
-        }
-
-        if (state == m_state && state == QMediaPlayer::PausedState) {
-            bool wasPaused = m_paused;
-
-            m_paused = true;
-
-            emit paused();
-
-            if (!wasPaused)
-                emit pausedChanged();
-        }
-
-        if (m_state == QMediaPlayer::PlayingState
-                || m_status == QMediaPlayer::BufferingMedia
-                || m_status == QMediaPlayer::StalledMedia) {
-            m_animation->start();
-        } else {
-            m_animation->stop();
-        }
-    }
-}
-
-void QDeclarativeMediaBase::_q_mediaStatusChanged(QMediaPlayer::MediaStatus status)
-{
-    if (status != m_status) {
-        m_status = status;
-
-        switch (status) {
-        case QMediaPlayer::LoadedMedia:
-            emit loaded();
-            break;
-        case QMediaPlayer::BufferingMedia:
-            emit buffering();
-            break;
-        case QMediaPlayer::BufferedMedia:
-            emit buffered();
-            break;
-        case QMediaPlayer::StalledMedia:
-            emit stalled();
-            break;
-        case QMediaPlayer::EndOfMedia:
-            emit endOfMedia();
-            break;
-        default:
-            break;
-        }
-
-        emit statusChanged();
-
-        if (m_state == QMediaPlayer::PlayingState
-                || m_status == QMediaPlayer::BufferingMedia
-                || m_status == QMediaPlayer::StalledMedia) {
-            m_animation->start();
-        } else {
-            m_animation->stop();
-        }
-    }
-}
-
-void QDeclarativeMediaBase::_q_metaDataChanged()
-{
-    m_metaObject->metaDataChanged();
-}
-
-QDeclarativeMediaBase::QDeclarativeMediaBase()
-    : m_mediaService(0)
-    , m_playerControl(0)
-    , m_mediaObject(0)
-    , m_mediaProvider(0)
-    , m_metaDataControl(0)
-    , m_metaObject(0)
-    , m_animation(0)
-    , m_state(QMediaPlayer::StoppedState)
-    , m_status(QMediaPlayer::NoMedia)
-    , m_error(QMediaPlayer::NoError)
-    , m_paused(false)
-{
-}
-
-QDeclarativeMediaBase::~QDeclarativeMediaBase()
-{
-}
-
-void QDeclarativeMediaBase::shutdown()
-{
-    delete m_metaObject;
-    delete m_mediaObject;
-
-    if (m_mediaProvider)
-        m_mediaProvider->releaseService(m_mediaService);
-
-    delete m_animation;
-
-}
-
-void QDeclarativeMediaBase::setObject(QObject *object)
-{
-    if ((m_mediaProvider = QMediaServiceProvider::defaultServiceProvider())) {
-        if ((m_mediaService = m_mediaProvider->requestService(Q_MEDIASERVICE_MEDIAPLAYER))) {
-            m_playerControl = qobject_cast<QMediaPlayerControl *>(
-                    m_mediaService->control(QMediaPlayerControl_iid));
-            m_metaDataControl = qobject_cast<QMetaDataControl *>(
-                    m_mediaService->control(QMetaDataControl_iid));
-            m_mediaObject = new QDeclarativeMediaBaseObject(m_mediaService);
-        }
-    }
-
-    if (m_playerControl) {
-        QObject::connect(m_playerControl, SIGNAL(stateChanged(QMediaPlayer::State)),
-                object, SLOT(_q_stateChanged(QMediaPlayer::State)));
-        QObject::connect(m_playerControl, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
-                object, SLOT(_q_mediaStatusChanged(QMediaPlayer::MediaStatus)));
-        QObject::connect(m_playerControl, SIGNAL(mediaChanged(QMediaContent)),
-                object, SIGNAL(sourceChanged()));
-        QObject::connect(m_playerControl, SIGNAL(durationChanged(qint64)),
-                object, SIGNAL(durationChanged()));
-        QObject::connect(m_playerControl, SIGNAL(positionChanged(qint64)),
-                object, SIGNAL(positionChanged()));
-        QObject::connect(m_playerControl, SIGNAL(volumeChanged(int)),
-                object, SIGNAL(volumeChanged()));
-        QObject::connect(m_playerControl, SIGNAL(mutedChanged(bool)),
-                object, SIGNAL(mutedChanged()));
-        QObject::connect(m_playerControl, SIGNAL(bufferStatusChanged(int)),
-                object, SIGNAL(bufferProgressChanged()));
-        QObject::connect(m_playerControl, SIGNAL(seekableChanged(bool)),
-                object, SIGNAL(seekableChanged()));
-        QObject::connect(m_playerControl, SIGNAL(playbackRateChanged(qreal)),
-                object, SIGNAL(playbackRateChanged()));
-        QObject::connect(m_playerControl, SIGNAL(error(int,QString)),
-                object, SLOT(_q_error(int,QString)));
-
-        m_animation = new QDeclarativeMediaBaseAnimation(this);
-    } else {
-        m_error = QMediaPlayer::ServiceMissingError;
-
-        m_playerControl = new QDeclarativeMediaBasePlayerControl(object);
-    }
-
-    if (m_metaDataControl) {
-        m_metaObject = new QMetaDataControlMetaObject(m_metaDataControl, object);
-
-        QObject::connect(m_metaDataControl, SIGNAL(metaDataChanged()),
-                object, SLOT(_q_metaDataChanged()));
-    }
-}
-
-QUrl QDeclarativeMediaBase::source() const
-{
-    return m_playerControl->media().canonicalUrl();
-}
-
-void QDeclarativeMediaBase::setSource(const QUrl &url)
-{
-    if (m_error != QMediaPlayer::ServiceMissingError && m_error != QMediaPlayer::NoError) {
-        m_error = QMediaPlayer::NoError;
-        m_errorString = QString();
-
-        emit errorChanged();
-    }
-
-    m_playerControl->setMedia(QMediaContent(url), 0);
-}
-
-bool QDeclarativeMediaBase::isPlaying() const
-{
-    return m_state != QMediaPlayer::StoppedState;
-}
-
-void QDeclarativeMediaBase::setPlaying(bool playing)
-{
-    if (playing && m_state == QMediaPlayer::StoppedState) {
-        if (m_paused)
-            m_playerControl->pause();
-        else
-            m_playerControl->play();
-    } else if (!playing) {
-        m_playerControl->stop();
-    }
-}
-
-bool QDeclarativeMediaBase::isPaused() const
-{
-    return m_paused;
-}
-
-void QDeclarativeMediaBase::setPaused(bool paused)
-{
-    if (m_paused != paused) {
-        if (paused && m_state == QMediaPlayer::PlayingState) {
-            m_playerControl->pause();
-        } else if (!paused && m_state == QMediaPlayer::PausedState) {
-            m_playerControl->play();
-        } else {
-            m_paused = paused;
-
-            emit pausedChanged();
-        }
-    }
-}
-
-int QDeclarativeMediaBase::duration() const
-{
-    return m_playerControl->duration();
-}
-
-int QDeclarativeMediaBase::position() const
-{
-    return m_playerControl->position();
-
-}
-
-void QDeclarativeMediaBase::setPosition(int position)
-{
-    m_playerControl->setPosition(position);
-}
-
-qreal QDeclarativeMediaBase::volume() const
-{
-    return qreal(m_playerControl->volume()) / 100;
-}
-
-void QDeclarativeMediaBase::setVolume(qreal volume)
-{
-    m_playerControl->setVolume(qRound(volume * 100));
-}
-
-bool QDeclarativeMediaBase::isMuted() const
-{
-    return m_playerControl->isMuted();
-}
-
-void QDeclarativeMediaBase::setMuted(bool muted)
-{
-    m_playerControl->setMuted(muted);
-}
-
-qreal QDeclarativeMediaBase::bufferProgress() const
-{
-    return qreal(m_playerControl->bufferStatus()) / 100;
-}
-
-bool QDeclarativeMediaBase::isSeekable() const
-{
-    return m_playerControl->isSeekable();
-}
-
-qreal QDeclarativeMediaBase::playbackRate() const
-{
-    return m_playerControl->playbackRate();
-}
-
-void QDeclarativeMediaBase::setPlaybackRate(qreal rate)
-{
-    m_playerControl->setPlaybackRate(rate);
-}
-
-QString QDeclarativeMediaBase::errorString() const
-{
-    return m_errorString;
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/qml/qdeclarativemediabase_p.h b/src/multimedia/qml/qdeclarativemediabase_p.h
deleted file mode 100644
index 2fc48db..0000000
--- a/src/multimedia/qml/qdeclarativemediabase_p.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEMEDIABASE_P_H
-#define QDECLARATIVEMEDIABASE_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qbasictimer.h>
-#include <QtMultimedia/qmediaplayer.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMediaPlayerControl;
-class QMediaService;
-class QMediaServiceProvider;
-class QMetaDataControl;
-class QMetaDataControlMetaObject;
-class QDeclarativeMediaBaseAnimation;
-
-class Q_AUTOTEST_EXPORT QDeclarativeMediaBase
-{
-public:
-    QDeclarativeMediaBase();
-    virtual ~QDeclarativeMediaBase();
-
-    QUrl source() const;
-    void setSource(const QUrl &url);
-
-    bool isPlaying() const;
-    void setPlaying(bool playing);
-
-    bool isPaused() const;
-    void setPaused(bool paused);
-
-    int duration() const;
-
-    int position() const;
-    void setPosition(int position);
-
-    qreal volume() const;
-    void setVolume(qreal volume);
-
-    bool isMuted() const;
-    void setMuted(bool muted);
-
-    qreal bufferProgress() const;
-
-    bool isSeekable() const;
-
-    qreal playbackRate() const;
-    void setPlaybackRate(qreal rate);
-
-    QString errorString() const;
-
-    void _q_stateChanged(QMediaPlayer::State state);
-    void _q_mediaStatusChanged(QMediaPlayer::MediaStatus status);
-
-    void _q_metaDataChanged();
-
-protected:
-    void shutdown();
-
-    void setObject(QObject *object);
-
-    virtual void sourceChanged() = 0;
-
-    virtual void playingChanged() = 0;
-    virtual void pausedChanged() = 0;
-
-    virtual void started() = 0;
-    virtual void resumed() = 0;
-    virtual void paused() = 0;
-    virtual void stopped() = 0;
-
-    virtual void statusChanged() = 0;
-
-    virtual void loaded() = 0;
-    virtual void buffering() = 0;
-    virtual void stalled() = 0;
-    virtual void buffered() = 0;
-    virtual void endOfMedia() = 0;
-
-    virtual void durationChanged() = 0;
-    virtual void positionChanged() = 0;
-
-    virtual void volumeChanged() = 0;
-    virtual void mutedChanged() = 0;
-
-    virtual void bufferProgressChanged() = 0;
-
-    virtual void seekableChanged() = 0;
-    virtual void playbackRateChanged() = 0;
-
-    virtual void errorChanged() = 0;
-
-    QMediaService *m_mediaService;
-    QMediaPlayerControl *m_playerControl;
-
-    QMediaObject *m_mediaObject;
-    QMediaServiceProvider *m_mediaProvider;
-    QMetaDataControl *m_metaDataControl;
-    QMetaDataControlMetaObject *m_metaObject;
-    QDeclarativeMediaBaseAnimation *m_animation;
-
-    QMediaPlayer::State m_state;
-    QMediaPlayer::MediaStatus m_status;
-    QMediaPlayer::Error m_error;
-    bool m_paused;
-    QString m_errorString;
-
-    friend class QDeclarativeMediaBaseAnimation;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/qml/qdeclarativevideo.cpp b/src/multimedia/qml/qdeclarativevideo.cpp
deleted file mode 100644
index 7f62075..0000000
--- a/src/multimedia/qml/qdeclarativevideo.cpp
+++ /dev/null
@@ -1,945 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativevideo_p.h"
-
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/private/qpaintervideosurface_p.h>
-#include <QtMultimedia/qvideooutputcontrol.h>
-#include <QtMultimedia/qvideorenderercontrol.h>
-
-
-QT_BEGIN_NAMESPACE
-
-
-void QDeclarativeVideo::_q_nativeSizeChanged(const QSizeF &size)
-{
-    setImplicitWidth(size.width());
-    setImplicitHeight(size.height());
-}
-
-void QDeclarativeVideo::_q_error(int errorCode, const QString &errorString)
-{
-    m_error = QMediaPlayer::Error(errorCode);
-    m_errorString = errorString;
-
-    emit error(Error(errorCode), errorString);
-    emit errorChanged();
-}
-
-
-/*!
-    \qmlclass Video QDeclarativeVideo
-    \since 4.7
-    \brief The Video element allows you to add videos to a scene.
-    \inherits Item
-
-    \qml
-    Video { source: "video/movie.mpg" }
-    \endqml
-
-    The video item supports untransformed, stretched, and uniformly scaled video presentation.
-    For a description of stretched uniformly scaled presentation, see the \l fillMode property
-    description.
-
-    The video item is only visible when the \l hasVideo property is true and the video is playing.
-
-    \sa Audio
-*/
-
-/*!
-    \internal
-    \class QDeclarativeVideo
-    \brief The QDeclarativeVideo class provides a video item that you can add to a QDeclarativeView.
-*/
-
-QDeclarativeVideo::QDeclarativeVideo(QDeclarativeItem *parent)
-    : QDeclarativeItem(parent)
-    , m_graphicsItem(0)
-
-{
-    m_graphicsItem = new QGraphicsVideoItem(this);
-    connect(m_graphicsItem, SIGNAL(nativeSizeChanged(QSizeF)),
-            this, SLOT(_q_nativeSizeChanged(QSizeF)));
-
-    setObject(this);
-
-    if (m_mediaService) {
-        connect(m_playerControl, SIGNAL(audioAvailableChanged(bool)),
-                this, SIGNAL(hasAudioChanged()));
-        connect(m_playerControl, SIGNAL(videoAvailableChanged(bool)),
-                this, SIGNAL(hasVideoChanged()));
-
-        m_graphicsItem->setMediaObject(m_mediaObject);
-    }
-}
-
-QDeclarativeVideo::~QDeclarativeVideo()
-{
-    shutdown();
-
-    delete m_graphicsItem;
-}
-
-/*!
-    \qmlproperty url Video::source
-
-    This property holds the source URL of the media.
-*/
-
-/*!
-    \qmlproperty bool Video::playing
-
-    This property holds whether the media is playing.
-
-    Defaults to false, and can be set to true to start playback.
-*/
-
-/*!
-    \qmlproperty bool Video::paused
-
-    This property holds whether the media is paused.
-
-    Defaults to false, and can be set to true to pause playback.
-*/
-
-/*!
-    \qmlsignal Video::onStarted()
-
-    This handler is called when playback is started.
-*/
-
-/*!
-    \qmlsignal Video::onResumed()
-
-    This handler is called when playback is resumed from the paused state.
-*/
-
-/*!
-    \qmlsignal Video::onPaused()
-
-    This handler is called when playback is paused.
-*/
-
-/*!
-    \qmlsignal Video::onStopped()
-
-    This handler is called when playback is stopped.
-*/
-
-/*!
-    \qmlproperty enum Video::status
-
-    This property holds the status of media loading. It can be one of:
-
-    \list
-    \o NoMedia - no media has been set.
-    \o Loading - the media is currently being loaded.
-    \o Loaded - the media has been loaded.
-    \o Buffering - the media is buffering data.
-    \o Stalled - playback has been interrupted while the media is buffering data.
-    \o Buffered - the media has buffered data.
-    \o EndOfMedia - the media has played to the end.
-    \o InvalidMedia - the media cannot be played.
-    \o UnknownStatus - the status of the media is cannot be determined.
-    \endlist
-*/
-
-QDeclarativeVideo::Status QDeclarativeVideo::status() const
-{
-    return Status(m_status);
-}
-
-/*!
-    \qmlsignal Video::onLoaded()
-
-    This handler is called when the media source has been loaded.
-*/
-
-/*!
-    \qmlsignal Video::onBuffering()
-
-    This handler is called when the media starts buffering.
-*/
-
-/*!
-    \qmlsignal Video::onStalled()
-
-    This handler is called when playback has stalled while the media buffers.
-*/
-
-/*!
-    \qmlsignal Video::onBuffered()
-
-    This handler is called when the media has finished buffering.
-*/
-
-/*!
-    \qmlsignal Video::onEndOfMedia()
-
-    This handler is called when playback stops because end of the media has been reached.
-*/
-
-/*!
-    \qmlproperty int Video::duration
-
-    This property holds the duration of the media in milliseconds.
-
-    If the media doesn't have a fixed duration (a live stream for example) this will be 0.
-*/
-
-/*!
-    \qmlproperty int Video::position
-
-    This property holds the current playback position in milliseconds.
-*/
-
-/*!
-    \qmlproperty qreal Video::volume
-
-    This property holds the volume of the audio output, from 0.0 (silent) to 1.0 (maximum volume).
-*/
-
-/*!
-    \qmlproperty bool Video::muted
-
-    This property holds whether the audio output is muted.
-*/
-
-/*!
-    \qmlproperty bool Video::hasAudio
-
-    This property holds whether the media contains audio.
-*/
-
-bool QDeclarativeVideo::hasAudio() const
-{
-    return m_playerControl->isAudioAvailable();
-}
-
-/*!
-    \qmlproperty bool Video::hasVideo
-
-    This property holds whether the media contains video.
-*/
-
-bool QDeclarativeVideo::hasVideo() const
-{
-    return m_playerControl->isVideoAvailable();
-}
-
-/*!
-    \qmlproperty qreal Video::bufferProgress
-
-    This property holds how much of the data buffer is currently filled, from 0.0 (empty) to 1.0
-    (full).
-*/
-
-/*!
-    \qmlproperty bool Video::seekable
-
-    This property holds whether position of the video can be changed.
-*/
-
-/*!
-    \qmlproperty qreal Video::playbackRate
-
-    This property holds the rate at which video is played at as a multiple of the normal rate.
-*/
-
-/*!
-    \qmlproperty enum Video::error
-
-    This property holds the error state of the video.  It can be one of:
-
-    \list
-    \o NoError - there is no current error.
-    \o ResourceError - the video cannot be played due to a problem allocating resources.
-    \o FormatError - the video format is not supported.
-    \o NetworkError - the video cannot be played due to network issues.
-    \o AccessDenied - the video cannot be played due to insufficient permissions.
-    \o ServiceMissing -  the video cannot be played because the media service could not be
-    instantiated.
-    \endlist
-*/
-
-
-QDeclarativeVideo::Error QDeclarativeVideo::error() const
-{
-    return Error(m_error);
-}
-
-/*!
-    \qmlproperty string Video::errorString
-
-    This property holds a string describing the current error condition in more detail.
-*/
-
-/*!
-    \qmlsignal Video::onError(error, errorString)
-
-    This handler is called when an \l {Error}{error} has occurred.  The errorString parameter
-    may contain more detailed information about the error.
-*/
-
-/*!
-    \qmlproperty enum Video::fillMode
-
-    Set this property to define how the video is scaled to fit the target area.
-
-    \list
-    \o Stretch - the video is scaled to fit.
-    \o PreserveAspectFit - the video is scaled uniformly to fit without cropping
-    \o PreserveAspectCrop - the video is scaled uniformly to fill, cropping if necessary
-    \endlist
-
-    The default fill mode is PreserveAspectFit.
-*/
-
-QDeclarativeVideo::FillMode QDeclarativeVideo::fillMode() const
-{
-    return FillMode(m_graphicsItem->aspectRatioMode());
-}
-
-void QDeclarativeVideo::setFillMode(FillMode mode)
-{
-    m_graphicsItem->setAspectRatioMode(Qt::AspectRatioMode(mode));
-}
-
-/*!
-    \qmlmethod Video::play()
-
-    Starts playback of the media.
-
-    Sets the \l playing property to true, and the \l paused property to false.
-*/
-
-void QDeclarativeVideo::play()
-{
-    m_playerControl->play();
-
-    if (m_paused) {
-        m_paused = false;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlmethod Video::pause()
-
-    Pauses playback of the media.
-
-    Sets the \l playing and \l paused properties to true.
-*/
-
-void QDeclarativeVideo::pause()
-{
-    m_playerControl->pause();
-
-    if (!m_paused && m_state == QMediaPlayer::PausedState) {
-        m_paused = true;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlmethod Video::stop()
-
-    Stops playback of the media.
-
-    Sets the \l playing and \l paused properties to false.
-*/
-
-void QDeclarativeVideo::stop()
-{
-    m_playerControl->stop();
-
-    if (m_paused) {
-        m_paused = false;
-        emit pausedChanged();
-    }
-}
-
-void QDeclarativeVideo::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *)
-{
-}
-
-void QDeclarativeVideo::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
-    m_graphicsItem->setSize(newGeometry.size());
-
-    QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-}
-
-QT_END_NAMESPACE
-
-// ***************************************
-// Documentation for meta-data properties.
-// ***************************************
-
-/*!
-    \qmlproperty variant Video::title
-
-    This property holds the tile of the media.
-
-    \sa {QtMultimedia::Title}
-*/
-
-/*!
-    \qmlproperty variant Video::subTitle
-
-    This property holds the sub-title of the media.
-
-    \sa {QtMultimedia::SubTitle}
-*/
-
-/*!
-    \qmlproperty variant Video::author
-
-    This property holds the author of the media.
-
-    \sa {QtMultimedia::Author}
-*/
-
-/*!
-    \qmlproperty variant Video::comment
-
-    This property holds a user comment about the media.
-
-    \sa {QtMultimedia::Comment}
-*/
-
-/*!
-    \qmlproperty variant Video::description
-
-    This property holds a description of the media.
-
-    \sa {QtMultimedia::Description}
-*/
-
-/*!
-    \qmlproperty variant Video::category
-
-    This property holds the category of the media
-
-    \sa {QtMultimedia::Category}
-*/
-
-/*!
-    \qmlproperty variant Video::genre
-
-    This property holds the genre of the media.
-
-    \sa {QtMultimedia::Genre}
-*/
-
-/*!
-    \qmlproperty variant Video::year
-
-    This property holds the year of release of the media.
-
-    \sa {QtMultimedia::Year}
-*/
-
-/*!
-    \qmlproperty variant Video::date
-
-    This property holds the date of the media.
-
-    \sa {QtMultimedia::Date}
-*/
-
-/*!
-    \qmlproperty variant Video::userRating
-
-    This property holds a user rating of the media in the range of 0 to 100.
-
-    \sa {QtMultimedia::UserRating}
-*/
-
-/*!
-    \qmlproperty variant Video::keywords
-
-    This property holds a list of keywords describing the media.
-
-    \sa {QtMultimedia::Keywords}
-*/
-
-/*!
-    \qmlproperty variant Video::language
-
-    This property holds the language of the media, as an ISO 639-2 code.
-
-    \sa {QtMultimedia::Language}
-*/
-
-/*!
-    \qmlproperty variant Video::publisher
-
-    This property holds the publisher of the media.
-
-    \sa {QtMultimedia::Publisher}
-*/
-
-/*!
-    \qmlproperty variant Video::copyright
-
-    This property holds the media's copyright notice.
-
-    \sa {QtMultimedia::Copyright}
-*/
-
-/*!
-    \qmlproperty variant Video::parentalRating
-
-    This property holds the parental rating of the media.
-
-    \sa {QtMultimedia::ParentalRating}
-*/
-
-/*!
-    \qmlproperty variant Video::ratingOrganisation
-
-    This property holds the name of the rating organisation responsible for the
-    parental rating of the media.
-
-    \sa {QtMultimedia::RatingOrganisation}
-*/
-
-/*!
-    \qmlproperty variant Video::size
-
-    This property property holds the size of the media in bytes.
-
-    \sa {QtMultimedia::Size}
-*/
-
-/*!
-    \qmlproperty variant Video::mediaType
-
-    This property holds the type of the media.
-
-    \sa {QtMultimedia::MediaType}
-*/
-
-/*!
-    \qmlproperty variant Video::audioBitRate
-
-    This property holds the bit rate of the media's audio stream ni bits per
-    second.
-
-    \sa {QtMultimedia::AudioBitRate}
-*/
-
-/*!
-    \qmlproperty variant Video::audioCodec
-
-    This property holds the encoding of the media audio stream.
-
-    \sa {QtMultimedia::AudioCodec}
-*/
-
-/*!
-    \qmlproperty variant Video::averageLevel
-
-    This property holds the average volume level of the media.
-
-    \sa {QtMultimedia::AverageLevel}
-*/
-
-/*!
-    \qmlproperty variant Video::channelCount
-
-    This property holds the number of channels in the media's audio stream.
-
-    \sa {QtMultimedia::ChannelCount}
-*/
-
-/*!
-    \qmlproperty variant Video::peakValue
-
-    This property holds the peak volume of media's audio stream.
-
-    \sa {QtMultimedia::PeakValue}
-*/
-
-/*!
-    \qmlproperty variant Video::sampleRate
-
-    This property holds the sample rate of the media's audio stream in hertz.
-
-    \sa {QtMultimedia::SampleRate}
-*/
-
-/*!
-    \qmlproperty variant Video::albumTitle
-
-    This property holds the title of the album the media belongs to.
-
-    \sa {QtMultimedia::AlbumTitle}
-*/
-
-/*!
-    \qmlproperty variant Video::albumArtist
-
-    This property holds the name of the principal artist of the album the media
-    belongs to.
-
-    \sa {QtMultimedia::AlbumArtist}
-*/
-
-/*!
-    \qmlproperty variant Video::contributingArtist
-
-    This property holds the names of artists contributing to the media.
-
-    \sa {QtMultimedia::ContributingArtist}
-*/
-
-/*!
-    \qmlproperty variant Video::composer
-
-    This property holds the composer of the media.
-
-    \sa {QtMultimedia::Composer}
-*/
-
-/*!
-    \qmlproperty variant Video::conductor
-
-    This property holds the conductor of the media.
-
-    \sa {QtMultimedia::Conductor}
-*/
-
-/*!
-    \qmlproperty variant Video::lyrics
-
-    This property holds the lyrics to the media.
-
-    \sa {QtMultimedia::Lyrics}
-*/
-
-/*!
-    \qmlproperty variant Video::mood
-
-    This property holds the mood of the media.
-
-    \sa {QtMultimedia::Mood}
-*/
-
-/*!
-    \qmlproperty variant Video::trackNumber
-
-    This property holds the track number of the media.
-
-    \sa {QtMultimedia::TrackNumber}
-*/
-
-/*!
-    \qmlproperty variant Video::trackCount
-
-    This property holds the number of track on the album containing the media.
-
-    \sa {QtMultimedia::TrackNumber}
-*/
-
-/*!
-    \qmlproperty variant Video::coverArtUrlSmall
-
-    This property holds the URL of a small cover art image.
-
-    \sa {QtMultimedia::CoverArtUrlSmall}
-*/
-
-/*!
-    \qmlproperty variant Video::coverArtUrlLarge
-
-    This property holds the URL of a large cover art image.
-
-    \sa {QtMultimedia::CoverArtUrlLarge}
-*/
-
-/*!
-    \qmlproperty variant Video::resolution
-
-    This property holds the dimension of an image or video.
-
-    \sa {QtMultimedia::Resolution}
-*/
-
-/*!
-    \qmlproperty variant Video::pixelAspectRatio
-
-    This property holds the pixel aspect ratio of an image or video.
-
-    \sa {QtMultimedia::PixelAspectRatio}
-*/
-
-/*!
-    \qmlproperty variant Video::videoFrameRate
-
-    This property holds the frame rate of the media's video stream.
-
-    \sa {QtMultimedia::VideoFrameRate}
-*/
-
-/*!
-    \qmlproperty variant Video::videoBitRate
-
-    This property holds the bit rate of the media's video stream in bits per
-    second.
-
-    \sa {QtMultimedia::VideoBitRate}
-*/
-
-/*!
-    \qmlproperty variant Video::videoCodec
-
-    This property holds the encoding of the media's video stream.
-
-    \sa {QtMultimedia::VideoCodec}
-*/
-
-/*!
-    \qmlproperty variant Video::posterUrl
-
-    This property holds the URL of a poster image.
-
-    \sa {QtMultimedia::PosterUrl}
-*/
-
-/*!
-    \qmlproperty variant Video::chapterNumber
-
-    This property holds the chapter number of the media.
-
-    \sa {QtMultimedia::ChapterNumber}
-*/
-
-/*!
-    \qmlproperty variant Video::director
-
-    This property holds the director of the media.
-
-    \sa {QtMultimedia::Director}
-*/
-
-/*!
-    \qmlproperty variant Video::leadPerformer
-
-    This property holds the lead performer in the media.
-
-    \sa {QtMultimedia::LeadPerformer}
-*/
-
-/*!
-    \qmlproperty variant Video::writer
-
-    This property holds the writer of the media.
-
-    \sa {QtMultimedia::Writer}
-*/
-
-// The remaining properties are related to photos, and are technically
-// available but will certainly never have values.
-#ifndef Q_QDOC
-
-/*!
-    \qmlproperty variant Video::cameraManufacturer
-
-    \sa {QtMultimedia::CameraManufacturer}
-*/
-
-/*!
-    \qmlproperty variant Video::cameraModel
-
-    \sa {QtMultimedia::CameraModel}
-*/
-
-/*!
-    \qmlproperty variant Video::event
-
-    \sa {QtMultimedia::Event}
-*/
-
-/*!
-    \qmlproperty variant Video::subject
-
-    \sa {QtMultimedia::Subject}
-*/
-
-/*!
-    \qmlproperty variant Video::orientation
-
-    \sa {QtMultimedia::Orientation}
-*/
-
-/*!
-    \qmlproperty variant Video::exposureTime
-
-    \sa {QtMultimedia::ExposureTime}
-*/
-
-/*!
-    \qmlproperty variant Video::fNumber
-
-    \sa {QtMultimedia::FNumber}
-*/
-
-/*!
-    \qmlproperty variant Video::exposureProgram
-
-    \sa {QtMultimedia::ExposureProgram}
-*/
-
-/*!
-    \qmlproperty variant Video::isoSpeedRatings
-
-    \sa {QtMultimedia::ISOSpeedRatings}
-*/
-
-/*!
-    \qmlproperty variant Video::exposureBiasValue
-
-    \sa {QtMultimedia::ExposureBiasValue}
-*/
-
-/*!
-    \qmlproperty variant Video::dateTimeDigitized
-
-    \sa {QtMultimedia::DateTimeDigitized}
-*/
-
-/*!
-    \qmlproperty variant Video::subjectDistance
-
-    \sa {QtMultimedia::SubjectDistance}
-*/
-
-/*!
-    \qmlproperty variant Video::meteringMode
-
-    \sa {QtMultimedia::MeteringMode}
-*/
-
-/*!
-    \qmlproperty variant Video::lightSource
-
-    \sa {QtMultimedia::LightSource}
-*/
-
-/*!
-    \qmlproperty variant Video::flash
-
-    \sa {QtMultimedia::Flash}
-*/
-
-/*!
-    \qmlproperty variant Video::focalLength
-
-    \sa {QtMultimedia::FocalLength}
-*/
-
-/*!
-    \qmlproperty variant Video::exposureMode
-
-    \sa {QtMultimedia::ExposureMode}
-*/
-
-/*!
-    \qmlproperty variant Video::whiteBalance
-
-    \sa {QtMultimedia::WhiteBalance}
-*/
-
-/*!
-    \qmlproperty variant Video::DigitalZoomRatio
-
-    \sa {QtMultimedia::DigitalZoomRatio}
-*/
-
-/*!
-    \qmlproperty variant Video::focalLengthIn35mmFilm
-
-    \sa {QtMultimedia::FocalLengthIn35mmFile}
-*/
-
-/*!
-    \qmlproperty variant Video::sceneCaptureType
-
-    \sa {QtMultimedia::SceneCaptureType}
-*/
-
-/*!
-    \qmlproperty variant Video::gainControl
-
-    \sa {QtMultimedia::GainControl}
-*/
-
-/*!
-    \qmlproperty variant Video::contrast
-
-    \sa {QtMultimedia::contrast}
-*/
-
-/*!
-    \qmlproperty variant Video::saturation
-
-    \sa {QtMultimedia::Saturation}
-*/
-
-/*!
-    \qmlproperty variant Video::sharpness
-
-    \sa {QtMultimedia::Sharpness}
-*/
-
-/*!
-    \qmlproperty variant Video::deviceSettingDescription
-
-    \sa {QtMultimedia::DeviceSettingDescription}
-*/
-
-#endif
-
-#include "moc_qdeclarativevideo_p.cpp"
diff --git a/src/multimedia/qml/qdeclarativevideo_p.h b/src/multimedia/qml/qdeclarativevideo_p.h
deleted file mode 100644
index d5ebde1..0000000
--- a/src/multimedia/qml/qdeclarativevideo_p.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEVIDEO_H
-#define QDECLARATIVEVIDEO_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/private/qdeclarativemediabase_p.h>
-
-#include <QtMultimedia/qgraphicsvideoitem.h>
-
-#include <QtCore/qbasictimer.h>
-#include <QtDeclarative/qdeclarativeitem.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QTimerEvent;
-class QVideoSurfaceFormat;
-
-
-class Q_AUTOTEST_EXPORT QDeclarativeVideo : public QDeclarativeItem, public QDeclarativeMediaBase
-{
-    Q_OBJECT
-    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
-    Q_PROPERTY(bool playing READ isPlaying WRITE setPlaying NOTIFY playingChanged)
-    Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
-    Q_PROPERTY(Status status READ status NOTIFY statusChanged)
-    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
-    Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
-    Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged)
-    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
-    Q_PROPERTY(bool hasAudio READ hasAudio NOTIFY hasAudioChanged)
-    Q_PROPERTY(bool hasVideo READ hasVideo NOTIFY hasVideoChanged)
-    Q_PROPERTY(int bufferProgress READ bufferProgress NOTIFY bufferProgressChanged)
-    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
-    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
-    Q_PROPERTY(Error error READ error NOTIFY errorChanged)
-    Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
-    Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode)
-    Q_ENUMS(FillMode)
-    Q_ENUMS(Status)
-    Q_ENUMS(Error)
-public:
-    enum FillMode
-    {
-        Stretch            = Qt::IgnoreAspectRatio,
-        PreserveAspectFit  = Qt::KeepAspectRatio,
-        PreserveAspectCrop = Qt::KeepAspectRatioByExpanding
-    };
-
-    enum Status
-    {
-        UnknownStatus = QMediaPlayer::UnknownMediaStatus,
-        NoMedia       = QMediaPlayer::NoMedia,
-        Loading       = QMediaPlayer::LoadingMedia,
-        Loaded        = QMediaPlayer::LoadedMedia,
-        Stalled       = QMediaPlayer::StalledMedia,
-        Buffering     = QMediaPlayer::BufferingMedia,
-        Buffered      = QMediaPlayer::BufferedMedia,
-        EndOfMedia    = QMediaPlayer::EndOfMedia,
-        InvalidMedia  = QMediaPlayer::InvalidMedia
-    };
-
-    enum Error
-    {
-        NoError        = QMediaPlayer::NoError,
-        ResourceError  = QMediaPlayer::ResourceError,
-        FormatError    = QMediaPlayer::FormatError,
-        NetworkError   = QMediaPlayer::NetworkError,
-        AccessDenied   = QMediaPlayer::AccessDeniedError,
-        ServiceMissing = QMediaPlayer::ServiceMissingError
-    };
-
-    QDeclarativeVideo(QDeclarativeItem *parent = 0);
-    ~QDeclarativeVideo();
-
-    bool hasAudio() const;
-    bool hasVideo() const;
-
-    FillMode fillMode() const;
-    void setFillMode(FillMode mode);
-
-    Status status() const;
-    Error error() const;
-
-    void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
-
-public Q_SLOTS:
-    void play();
-    void pause();
-    void stop();
-
-Q_SIGNALS:
-    void sourceChanged();
-
-    void playingChanged();
-    void pausedChanged();
-
-    void started();
-    void resumed();
-    void paused();
-    void stopped();
-
-    void statusChanged();
-
-    void loaded();
-    void buffering();
-    void stalled();
-    void buffered();
-    void endOfMedia();
-
-    void durationChanged();
-    void positionChanged();
-
-    void volumeChanged();
-    void mutedChanged();
-    void hasAudioChanged();
-    void hasVideoChanged();
-
-    void bufferProgressChanged();
-
-    void seekableChanged();
-    void playbackRateChanged();
-
-    void errorChanged();
-    void error(QDeclarativeVideo::Error error, const QString &errorString);
-
-protected:
-    void geometryChanged(const QRectF &geometry, const QRectF &);
-
-private Q_SLOTS:
-    void _q_nativeSizeChanged(const QSizeF &size);
-    void _q_error(int, const QString &);
-
-private:
-    Q_DISABLE_COPY(QDeclarativeVideo)
-
-    QGraphicsVideoItem *m_graphicsItem;
-
-    Q_PRIVATE_SLOT(mediaBase(), void _q_stateChanged(QMediaPlayer::State))
-    Q_PRIVATE_SLOT(mediaBase(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
-    Q_PRIVATE_SLOT(mediaBase(), void _q_metaDataChanged())
-
-    inline QDeclarativeMediaBase *mediaBase() { return this; }
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeVideo))
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/qml/qmetadatacontrolmetaobject.cpp b/src/multimedia/qml/qmetadatacontrolmetaobject.cpp
deleted file mode 100644
index 47b6382..0000000
--- a/src/multimedia/qml/qmetadatacontrolmetaobject.cpp
+++ /dev/null
@@ -1,362 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/private/qmetadatacontrolmetaobject_p.h>
-#include <QtMultimedia/qmetadatacontrol.h>
-
-
-QT_BEGIN_NAMESPACE
-
-// copied from qmetaobject.cpp
-// do not touch without touching the moc as well
-enum PropertyFlags  {
-    Invalid = 0x00000000,
-    Readable = 0x00000001,
-    Writable = 0x00000002,
-    Resettable = 0x00000004,
-    EnumOrFlag = 0x00000008,
-    StdCppSet = 0x00000100,
-//    Override = 0x00000200,
-    Designable = 0x00001000,
-    ResolveDesignable = 0x00002000,
-    Scriptable = 0x00004000,
-    ResolveScriptable = 0x00008000,
-    Stored = 0x00010000,
-    ResolveStored = 0x00020000,
-    Editable = 0x00040000,
-    ResolveEditable = 0x00080000,
-    User = 0x00100000,
-    ResolveUser = 0x00200000,
-    Notify = 0x00400000,
-    Dynamic = 0x00800000
-};
-
-enum MethodFlags  {
-    AccessPrivate = 0x00,
-    AccessProtected = 0x01,
-    AccessPublic = 0x02,
-    AccessMask = 0x03, //mask
-
-    MethodMethod = 0x00,
-    MethodSignal = 0x04,
-    MethodSlot = 0x08,
-    MethodConstructor = 0x0c,
-    MethodTypeMask = 0x0c,
-
-    MethodCompatibility = 0x10,
-    MethodCloned = 0x20,
-    MethodScriptable = 0x40
-};
-
-struct QMetaObjectPrivate
-{
-    int revision;
-    int className;
-    int classInfoCount, classInfoData;
-    int methodCount, methodData;
-    int propertyCount, propertyData;
-    int enumeratorCount, enumeratorData;
-    int constructorCount, constructorData;
-    int flags;
-};
-
-static inline const QMetaObjectPrivate *priv(const uint* m_data)
-{ return reinterpret_cast<const QMetaObjectPrivate*>(m_data); }
-// end of copied lines from qmetaobject.cpp
-
-namespace
-{
-    struct MetaDataKey
-    {
-        QtMultimedia::MetaData key;
-        const char *name;
-    };
-
-    const MetaDataKey qt_metaDataKeys[] =
-    {
-        { QtMultimedia::Title, "title" },
-        { QtMultimedia::SubTitle, "subTitle" },
-        { QtMultimedia::Author, "author" },
-        { QtMultimedia::Comment, "comment" },
-        { QtMultimedia::Description, "description" },
-        { QtMultimedia::Category, "category" },
-        { QtMultimedia::Genre, "genre" },
-        { QtMultimedia::Year, "year" },
-        { QtMultimedia::Date, "date" },
-        { QtMultimedia::UserRating, "userRating" },
-        { QtMultimedia::Keywords, "keywords" },
-        { QtMultimedia::Language, "language" },
-        { QtMultimedia::Publisher, "publisher" },
-        { QtMultimedia::Copyright, "copyright" },
-        { QtMultimedia::ParentalRating, "parentalRating" },
-        { QtMultimedia::RatingOrganisation, "ratingOrganisation" },
-
-        // Media
-        { QtMultimedia::Size, "size" },
-        { QtMultimedia::MediaType, "mediaType" },
-//        { QtMultimedia::Duration, "duration" },
-
-        // Audio
-        { QtMultimedia::AudioBitRate, "audioBitRate" },
-        { QtMultimedia::AudioCodec, "audioCodec" },
-        { QtMultimedia::AverageLevel, "averageLevel" },
-        { QtMultimedia::ChannelCount, "channelCount" },
-        { QtMultimedia::PeakValue, "peakValue" },
-        { QtMultimedia::SampleRate, "sampleRate" },
-
-        // Music
-        { QtMultimedia::AlbumTitle, "albumTitle" },
-        { QtMultimedia::AlbumArtist, "albumArtist" },
-        { QtMultimedia::ContributingArtist, "contributingArtist" },
-        { QtMultimedia::Composer, "composer" },
-        { QtMultimedia::Conductor, "conductor" },
-        { QtMultimedia::Lyrics, "lyrics" },
-        { QtMultimedia::Mood, "mood" },
-        { QtMultimedia::TrackNumber, "trackNumber" },
-        { QtMultimedia::TrackCount, "trackCount" },
-
-        { QtMultimedia::CoverArtUrlSmall, "coverArtUrlSmall" },
-        { QtMultimedia::CoverArtUrlLarge, "coverArtUrlLarge" },
-
-        // Image/Video
-        { QtMultimedia::Resolution, "resolution" },
-        { QtMultimedia::PixelAspectRatio, "pixelAspectRatio" },
-
-        // Video
-        { QtMultimedia::VideoFrameRate, "videoFrameRate" },
-        { QtMultimedia::VideoBitRate, "videoBitRate" },
-        { QtMultimedia::VideoCodec, "videoCodec" },
-
-        { QtMultimedia::PosterUrl, "posterUrl" },
-
-        // Movie
-        { QtMultimedia::ChapterNumber, "chapterNumber" },
-        { QtMultimedia::Director, "director" },
-        { QtMultimedia::LeadPerformer, "leadPerformer" },
-        { QtMultimedia::Writer, "writer" },
-
-        // Photos
-        { QtMultimedia::CameraManufacturer, "cameraManufacturer" },
-        { QtMultimedia::CameraModel, "cameraModel" },
-        { QtMultimedia::Event, "event" },
-        { QtMultimedia::Subject, "subject" },
-        { QtMultimedia::Orientation, "orientation" },
-        { QtMultimedia::ExposureTime, "exposureTime" },
-        { QtMultimedia::FNumber, "fNumber" },
-        { QtMultimedia::ExposureProgram, "exposureProgram" },
-        { QtMultimedia::ISOSpeedRatings, "isoSpeedRatings" },
-        { QtMultimedia::ExposureBiasValue, "exposureBiasValue" },
-        { QtMultimedia::DateTimeOriginal, "dateTimeOriginal" },
-        { QtMultimedia::DateTimeDigitized, "dateTimeDigitized" },
-        { QtMultimedia::SubjectDistance, "subjectDistance" },
-        { QtMultimedia::MeteringMode, "meteringMode" },
-        { QtMultimedia::LightSource, "lightSource" },
-        { QtMultimedia::Flash, "flash" },
-        { QtMultimedia::FocalLength, "focalLength" },
-        { QtMultimedia::ExposureMode, "exposureMode" },
-        { QtMultimedia::WhiteBalance, "whiteBalance" },
-        { QtMultimedia::DigitalZoomRatio, "digitalZoomRatio" },
-        { QtMultimedia::FocalLengthIn35mmFilm, "focalLengthIn35mmFilm" },
-        { QtMultimedia::SceneCaptureType, "sceneCaptureType" },
-        { QtMultimedia::GainControl, "gainControl" },
-        { QtMultimedia::Contrast, "contrast" },
-        { QtMultimedia::Saturation, "saturation" },
-        { QtMultimedia::Sharpness, "sharpness" },
-        { QtMultimedia::DeviceSettingDescription, "deviceSettingDescription" }
-    };
-
-    class QMetaDataControlObject : public QObject
-    {
-    public:
-        inline QObjectData *data() { return d_ptr.data(); }
-    };
-}
-
-QMetaDataControlMetaObject::QMetaDataControlMetaObject(QMetaDataControl *control, QObject *object)
-    : m_control(control)
-    , m_object(object)
-    , m_string(0)
-    , m_data(0)
-    , m_propertyOffset(0)
-    , m_signalOffset(0)
-{
-    const QMetaObject *superClass = m_object->metaObject();
-
-    const int propertyCount =  sizeof(qt_metaDataKeys) / sizeof(MetaDataKey);
-    const int dataSize = sizeof(uint)
-            * (13                   // QMetaObjectPrivate members.
-            + 5                     // 5 members per signal.
-            + 4 * propertyCount     // 3 members per property + 1 notify signal per property.
-            + 1);                   // Terminating value.
-
-    m_data = reinterpret_cast<uint *>(qMalloc(dataSize));
-
-    QMetaObjectPrivate *pMeta = reinterpret_cast<QMetaObjectPrivate *>(m_data);
-
-    pMeta->revision = 3;
-    pMeta->className = 0;
-    pMeta->classInfoCount = 0;
-    pMeta->classInfoData = 0;
-    pMeta->methodCount = 1;
-    pMeta->methodData = 13;
-    pMeta->propertyCount = propertyCount;
-    pMeta->propertyData = 18;
-    pMeta->enumeratorCount = 0;
-    pMeta->enumeratorData = 0;
-    pMeta->constructorCount = 0;
-    pMeta->constructorData = 0;
-    pMeta->flags = 0x01;    // Dynamic meta object flag.
-
-    const int classNameSize = qstrlen(superClass->className()) + 1;
-
-    int stringIndex = classNameSize + 1;
-
-    // __metaDataChanged() signal.
-    static const char *changeSignal = "__metaDataChanged()";
-    const int changeSignalSize = qstrlen(changeSignal) + 1;
-
-    m_data[13] = stringIndex;                             // Signature.
-    m_data[14] = classNameSize;                           // Parameters.
-    m_data[15] = classNameSize;                           // Type.
-    m_data[16] = classNameSize;                           // Tag.
-    m_data[17] = MethodSignal | AccessProtected;          // Flags.
-
-    stringIndex += changeSignalSize;
-
-    const char *qvariantName = "QVariant";
-    const int qvariantSize = qstrlen(qvariantName) + 1;
-    const int qvariantIndex = stringIndex;
-
-    stringIndex += qvariantSize;
-
-    // Properties.
-    for (int i = 0; i < propertyCount; ++i) {       
-        m_data[18 + 3 * i] = stringIndex;                                       // Name.
-        m_data[19 + 3 * i] = qvariantIndex;                                     // Type.
-        m_data[20 + 3 * i] 
-                = Readable | Writable | Notify | Dynamic | (0xffffffff << 24);  // Flags.
-        m_data[18 + propertyCount * 3 + i] = 0;                                 // Notify signal.
-
-        stringIndex += qstrlen(qt_metaDataKeys[i].name) + 1;
-    }
-
-    // Terminating value.
-    m_data[18 + propertyCount * 4] = 0;
-
-    // Build string.
-    m_string = reinterpret_cast<char *>(qMalloc(stringIndex + 1));
-
-    // Class name.
-    qMemCopy(m_string, superClass->className(), classNameSize);
-
-    stringIndex = classNameSize;
-
-    // Null m_string.
-    m_string[stringIndex] = '\0';
-    stringIndex += 1;
-
-    // __metaDataChanged() signal.
-    qMemCopy(m_string + stringIndex, changeSignal, changeSignalSize);
-    stringIndex += changeSignalSize;
-
-    qMemCopy(m_string + stringIndex, qvariantName, qvariantSize);
-    stringIndex += qvariantSize;
-
-    // Properties.
-    for (int i = 0; i < propertyCount; ++i) {
-        const int propertyNameSize = qstrlen(qt_metaDataKeys[i].name) + 1;
-
-        qMemCopy(m_string + stringIndex, qt_metaDataKeys[i].name, propertyNameSize);
-        stringIndex += propertyNameSize;
-    }
-
-    // Terminating character.
-    m_string[stringIndex] = '\0';
-
-    d.superdata = superClass;
-    d.stringdata = m_string;
-    d.data = m_data;
-    d.extradata = 0;
-
-    static_cast<QMetaDataControlObject *>(m_object)->data()->metaObject = this;
-
-    m_propertyOffset = propertyOffset();
-    m_signalOffset = methodOffset();
-}
-
-QMetaDataControlMetaObject::~QMetaDataControlMetaObject()
-{
-    static_cast<QMetaDataControlObject *>(m_object)->data()->metaObject = 0;
-
-    qFree(m_data);
-    qFree(m_string);
-}
-
-int QMetaDataControlMetaObject::metaCall(QMetaObject::Call c, int id, void **a)
-{
-    if (c == QMetaObject::ReadProperty && id >= m_propertyOffset) {
-        int propId = id - m_propertyOffset;
-
-        *reinterpret_cast<QVariant *>(a[0]) = m_control->metaData(qt_metaDataKeys[propId].key);
-
-        return -1;
-    } else if (c == QMetaObject::WriteProperty && id >= m_propertyOffset) {
-        int propId = id - m_propertyOffset;
-
-        m_control->setMetaData(qt_metaDataKeys[propId].key, *reinterpret_cast<QVariant *>(a[0]));
-
-        return -1;
-    } else {
-        return m_object->qt_metacall(c, id, a);
-    }
-}
-
-int QMetaDataControlMetaObject::createProperty(const char *, const char *)
-{
-    return -1;
-}
-
-void QMetaDataControlMetaObject::metaDataChanged()
-{
-    activate(m_object, m_signalOffset, 0);
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/qml/qmetadatacontrolmetaobject_p.h b/src/multimedia/qml/qmetadatacontrolmetaobject_p.h
deleted file mode 100644
index ec4df05..0000000
--- a/src/multimedia/qml/qmetadatacontrolmetaobject_p.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMETADATACONTROLMETAOBJECT_P_H
-#define QMETADATACONTROLMETAOJBECT_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qmetaobject.h>
-#include <QtMultimedia/qtmedianamespace.h>
-
-#include <QtCore/private/qobject_p.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMetaDataControl;
-
-class QMetaDataControlMetaObject : public QAbstractDynamicMetaObject
-{
-public:
-    QMetaDataControlMetaObject(QMetaDataControl *control, QObject *object);
-    ~QMetaDataControlMetaObject();
-
-    int metaCall(QMetaObject::Call call, int _id, void **arguments);
-    int createProperty(const char *, const char *);
-
-    void metaDataChanged();
-
-private:
-    QMetaDataControl *m_control;
-    QObject *m_object;
-    char *m_string;
-    uint *m_data;
-
-    int m_propertyOffset;
-    int m_signalOffset;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/qml/qml.pri b/src/multimedia/qml/qml.pri
deleted file mode 100644
index d0ff71d..0000000
--- a/src/multimedia/qml/qml.pri
+++ /dev/null
@@ -1,37 +0,0 @@
-
-contains(QT_CONFIG, declarative) {
-    QT += declarative
-
-    system(pkg-config --exists \'libpulse >= 0.9.10\') {
-        DEFINES += QT_MULTIMEDIA_PULSEAUDIO
-        HEADERS += $$PWD/qsoundeffect_pulse_p.h
-        SOURCES += $$PWD/qsoundeffect_pulse_p.cpp
-        LIBS += -lpulse
-    } else:x11 {
-        DEFINES += QT_MULTIMEDIA_QMEDIAPLAYER
-        HEADERS += $$PWD/qsoundeffect_qmedia_p.h
-        SOURCES += $$PWD/qsoundeffect_qmedia_p.cpp
-    } else {
-        HEADERS += $$PWD/qsoundeffect_qsound_p.h
-        SOURCES += $$PWD/qsoundeffect_qsound_p.cpp
-    }
-
-    HEADERS += \
-        $$PWD/multimediadeclarative.h \
-        $$PWD/qmetadatacontrolmetaobject_p.h \
-        $$PWD/qdeclarativeaudio_p.h \
-        $$PWD/qdeclarativevideo_p.h \
-        $$PWD/qdeclarativemediabase_p.h \
-        $$PWD/qsoundeffect_p.h \
-        $$PWD/wavedecoder_p.h
-
-    SOURCES += \
-        $$PWD/multimediadeclarative.cpp \
-        $$PWD/qmetadatacontrolmetaobject.cpp \
-        $$PWD/qdeclarativeaudio.cpp \
-        $$PWD/qdeclarativevideo.cpp \
-        $$PWD/qdeclarativemediabase.cpp \
-        $$PWD/qsoundeffect.cpp \
-        $$PWD/wavedecoder_p.cpp
-}
-
diff --git a/src/multimedia/qml/qsoundeffect.cpp b/src/multimedia/qml/qsoundeffect.cpp
deleted file mode 100644
index 541e6c9..0000000
--- a/src/multimedia/qml/qsoundeffect.cpp
+++ /dev/null
@@ -1,255 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmediacontent.h"
-#include "qmediaplayer.h"
-
-#include "qsoundeffect_p.h"
-
-#if defined(QT_MULTIMEDIA_PULSEAUDIO)
-#include "qsoundeffect_pulse_p.h"
-#elif(QT_MULTIMEDIA_QMEDIAPLAYER)
-#include "qsoundeffect_qmedia_p.h"
-#else
-#include "qsoundeffect_qsound_p.h"
-#endif
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \qmlclass SoundEffect QSoundEffect
-    \since 4.7
-    \brief The SoundEffect element provides a way to play sound effects in qml.
-
-    The following example plays a wav file on mouse click.
-
-    \qml
-    SoundEffect {
-        id: playSound
-        source: "test.wav"
-    }
-    MouseRegion {
-        id: playArea
-        anchors.fill: parent
-        onPressed: {
-            playSound.play()
-        }
-    }
-    \endqml
-
-    \sa SoundEffect
-*/
-
-/*!
-    \qmlproperty QUrl SoundEffect::source
-
-    This property provides a way to control the sound to play.
-*/
-
-/*!
-    \qmlproperty int SoundEffect::loopCount
-
-    This property provides a way to control the number of times to repeat the sound on each play().
-*/
-
-/*!
-    \qmlproperty int SoundEffect::volume
-
-    This property provides a way to control the volume for playback.
-*/
-
-/*!
-    \qmlproperty bool SoundEffect::muted
-
-    This property provides a way to control muting.
-*/
-
-/*!
-    \qmlproperty int SoundEffect::duration
-
-    This property holds the duration in milliseconds of the current source audio.
-*/
-
-/*!
-    \qmlsignal SoundEffect::sourceChanged()
-
-    This handler is called when the source has changed.
-*/
-
-/*!
-    \qmlsignal SoundEffect::loopCountChanged()
-
-    This handler is called when the number of loops has changes.
-*/
-
-/*!
-    \qmlsignal SoundEffect::volumeChanged()
-
-    This handler is called when the volume has changed.
-*/
-
-/*!
-    \qmlsignal SoundEffect::mutedChanged()
-
-    This handler is called when the mute state has changed.
-*/
-
-/*!
-    \qmlsignal SoundEffect::durationChanged()
-
-    This handler is called when the duration has changed.
-*/
-
-QSoundEffect::QSoundEffect(QObject *parent) :
-    QObject(parent),
-    m_loopCount(1),
-    m_vol(100),
-    m_muted(false),
-    m_runningCount(0)
-{
-    d = new QSoundEffectPrivate(this);
-    connect(d, SIGNAL(volumeChanged(int)), SIGNAL(volumeChanged()));
-    connect(d, SIGNAL(mutedChanged(bool)), SIGNAL(mutedChanged()));
-    connect(d, SIGNAL(durationChanged(qint64)), SIGNAL(durationChanged()));
-    connect(d, SIGNAL(stateChanged(QMediaPlayer::State)), SLOT(repeat()));
-}
-
-QSoundEffect::~QSoundEffect()
-{
-    delete d;
-}
-
-QUrl QSoundEffect::source() const
-{
-    return d != 0 ? d->media().canonicalUrl() : QUrl();
-}
-
-void QSoundEffect::setSource(const QUrl &url)
-{
-    if (d != 0 && d->media().canonicalUrl() == url)
-        return;
-
-    d->setVolume(m_vol);
-    d->setMuted(m_muted);
-    d->setMedia(url);
-
-    if (url.isEmpty())
-        return;
-
-    emit sourceChanged();
-}
-
-int QSoundEffect::loopCount() const
-{
-    return m_loopCount;
-}
-
-void QSoundEffect::setLoopCount(int loopCount)
-{
-    if (m_loopCount == loopCount)
-        return;
-
-    m_loopCount = loopCount;
-    emit loopCountChanged();
-}
-
-int QSoundEffect::volume() const
-{
-    return d != 0 ? d->volume() : m_vol;
-}
-
-void QSoundEffect::setVolume(int volume)
-{
-    if (m_vol == volume)
-        return;
-
-    m_vol = volume;
-    if (d != 0)
-        d->setVolume(volume);
-    else
-        emit volumeChanged();
-}
-
-bool QSoundEffect::isMuted() const
-{
-    return d !=  0 ? d->isMuted() : m_muted;
-}
-
-void QSoundEffect::setMuted(bool muted)
-{
-    if (m_muted == muted)
-        return;
-
-    m_muted = muted;
-    if (d != 0)
-        d->setMuted(muted);
-    else
-        emit mutedChanged();
-}
-
-int QSoundEffect::duration() const
-{
-    return d != 0 ? d->duration() : 0;
-}
-
-void QSoundEffect::play()
-{
-    m_runningCount = 0;
-
-    if (d != 0)
-        d->play();
-}
-
-void QSoundEffect::stop()
-{
-    if (d != 0)
-        d->stop();
-}
-
-void QSoundEffect::repeat()
-{
-    if (d->state() == QMediaPlayer::StoppedState) {
-        if (++m_runningCount < m_loopCount)
-            d->play();
-    }
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/qml/qsoundeffect_p.h b/src/multimedia/qml/qsoundeffect_p.h
deleted file mode 100644
index 51ebe52..0000000
--- a/src/multimedia/qml/qsoundeffect_p.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSOUNDEFFECT_H
-#define QSOUNDEFFECT_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include <QtCore/qobject.h>
-#include <QtCore/qurl.h>
-#include <QtDeclarative/qdeclarative.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QSoundEffectPrivate;
-class Q_AUTOTEST_EXPORT QSoundEffect : public QObject
-{
-    Q_OBJECT
-    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
-    Q_PROPERTY(int loopCount READ loopCount WRITE setLoopCount NOTIFY loopCountChanged)
-    Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged)
-    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
-    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
-
-public:
-    explicit QSoundEffect(QObject *parent = 0);
-    ~QSoundEffect();
-
-    QUrl source() const;
-    void setSource(const QUrl &url);
-
-    int loopCount() const;
-    void setLoopCount(int loopCount);
-
-    int volume() const;
-    void setVolume(int volume);
-
-    bool isMuted() const;
-    void setMuted(bool muted);
-
-    int duration() const;
-
-signals:
-    void sourceChanged();
-    void loopCountChanged();
-    void volumeChanged();
-    void mutedChanged();
-    void durationChanged();
-
-public slots:
-    void play();
-    void stop();
-
-private slots:
-    void repeat();
-
-private:
-    Q_DISABLE_COPY(QSoundEffect)
-
-    int m_loopCount;
-    int m_vol;
-    bool m_muted;
-    int m_runningCount;
-
-    QSoundEffectPrivate* d;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QSoundEffect))
-
-QT_END_HEADER
-
-
-#endif // QSOUNDEFFECT_H
diff --git a/src/multimedia/qml/qsoundeffect_pulse_p.cpp b/src/multimedia/qml/qsoundeffect_pulse_p.cpp
deleted file mode 100644
index 7e9a25c..0000000
--- a/src/multimedia/qml/qsoundeffect_pulse_p.cpp
+++ /dev/null
@@ -1,509 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qcoreapplication.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QtNetwork>
-#include <QTime>
-
-#include "qmediacontent.h"
-#include "qmediaplayer.h"
-#include "qsoundeffect_p.h"
-
-#include "wavedecoder_p.h"
-
-#include "qsoundeffect_pulse_p.h"
-
-#if(Q_WS_MAEMO_5)
-#include <pulse/ext-stream-restore.h>
-#endif
-
-#include <unistd.h>
-
-// Less than ideal
-#define PA_SCACHE_ENTRY_SIZE_MAX (1024*1024*16)
-
-QT_BEGIN_NAMESPACE
-
-namespace
-{
-inline pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format)
-{
-    pa_sample_spec  spec;
-
-    spec.rate = format.frequency();
-    spec.channels = format.channels();
-
-    if (format.sampleSize() == 8)
-        spec.format = PA_SAMPLE_U8;
-    else if (format.sampleSize() == 16) {
-        switch (format.byteOrder()) {
-            case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S16BE; break;
-            case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S16LE; break;
-        }
-    }
-    else if (format.sampleSize() == 32) {
-        switch (format.byteOrder()) {
-            case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S32BE; break;
-            case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S32LE; break;
-        }
-    }
-
-    return spec;
-}
-
-class PulseDaemon
-{
-public:
-    PulseDaemon():m_prepared(false)
-    {
-        prepare();
-    }
-
-    ~PulseDaemon()
-    {
-        if (m_prepared)
-            release();
-    }
-
-    inline void lock()
-    {
-        pa_threaded_mainloop_lock(m_mainLoop);
-    }
-
-    inline void unlock()
-    {
-        pa_threaded_mainloop_unlock(m_mainLoop);
-    }
-
-    inline pa_context *context() const
-    {
-        return m_context;
-    }
-
-    int volume()
-    {
-        return m_vol;
-    }
-
-private:
-    void prepare()
-    {
-        m_vol = 100;
-
-        m_mainLoop = pa_threaded_mainloop_new();
-        if (m_mainLoop == 0) {
-            qWarning("PulseAudioService: unable to create pulseaudio mainloop");
-            return;
-        }
-
-        if (pa_threaded_mainloop_start(m_mainLoop) != 0) {
-            qWarning("PulseAudioService: unable to start pulseaudio mainloop");
-            pa_threaded_mainloop_free(m_mainLoop);
-            return;
-        }
-
-        m_mainLoopApi = pa_threaded_mainloop_get_api(m_mainLoop);
-
-        lock();
-        m_context = pa_context_new(m_mainLoopApi, QString(QLatin1String("QtPulseAudio:%1")).arg(::getpid()).toAscii().constData());
-
-#if(Q_WS_MAEMO_5)
-        pa_context_set_state_callback(m_context, context_state_callback, this);
-#endif
-        if (m_context == 0) {
-            qWarning("PulseAudioService: Unable to create new pulseaudio context");
-            pa_threaded_mainloop_free(m_mainLoop);
-            return;
-        }
-
-        if (pa_context_connect(m_context, NULL, (pa_context_flags_t)0, NULL) < 0) {
-            qWarning("PulseAudioService: pa_context_connect() failed");
-            pa_context_unref(m_context);
-            pa_threaded_mainloop_free(m_mainLoop);
-            return;
-        }
-        unlock();
-
-        m_prepared = true;
-    }
-
-    void release()
-    {
-        if (!m_prepared) return;
-        pa_threaded_mainloop_stop(m_mainLoop);
-        pa_threaded_mainloop_free(m_mainLoop);
-        m_prepared = false;
-    }
-
-#if(Q_WS_MAEMO_5)
-    static void context_state_callback(pa_context *c, void *userdata)
-    {
-        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
-        switch (pa_context_get_state(c)) {
-            case PA_CONTEXT_CONNECTING:
-            case PA_CONTEXT_AUTHORIZING:
-            case PA_CONTEXT_SETTING_NAME:
-                break;
-            case PA_CONTEXT_READY:
-                pa_ext_stream_restore_set_subscribe_cb(c, &stream_restore_monitor_callback, self);
-                pa_ext_stream_restore_subscribe(c, 1, NULL, self);
-                break;
-            default:
-                break;
-        }
-    }
-    static void stream_restore_monitor_callback(pa_context *c, void *userdata)
-    {
-        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
-        pa_ext_stream_restore2_read(c, &stream_restore_info_callback, self);
-    }
-    static void stream_restore_info_callback(pa_context *c, const pa_ext_stream_restore2_info *info,
-            int eol, void *userdata)
-    {
-        Q_UNUSED(c)
-
-        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
-
-        if (!eol) {
-            if (QString(info->name).startsWith(QLatin1String("sink-input-by-media-role:x-maemo"))) {
-                const unsigned str_length = 256;
-                char str[str_length];
-                pa_cvolume_snprint(str, str_length, &info->volume);
-                self->m_vol = QString(str).replace(" ","").replace("%","").mid(2).toInt();
-            }
-        }
-    }
-#endif
-
-    int  m_vol;
-    bool m_prepared;
-    pa_context *m_context;
-    pa_threaded_mainloop *m_mainLoop;
-    pa_mainloop_api *m_mainLoopApi;
-};
-}
-
-Q_GLOBAL_STATIC(PulseDaemon, daemon)
-
-
-QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
-    QObject(parent),
-    m_muted(false),
-    m_playQueued(false),
-    m_vol(100),
-    m_duration(0),
-    m_dataUploaded(0),
-    m_state(QMediaPlayer::StoppedState),
-    m_status(QMediaPlayer::NoMedia),
-    m_reply(0),
-    m_stream(0),
-    m_networkAccessManager(0)
-{
-}
-
-QSoundEffectPrivate::~QSoundEffectPrivate()
-{
-    delete m_reply;
-    unloadSample();
-}
-
-qint64 QSoundEffectPrivate::duration() const
-{
-    return m_duration;
-}
-
-int QSoundEffectPrivate::volume() const
-{
-    return m_vol;
-}
-
-bool QSoundEffectPrivate::isMuted() const
-{
-    return m_muted;
-}
-
-QMediaContent QSoundEffectPrivate::media() const
-{
-    return m_media;
-}
-
-QMediaPlayer::State QSoundEffectPrivate::state() const
-{
-    return m_state;
-}
-
-QMediaPlayer::MediaStatus QSoundEffectPrivate::mediaStatus() const
-{
-    return m_status;
-}
-
-void QSoundEffectPrivate::play()
-{
-    if (m_status == QMediaPlayer::LoadingMedia) {
-        m_playQueued = true;
-        return;
-    }
-
-    if (m_status != QMediaPlayer::BufferedMedia ||
-            m_state == QMediaPlayer::PlayingState)
-        return;
-
-    pa_volume_t m_vol = PA_VOLUME_NORM;
-
-    daemon()->lock();
-#if(Q_WS_MAEMO_5)
-    m_vol = PA_VOLUME_NORM/100*((daemon()->volume()+m_vol)/2);
-#endif
-    pa_operation_unref(
-            pa_context_play_sample(daemon()->context(),
-                m_name.constData(),
-                0,
-                m_vol,
-                play_callback,
-                this)
-            );
-    daemon()->unlock();
-
-    m_playbackTime.start();
-
-    emit stateChanged(m_state = QMediaPlayer::PlayingState);
-}
-
-void QSoundEffectPrivate::stop()
-{
-    emit stateChanged(m_state = QMediaPlayer::StoppedState);
-}
-
-void QSoundEffectPrivate::setVolume(int volume)
-{
-    m_vol = volume;
-}
-
-void QSoundEffectPrivate::setMuted(bool muted)
-{
-    m_muted = muted;
-}
-
-void QSoundEffectPrivate::setMedia(const QMediaContent &media)
-{
-    if (media.isNull()) {
-        m_media = QMediaContent();
-        unloadSample();
-        return;
-    }
-    if (m_media == media)
-        return;
-    m_media = media;
-
-    if (m_networkAccessManager == 0)
-        m_networkAccessManager = new QNetworkAccessManager(this);
-
-    m_stream = m_networkAccessManager->get(QNetworkRequest(m_media.canonicalUrl()));
-
-    unloadSample();
-    loadSample();
-
-    emit mediaChanged(m_media);
-}
-
-void QSoundEffectPrivate::decoderReady()
-{
-    if (m_waveDecoder->size() >= PA_SCACHE_ENTRY_SIZE_MAX) {
-        m_status = QMediaPlayer::InvalidMedia;
-        emit mediaStatusChanged(m_status);
-        qWarning("QtPulseAudio: attempting to load to large a sample");
-        return;
-    }
-
-    if (m_name.isNull())
-        m_name = QString(QLatin1String("QtPulseSample-%1-%2")).arg(::getpid()).arg(quintptr(this)).toUtf8();
-
-    pa_sample_spec spec = audioFormatToSampleSpec(m_waveDecoder->audioFormat());
-
-    daemon()->lock();
-    pa_stream *stream = pa_stream_new(daemon()->context(), m_name.constData(), &spec, 0);
-    pa_stream_set_state_callback(stream, stream_state_callback, this);
-    pa_stream_set_write_callback(stream, stream_write_callback, this);
-    pa_stream_connect_upload(stream, (size_t)m_waveDecoder->size());
-    daemon()->unlock();
-}
-
-void QSoundEffectPrivate::decoderError()
-{
-    emit mediaStatusChanged(m_status = QMediaPlayer::InvalidMedia);
-}
-
-void QSoundEffectPrivate::checkPlayTime()
-{
-    int elapsed = m_playbackTime.elapsed();
-
-    if (elapsed >= m_duration) {
-        m_state = QMediaPlayer::StoppedState;
-        emit stateChanged(m_state);
-    }
-    else
-        startTimer(m_duration - elapsed);
-}
-
-void QSoundEffectPrivate::loadSample()
-{
-    m_waveDecoder = new WaveDecoder(m_stream);
-    connect(m_waveDecoder, SIGNAL(formatKnown()), SLOT(decoderReady()));
-    connect(m_waveDecoder, SIGNAL(invalidFormat()), SLOT(decoderError()));
-
-    m_status = QMediaPlayer::LoadingMedia;
-    emit mediaStatusChanged(m_status);
-}
-
-void QSoundEffectPrivate::unloadSample()
-{
-    if (m_status != QMediaPlayer::BufferedMedia)
-        return;
-
-    m_status = QMediaPlayer::NoMedia;
-
-    daemon()->lock();
-    pa_context_remove_sample(daemon()->context(), m_name.constData(), NULL, NULL);
-    daemon()->unlock();
-
-    m_duration = 0;
-    m_dataUploaded = 0;
-}
-
-void QSoundEffectPrivate::timerEvent(QTimerEvent *event)
-{
-    if (m_state == QMediaPlayer::PlayingState) {
-        m_state = QMediaPlayer::StoppedState;
-        emit stateChanged(m_state);
-    }
-
-    killTimer(event->timerId());
-}
-
-void QSoundEffectPrivate::stream_write_callback(pa_stream *s, size_t length, void *userdata)
-{
-    Q_UNUSED(length);
-
-    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
-
-    size_t bufferSize = qMin(pa_stream_writable_size(s),
-            size_t(self->m_waveDecoder->bytesAvailable()));
-    char buffer[bufferSize];
-
-    size_t len = 0;
-    while (len < length) {
-        qint64 read = self->m_waveDecoder->read(buffer, qMin(bufferSize, length -len));
-        if (read > 0) {
-            if (pa_stream_write(s, buffer, size_t(read), 0, 0, PA_SEEK_RELATIVE) == 0)
-                len += size_t(read);
-            else
-                break;
-        }
-    }
-    self->m_dataUploaded += len;
-
-    if (self->m_waveDecoder->size() == self->m_dataUploaded) {
-        pa_stream_finish_upload(s);
-
-        self->m_duration = self->m_waveDecoder->duration();
-        emit self->durationChanged(self->m_duration);
-
-        self->m_status = QMediaPlayer::BufferedMedia;
-        emit self->mediaStatusChanged(self->m_status);
-
-        self->m_waveDecoder->deleteLater();
-        if (!self->m_media.isNull())
-            self->m_stream->deleteLater();
-
-        if (self->m_playQueued) {
-            self->m_playQueued = false;
-            QMetaObject::invokeMethod(self, "play");
-        }
-    }
-}
-
-void QSoundEffectPrivate::stream_state_callback(pa_stream *s, void *userdata)
-{
-    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
-
-    switch (pa_stream_get_state(s)) {
-        case PA_STREAM_CREATING:
-        case PA_STREAM_READY:
-        case PA_STREAM_TERMINATED:
-            break;
-
-        case PA_STREAM_FAILED:
-        default:
-            self->m_status = QMediaPlayer::InvalidMedia;
-            emit self->mediaStatusChanged(self->m_status);
-            break;
-    }
-}
-
-void QSoundEffectPrivate::play_callback(pa_context *c, int success, void *userdata)
-{
-    Q_UNUSED(c);
-
-    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
-
-    if (success == 1)
-        QMetaObject::invokeMethod(self, "checkPlayTime", Qt::QueuedConnection);
-    else {
-        self->m_state = QMediaPlayer::StoppedState;
-        emit self->stateChanged(self->m_state);
-    }
-}
-
-QT_END_NAMESPACE
-
-
diff --git a/src/multimedia/qml/qsoundeffect_pulse_p.h b/src/multimedia/qml/qsoundeffect_pulse_p.h
deleted file mode 100644
index 247f8a3..0000000
--- a/src/multimedia/qml/qsoundeffect_pulse_p.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSOUNDEFFECT_PULSE_H
-#define QSOUNDEFFECT_PULSE_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include "qsoundeffect_p.h"
-
-#include <QtCore/qobject.h>
-#include <QtCore/qdatetime.h>
-#include <QtMultimedia/qmediaplayer.h>
-#include <pulse/pulseaudio.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QNetworkReply;
-class QNetworkAccessManager;
-class WaveDecoder;
-
-class QSoundEffectPrivate : public QObject
-{
-    Q_OBJECT
-public:
-    explicit QSoundEffectPrivate(QObject* parent);
-    ~QSoundEffectPrivate();
-
-    qint64 duration() const;
-    int volume() const;
-    bool isMuted() const;
-    QMediaContent media() const;
-    QMediaPlayer::State state() const;
-    QMediaPlayer::MediaStatus mediaStatus() const;
-
-public Q_SLOTS:
-    void play();
-    void stop();
-    void setVolume(int volume);
-    void setMuted(bool muted);
-    void setMedia(const QMediaContent &media);
-
-Q_SIGNALS:
-    void mediaChanged(const QMediaContent &media);
-    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
-    void stateChanged(QMediaPlayer::State newState);
-    void durationChanged(qint64 duration);
-    void volumeChanged(int volume);
-    void mutedChanged(bool muted);
-    void error(QMediaPlayer::Error error);
-
-private slots:
-    void decoderReady();
-    void decoderError();
-    void checkPlayTime();
-
-private:
-    void loadSample();
-    void unloadSample();
-
-    void timerEvent(QTimerEvent *event);
-
-    static void stream_write_callback(pa_stream *s, size_t length, void *userdata);
-    static void stream_state_callback(pa_stream *s, void *userdata);
-    static void play_callback(pa_context *c, int success, void *userdata);
-
-    bool    m_muted;
-    bool    m_playQueued;
-    int     m_vol;
-    int     m_duration;
-    int     m_dataUploaded;
-    QTime  m_playbackTime;
-    QMediaPlayer::State m_state;
-    QMediaPlayer::MediaStatus m_status;
-    QByteArray m_name;
-    QMediaContent   m_media;
-    QNetworkReply *m_reply;
-    WaveDecoder *m_waveDecoder;
-    QIODevice *m_stream;
-    QNetworkAccessManager *m_networkAccessManager;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QSOUNDEFFECT_PULSE_H
diff --git a/src/multimedia/qml/qsoundeffect_qmedia_p.cpp b/src/multimedia/qml/qsoundeffect_qmedia_p.cpp
deleted file mode 100644
index 48fb257..0000000
--- a/src/multimedia/qml/qsoundeffect_qmedia_p.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qcoreapplication.h>
-
-#include "qmediacontent.h"
-#include "qmediaplayer.h"
-
-#include "qsoundeffect_p.h"
-#include "qsoundeffect_qmedia_p.h"
-
-
-QT_BEGIN_NAMESPACE
-
-QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
-    QObject(parent),
-    m_muted(false),
-    m_vol(100),
-    m_player(0)
-{
-}
-
-QSoundEffectPrivate::~QSoundEffectPrivate()
-{
-    if (m_player) delete m_player;
-}
-
-qint64 QSoundEffectPrivate::duration() const
-{
-    if (m_player) return m_player->duration();
-
-    return 0;
-}
-
-int QSoundEffectPrivate::volume() const
-{
-    if (m_player) return m_player->volume();
-
-    return m_vol;
-}
-
-bool QSoundEffectPrivate::isMuted() const
-{
-    if (m_player) return m_player->isMuted();
-
-    return m_muted;
-}
-
-QMediaContent QSoundEffectPrivate::media() const
-{
-    if (m_player) return m_player->media();
-
-    return QMediaContent();
-}
-
-QMediaPlayer::State QSoundEffectPrivate::state() const
-{
-    if (m_player) return m_player->state();
-
-    return QMediaPlayer::StoppedState;
-}
-
-QMediaPlayer::MediaStatus QSoundEffectPrivate::mediaStatus() const
-{
-    if (m_player) return m_player->mediaStatus();
-
-    return QMediaPlayer::UnknownMediaStatus;
-}
-
-void QSoundEffectPrivate::play()
-{
-    if (m_player && !m_player->isMuted())
-        m_player->play();
-}
-
-void QSoundEffectPrivate::stop()
-{
-    if (m_player)
-        m_player->stop();
-}
-
-void QSoundEffectPrivate::setVolume(int volume)
-{
-    m_vol = volume;
-
-    if (m_player)
-        m_player->setVolume(volume);
-}
-
-void QSoundEffectPrivate::setMuted(bool muted)
-{
-    m_muted = muted;
-
-    if (m_player)
-        m_player->setMuted(muted);
-}
-
-void QSoundEffectPrivate::setMedia(const QMediaContent &media)
-{
-    if (media.isNull())
-        return;
-
-    if (m_player == 0) {
-        m_player = new QMediaPlayer(this, QMediaPlayer::LowLatency);
-        m_player->setVolume(m_vol);
-        m_player->setMuted(m_muted);
-
-        connect(m_player, SIGNAL(volumeChanged(int)), SIGNAL(volumeChanged(int)));
-        connect(m_player, SIGNAL(mutedChanged(bool)), SIGNAL(mutedChanged(bool)));
-        connect(m_player, SIGNAL(durationChanged(qint64)), SIGNAL(durationChanged(qint64)));
-        connect(m_player, SIGNAL(stateChanged(QMediaPlayer::State)), SIGNAL(stateChanged(QMediaPlayer::State)));
-    }
-
-    m_player->setMedia(media.canonicalUrl());
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/qml/qsoundeffect_qmedia_p.h b/src/multimedia/qml/qsoundeffect_qmedia_p.h
deleted file mode 100644
index 8267f79..0000000
--- a/src/multimedia/qml/qsoundeffect_qmedia_p.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSOUNDEFFECT_QMEDIA_H
-#define QSOUNDEFFECT_QMEDIA_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include <QtCore/qobject.h>
-#include <QtCore/qurl.h>
-#include <QtMultimedia/qmediaplayer.h>
-#include "qsoundeffect_p.h"
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class WaveDecoder;
-
-class QSoundEffectPrivate : public QObject
-{
-    Q_OBJECT
-public:
-    explicit QSoundEffectPrivate(QObject* parent);
-    ~QSoundEffectPrivate();
-
-    qint64 duration() const;
-    int volume() const;
-    bool isMuted() const;
-    QMediaContent media() const;
-    QMediaPlayer::State state() const;
-    QMediaPlayer::MediaStatus mediaStatus() const;
-
-public Q_SLOTS:
-    void play();
-    void stop();
-    void setVolume(int volume);
-    void setMuted(bool muted);
-    void setMedia(const QMediaContent &media);
-
-Q_SIGNALS:
-    void mediaChanged(const QMediaContent &media);
-    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
-    void stateChanged(QMediaPlayer::State newState);
-    void durationChanged(qint64 duration);
-    void volumeChanged(int volume);
-    void mutedChanged(bool muted);
-    void error(QMediaPlayer::Error error);
-
-private:
-    bool m_muted;
-    int  m_vol;
-    QMediaPlayer *m_player;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QSOUNDEFFECT_QMEDIA_H
diff --git a/src/multimedia/qml/qsoundeffect_qsound_p.cpp b/src/multimedia/qml/qsoundeffect_qsound_p.cpp
deleted file mode 100644
index df160a9..0000000
--- a/src/multimedia/qml/qsoundeffect_qsound_p.cpp
+++ /dev/null
@@ -1,225 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qcoreapplication.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qfile.h>
-#include <QtGui/qsound.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QDebug>
-
-#include "qmediacontent.h"
-#include "qmediaplayer.h"
-#include "qsoundeffect_p.h"
-
-#include "wavedecoder_p.h"
-
-#include "qsoundeffect_qsound_p.h"
-
-QT_BEGIN_NAMESPACE
-
-QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
-    QObject(parent),
-    m_queued(false),
-    m_muted(false),
-    m_state(QMediaPlayer::StoppedState),
-    m_status(QMediaPlayer::NoMedia),
-    m_file(0),
-    m_sound(0)
-{
-    m_timer = new QTimer(this);
-    connect(m_timer,SIGNAL(timeout()),SLOT(checkPlayTime()));
-    m_media = QMediaContent();
-}
-
-QSoundEffectPrivate::~QSoundEffectPrivate()
-{
-    if (m_sound) delete m_sound;
-    if (m_waveDecoder) delete m_waveDecoder;
-    m_file->close();
-}
-
-qint64 QSoundEffectPrivate::duration() const
-{
-    if (m_waveDecoder)
-        return m_waveDecoder->size();
-
-    return 0;
-}
-
-int QSoundEffectPrivate::volume() const
-{
-    return 100;
-}
-
-bool QSoundEffectPrivate::isMuted() const
-{
-    return m_muted;
-}
-
-QMediaContent QSoundEffectPrivate::media() const
-{
-    return m_media;
-}
-
-QMediaPlayer::State QSoundEffectPrivate::state() const
-{
-    return m_state;
-}
-
-QMediaPlayer::MediaStatus QSoundEffectPrivate::mediaStatus() const
-{
-    return m_status;
-}
-
-void QSoundEffectPrivate::play()
-{
-    if (m_sound && !m_muted) {
-        m_queued = false;
-        m_timer->start(20);
-        m_playbackTime.start();
-        m_sound->play();
-        emit stateChanged(m_state = QMediaPlayer::PlayingState);
-    } else if (m_status == QMediaPlayer::LoadingMedia)
-        m_queued = true;
-}
-
-void QSoundEffectPrivate::stop()
-{
-    m_timer->stop();
-
-    if (m_sound) {
-        m_sound->stop();
-        emit stateChanged(m_state = QMediaPlayer::StoppedState);
-    }
-}
-
-void QSoundEffectPrivate::setVolume(int volume)
-{
-    Q_UNUSED(volume)
-}
-
-void QSoundEffectPrivate::setMuted(bool muted)
-{
-    m_muted = muted;
-}
-
-void QSoundEffectPrivate::setMedia(const QMediaContent &media)
-{
-    m_queued = false;
-
-    if (media.isNull() || media.canonicalUrl().scheme() != QLatin1String("file")) {
-        m_media = QMediaContent();
-        return;
-    }
-    if (m_media == media)
-        return;
-
-    m_media = media;
-    m_file = new QFile(m_media.canonicalUrl().toLocalFile());
-    m_file->open(QIODevice::ReadOnly|QIODevice::Unbuffered);
-
-    unloadSample();
-    loadSample();
-
-    emit mediaChanged(m_media);
-}
-
-void QSoundEffectPrivate::decoderReady()
-{
-    m_file->close();
-    m_sound = new QSound(m_media.canonicalUrl().toLocalFile());
-    emit mediaStatusChanged(m_status = QMediaPlayer::LoadedMedia);
-
-    if (m_queued)
-        play();
-}
-
-void QSoundEffectPrivate::decoderError()
-{
-    m_file->close();
-    emit mediaStatusChanged(m_status = QMediaPlayer::InvalidMedia);
-}
-
-void QSoundEffectPrivate::checkPlayTime()
-{
-    if (m_sound->isFinished()) {
-        m_timer->stop();
-        m_state = QMediaPlayer::StoppedState;
-        emit stateChanged(m_state);
-    }
-}
-
-void QSoundEffectPrivate::loadSample()
-{
-    m_waveDecoder = new WaveDecoder(m_file);
-    connect(m_waveDecoder, SIGNAL(formatKnown()), SLOT(decoderReady()));
-    connect(m_waveDecoder, SIGNAL(invalidFormat()), SLOT(decoderError()));
-
-    m_status = QMediaPlayer::LoadingMedia;
-    emit mediaStatusChanged(m_status);
-}
-
-void QSoundEffectPrivate::unloadSample()
-{
-    if (m_sound == 0)
-        return;
-
-    m_status = QMediaPlayer::NoMedia;
-
-    if (m_sound)
-        delete m_sound;
-
-    m_sound = 0;
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/qml/qsoundeffect_qsound_p.h b/src/multimedia/qml/qsoundeffect_qsound_p.h
deleted file mode 100644
index 45c0888..0000000
--- a/src/multimedia/qml/qsoundeffect_qsound_p.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSOUNDEFFECT_QSOUND_H
-#define QSOUNDEFFECT_QSOUND_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include <QtCore/qobject.h>
-#include <QtCore/qdatetime.h>
-#include <QtMultimedia/qmediaplayer.h>
-
-#include "qsoundeffect_p.h"
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QTimer;
-class QSound;
-class QFile;
-class WaveDecoder;
-
-class QSoundEffectPrivate : public QObject
-{
-    Q_OBJECT
-public:
-    explicit QSoundEffectPrivate(QObject* parent);
-    ~QSoundEffectPrivate();
-
-    qint64 duration() const;
-    int volume() const;
-    bool isMuted() const;
-    QMediaContent media() const;
-    QMediaPlayer::State state() const;
-    QMediaPlayer::MediaStatus mediaStatus() const;
-
-public Q_SLOTS:
-    void play();
-    void stop();
-    void setVolume(int volume);
-    void setMuted(bool muted);
-    void setMedia(const QMediaContent &media);
-
-Q_SIGNALS:
-    void mediaChanged(const QMediaContent &media);
-    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
-    void stateChanged(QMediaPlayer::State newState);
-    void durationChanged(qint64 duration);
-    void volumeChanged(int volume);
-    void mutedChanged(bool muted);
-    void error(QMediaPlayer::Error error);
-
-private slots:
-    void decoderReady();
-    void decoderError();
-    void checkPlayTime();
-
-private:
-    void loadSample();
-    void unloadSample();
-
-    bool    m_queued;
-    bool    m_muted;
-    QTime  m_playbackTime;
-    QMediaPlayer::State m_state;
-    QMediaPlayer::MediaStatus m_status;
-    QFile *m_file;
-    QByteArray m_name;
-    QMediaContent   m_media;
-    WaveDecoder *m_waveDecoder;
-    QSound *m_sound;
-    QTimer *m_timer;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QSOUNDEFFECT_QSOUND_H
diff --git a/src/multimedia/qml/wavedecoder_p.cpp b/src/multimedia/qml/wavedecoder_p.cpp
deleted file mode 100644
index f2277ae..0000000
--- a/src/multimedia/qml/wavedecoder_p.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "wavedecoder_p.h"
-
-#include <QtCore/qtimer.h>
-#include <QtCore/qendian.h>
-
-QT_BEGIN_NAMESPACE
-
-WaveDecoder::WaveDecoder(QIODevice *s, QObject *parent):
-    QIODevice(parent),
-    haveFormat(false),
-    dataSize(0),
-    remaining(0),
-    source(s)
-{
-    open(QIODevice::ReadOnly | QIODevice::Unbuffered);
-
-    if (source->bytesAvailable() >= sizeof(CombinedHeader))
-        QTimer::singleShot(0, this, SLOT(handleData()));
-    else
-        connect(source, SIGNAL(readyRead()), SLOT(handleData()));
-}
-
-WaveDecoder::~WaveDecoder()
-{
-}
-
-QAudioFormat WaveDecoder::audioFormat() const
-{
-    return format;
-}
-
-int WaveDecoder::duration() const
-{
-    return size() * 1000 / (format.sampleSize() / 8) / format.channels() / format.frequency();
-}
-
-qint64 WaveDecoder::size() const
-{
-    return haveFormat ? dataSize : 0;
-}
-
-bool WaveDecoder::isSequential() const
-{
-    return source->isSequential();
-}
-
-qint64 WaveDecoder::bytesAvailable() const
-{
-    return haveFormat ? source->bytesAvailable() : 0;
-}
-
-qint64 WaveDecoder::readData(char *data, qint64 maxlen)
-{
-    return haveFormat ? source->read(data, maxlen) : 0;
-}
-
-qint64 WaveDecoder::writeData(const char *data, qint64 len)
-{
-    Q_UNUSED(data);
-    Q_UNUSED(len);
-
-    return -1;
-}
-
-void WaveDecoder::handleData()
-{
-    if (source->bytesAvailable() < sizeof(CombinedHeader))
-        return;
-
-    source->disconnect(SIGNAL(readyRead()), this, SLOT(handleData()));
-    source->read((char*)&header, sizeof(CombinedHeader));
-
-    if (qstrncmp(header.riff.descriptor.id, "RIFF", 4) != 0 ||
-        qstrncmp(header.riff.type, "WAVE", 4) != 0 ||
-        qstrncmp(header.wave.descriptor.id, "fmt ", 4) != 0 ||
-        (header.wave.audioFormat != 0 && header.wave.audioFormat != 1) ||
-        qstrncmp(header.data.descriptor.id, "data", 4) != 0) {
-
-        emit invalidFormat();
-    }
-    else {
-        int bps = qFromLittleEndian<quint16>(header.wave.bitsPerSample);
-
-        format.setCodec(QLatin1String("audio/pcm"));
-        format.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt);
-        format.setByteOrder(QAudioFormat::LittleEndian);
-        format.setFrequency(qFromLittleEndian<quint32>(header.wave.sampleRate));
-        format.setSampleSize(bps);
-        format.setChannels(qFromLittleEndian<quint16>(header.wave.numChannels));
-
-        dataSize = qFromLittleEndian<quint32>(header.data.descriptor.size);
-
-        haveFormat = true;
-        connect(source, SIGNAL(readyRead()), SIGNAL(readyRead()));
-        emit formatKnown();
-    }
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/qml/wavedecoder_p.h b/src/multimedia/qml/wavedecoder_p.h
deleted file mode 100644
index 00aa14e..0000000
--- a/src/multimedia/qml/wavedecoder_p.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef WAVEDECODER_H
-#define WAVEDECODER_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qiodevice.h>
-#include <QtMultimedia/qaudioformat.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class WaveDecoder : public QIODevice
-{
-    Q_OBJECT
-
-public:
-    explicit WaveDecoder(QIODevice *source, QObject *parent = 0);
-    ~WaveDecoder();
-
-    QAudioFormat audioFormat() const;
-    int duration() const;
-
-    qint64 size() const;
-    bool isSequential() const;
-    qint64 bytesAvailable() const;
-
-signals:
-    void formatKnown();
-    void invalidFormat();
-
-private slots:
-    void handleData();
-
-private:
-    qint64 readData(char *data, qint64 maxlen);
-    qint64 writeData(const char *data, qint64 len);
-
-    struct chunk
-    {
-        char        id[4];
-        quint32     size;
-    };
-    struct RIFFHeader
-    {
-        chunk       descriptor;
-        char        type[4];
-    };
-    struct WAVEHeader
-    {
-        chunk       descriptor;
-        quint16     audioFormat;
-        quint16     numChannels;
-        quint32     sampleRate;
-        quint32     byteRate;
-        quint16     blockAlign;
-        quint16     bitsPerSample;
-    };
-    struct DATAHeader
-    {
-        chunk       descriptor;
-    };
-    struct CombinedHeader
-    {
-        RIFFHeader  riff;
-        WAVEHeader  wave;
-        DATAHeader  data;
-    };
-
-    bool haveFormat;
-    qint64 dataSize;
-    qint64 remaining;
-    QAudioFormat format;
-    QIODevice *source;
-    CombinedHeader header;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // WAVEDECODER_H
diff --git a/src/plugins/qdeclarativemodules/multimedia/multimedia.cpp b/src/plugins/qdeclarativemodules/multimedia/multimedia.cpp
index 8becbf3..e03d8f3 100644
--- a/src/plugins/qdeclarativemodules/multimedia/multimedia.cpp
+++ b/src/plugins/qdeclarativemodules/multimedia/multimedia.cpp
@@ -41,17 +41,28 @@
 
 #include <QtDeclarative/qdeclarativeextensionplugin.h>
 #include <QtDeclarative/qdeclarative.h>
-#include <QtMultimedia/multimediadeclarative.h>
+#include <QtMultimedia/private/qsoundeffect_p.h>
+
+#include "qdeclarativevideo_p.h"
+#include "qdeclarativeaudio_p.h"
+
+
 
 QT_BEGIN_NAMESPACE
 
-class QMultimediaQmlModule : public QDeclarativeExtensionPlugin
+QML_DECLARE_TYPE(QSoundEffect)
+
+class QMultimediaDeclarativeModule : public QDeclarativeExtensionPlugin
 {
     Q_OBJECT
 public:
     virtual void registerTypes(const char *uri)
     {
-        QtMultimedia::qRegisterDeclarativeElements(uri);
+        Q_ASSERT(QLatin1String(uri) == QLatin1String("Qt.multimedia"));
+
+        qmlRegisterType<QSoundEffect>(uri, 4, 7, "SoundEffect");
+        qmlRegisterType<QDeclarativeAudio>(uri, 4, 7, "Audio");
+        qmlRegisterType<QDeclarativeVideo>(uri, 4, 7, "Video");
     }
 };
 
@@ -59,5 +70,5 @@ QT_END_NAMESPACE
 
 #include "multimedia.moc"
 
-Q_EXPORT_PLUGIN2(qmultimediaqmlmodule, QT_PREPEND_NAMESPACE(QMultimediaQmlModule));
+Q_EXPORT_PLUGIN2(qmultimediadeclarativemodule, QT_PREPEND_NAMESPACE(QMultimediaDeclarativeModule));
 
diff --git a/src/plugins/qdeclarativemodules/multimedia/multimedia.pro b/src/plugins/qdeclarativemodules/multimedia/multimedia.pro
index d8ad18e..7b63e7c 100644
--- a/src/plugins/qdeclarativemodules/multimedia/multimedia.pro
+++ b/src/plugins/qdeclarativemodules/multimedia/multimedia.pro
@@ -3,7 +3,18 @@ include(../../qpluginbase.pri)
 
 QT += multimedia declarative
 
-SOURCES += multimedia.cpp
+HEADERS += \
+        qdeclarativeaudio_p.h \
+        qdeclarativemediabase_p.h \
+        qdeclarativevideo_p.h \
+        qmetadatacontrolmetaobject_p.h \
+
+SOURCES += \
+        multimedia.cpp \
+        qdeclarativeaudio.cpp \
+        qdeclarativemediabase.cpp \
+        qdeclarativevideo.cpp \
+        qmetadatacontrolmetaobject.cpp
 
 QTDIR_build:DESTDIR = $$QT_BUILD_TREE/imports/Qt/multimedia
 target.path = $$[QT_INSTALL_IMPORTS]/Qt/multimedia
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio.cpp b/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio.cpp
new file mode 100644
index 0000000..df2888c
--- /dev/null
+++ b/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio.cpp
@@ -0,0 +1,327 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarativeaudio_p.h"
+
+#include <QtMultimedia/qmediaplayercontrol.h>
+
+QT_BEGIN_NAMESPACE
+
+
+/*!
+    \qmlclass Audio QDeclarativeAudio
+    \since 4.7
+    \brief The Audio element allows you to add audio playback to a scene.
+
+    \qml
+    Audio { source: "audio/song.mp3" }
+    \endqml
+
+    \sa Video
+*/
+
+/*!
+    \internal
+    \class QDeclarativeAudio
+    \brief The QDeclarativeAudio class provides an audio item that you can add to a QDeclarativeView.
+*/
+
+void QDeclarativeAudio::_q_error(int errorCode, const QString &errorString)
+{
+    m_error = QMediaPlayer::Error(errorCode);
+    m_errorString = errorString;
+
+    emit error(Error(errorCode), errorString);
+    emit errorChanged();
+}
+
+
+QDeclarativeAudio::QDeclarativeAudio(QObject *parent)
+    : QObject(parent)
+{
+    setObject(this);
+}
+
+QDeclarativeAudio::~QDeclarativeAudio()
+{
+    shutdown();
+}
+
+/*!
+    \qmlmethod Audio::play()
+
+    Starts playback of the media.
+
+    Sets the \l playing property to true, and the \l paused property to false.
+*/
+
+void QDeclarativeAudio::play()
+{    
+    m_playerControl->play();
+
+    if (m_paused) {
+        m_paused = false;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlmethod Audio::pause()
+
+    Pauses playback of the media.
+
+    Sets the \l playing and \l paused properties to true.
+*/
+
+void QDeclarativeAudio::pause()
+{
+    m_playerControl->pause();
+
+    if (!m_paused && m_state == QMediaPlayer::PausedState) {
+        m_paused = true;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlmethod Audio::stop()
+
+    Stops playback of the media.
+
+    Sets the \l playing and \l paused properties to false.
+*/
+
+void QDeclarativeAudio::stop()
+{
+    m_playerControl->stop();
+
+    if (m_paused) {
+        m_paused = false;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlproperty url Audio::source
+
+    This property holds the source URL of the media.
+*/
+
+/*!
+    \qmlproperty bool Audio::playing
+
+    This property holds whether the media is playing.
+
+    Defaults to false, and can be set to true to start playback.
+*/
+
+/*!
+    \qmlproperty bool Audio::paused
+
+    This property holds whether the media is paused.
+
+    Defaults to false, and can be set to true to pause playback.
+*/
+
+/*!
+    \qmlsignal Audio::onStarted()
+
+    This handler is called when playback is started.
+*/
+
+/*!
+    \qmlsignal Audio::onResumed()
+
+    This handler is called when playback is resumed from the paused state.
+*/
+
+/*!
+    \qmlsignal Audio::onPaused()
+
+    This handler is called when playback is paused.
+*/
+
+/*!
+    \qmlsignal Audio::onStopped()
+
+    This handler is called when playback is stopped.
+*/
+
+/*!
+    \qmlproperty enum Audio::status
+
+    This property holds the status of media loading. It can be one of:
+
+    \list
+    \o NoMedia - no media has been set.
+    \o Loading - the media is currently being loaded.
+    \o Loaded - the media has been loaded.
+    \o Buffering - the media is buffering data.
+    \o Stalled - playback has been interrupted while the media is buffering data.
+    \o Buffered - the media has buffered data.
+    \o EndOfMedia - the media has played to the end.
+    \o InvalidMedia - the media cannot be played.
+    \o UnknownStatus - the status of the media is unknown.
+    \endlist
+*/
+
+QDeclarativeAudio::Status QDeclarativeAudio::status() const
+{
+    return Status(m_status);
+}
+
+/*!
+    \qmlsignal Audio::onLoaded()
+
+    This handler is called when the media source has been loaded.
+*/
+
+/*!
+    \qmlsignal Audio::onBuffering()
+
+    This handler is called when the media  starts buffering.
+*/
+
+/*!
+    \qmlsignal Audio::onStalled()
+
+    This handler is called when playback has stalled while the media buffers.
+*/
+
+/*!
+    \qmlsignal Audio::onBuffered()
+
+    This handler is called when the media has finished buffering.
+*/
+
+/*!
+    \qmlsignal Audio::onEndOfMedia()
+
+    This handler is called when playback stops because end of the media has been reached.
+*/
+/*!
+    \qmlproperty int Audio::duration
+
+    This property holds the duration of the media in milliseconds.
+
+    If the media doesn't have a fixed duration (a live stream for example) this will be 0.
+*/
+
+/*!
+    \qmlproperty int Audio::position
+
+    This property holds the current playback position in milliseconds.
+
+    If the \l seekable property is true, this property can be set to seek to a new position.
+*/
+
+/*!
+    \qmlproperty qreal Audio::volume
+
+    This property holds the volume of the audio output, from 0.0 (silent) to 1.0 (maximum volume).
+*/
+
+/*!
+    \qmlproperty bool Audio::muted
+
+    This property holds whether the audio output is muted.
+*/
+
+/*!
+    \qmlproperty qreal Audio::bufferProgress
+
+    This property holds how much of the data buffer is currently filled, from 0.0 (empty) to 1.0
+    (full).
+*/
+
+/*!
+    \qmlproperty bool Audio::seekable
+
+    This property holds whether position of the audio can be changed.
+
+    If true; setting a \l position value will cause playback to seek to the new position.
+*/
+
+/*!
+    \qmlproperty qreal Audio::playbackRate
+
+    This property holds the rate at which audio is played at as a multiple of the normal rate.
+*/
+
+/*!
+    \qmlproperty enum Audio::error
+
+    This property holds the error state of the audio.  It can be one of:
+
+    \list
+    \o NoError - there is no current error.
+    \o ResourceError - the audio cannot be played due to a problem allocating resources.
+    \o FormatError - the audio format is not supported.
+    \o NetworkError - the audio cannot be played due to network issues.
+    \o AccessDenied - the audio cannot be played due to insufficient permissions.
+    \o ServiceMissing -  the audio cannot be played because the media service could not be
+    instantiated.
+    \endlist
+*/
+
+QDeclarativeAudio::Error QDeclarativeAudio::error() const
+{
+    return Error(m_error);
+}
+
+/*!
+    \qmlproperty string Audio::errorString
+
+    This property holds a string describing the current error condition in more detail.
+*/
+
+/*!
+    \qmlsignal Audio::onError(error, errorString)
+
+    This handler is called when an \l {Error}{error} has occurred.  The errorString parameter
+    may contain more detailed information about the error.
+*/
+
+QT_END_NAMESPACE
+
+#include "moc_qdeclarativeaudio_p.cpp"
+
+
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h b/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h
new file mode 100644
index 0000000..9881dbc
--- /dev/null
+++ b/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h
@@ -0,0 +1,173 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVEAUDIO_P_H
+#define QDECLARATIVEAUDIO_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qdeclarativemediabase_p.h"
+
+#include <QtCore/qbasictimer.h>
+#include <QtDeclarative/qdeclarativeitem.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QTimerEvent;
+
+class QDeclarativeAudio : public QObject, public QDeclarativeMediaBase, public QDeclarativeParserStatus
+{
+    Q_OBJECT
+    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
+    Q_PROPERTY(bool playing READ isPlaying WRITE setPlaying NOTIFY playingChanged)
+    Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
+    Q_PROPERTY(Status status READ status NOTIFY statusChanged)
+    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
+    Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
+    Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged)
+    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
+    Q_PROPERTY(int bufferProgress READ bufferProgress NOTIFY bufferProgressChanged)
+    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
+    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
+    Q_PROPERTY(Error error READ error NOTIFY errorChanged)
+    Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
+    Q_ENUMS(Status)
+    Q_ENUMS(Error)
+    Q_INTERFACES(QDeclarativeParserStatus)
+public:
+    enum Status
+    {
+        UnknownStatus = QMediaPlayer::UnknownMediaStatus,
+        NoMedia       = QMediaPlayer::NoMedia,
+        Loading       = QMediaPlayer::LoadingMedia,
+        Loaded        = QMediaPlayer::LoadedMedia,
+        Stalled       = QMediaPlayer::StalledMedia,
+        Buffering     = QMediaPlayer::BufferingMedia,
+        Buffered      = QMediaPlayer::BufferedMedia,
+        EndOfMedia    = QMediaPlayer::EndOfMedia,
+        InvalidMedia  = QMediaPlayer::InvalidMedia
+    };
+
+    enum Error
+    {
+        NoError        = QMediaPlayer::NoError,
+        ResourceError  = QMediaPlayer::ResourceError,
+        FormatError    = QMediaPlayer::FormatError,
+        NetworkError   = QMediaPlayer::NetworkError,
+        AccessDenied   = QMediaPlayer::AccessDeniedError,
+        ServiceMissing = QMediaPlayer::ServiceMissingError
+    };
+
+    QDeclarativeAudio(QObject *parent = 0);
+    ~QDeclarativeAudio();
+
+    Status status() const;
+    Error error() const;
+
+public Q_SLOTS:
+    void play();
+    void pause();
+    void stop();
+
+Q_SIGNALS:
+    void sourceChanged();
+
+    void playingChanged();
+    void pausedChanged();
+
+    void started();
+    void resumed();
+    void paused();
+    void stopped();
+
+    void statusChanged();
+
+    void loaded();
+    void buffering();
+    void stalled();
+    void buffered();
+    void endOfMedia();
+
+    void durationChanged();
+    void positionChanged();
+
+    void volumeChanged();
+    void mutedChanged();
+
+    void bufferProgressChanged();
+
+    void seekableChanged();
+    void playbackRateChanged();
+
+    void errorChanged();
+    void error(QDeclarativeAudio::Error error, const QString &errorString);
+
+private Q_SLOTS:
+    void _q_error(int, const QString &);
+
+private:
+    Q_DISABLE_COPY(QDeclarativeAudio)
+    Q_PRIVATE_SLOT(mediaBase(), void _q_stateChanged(QMediaPlayer::State))
+    Q_PRIVATE_SLOT(mediaBase(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
+    Q_PRIVATE_SLOT(mediaBase(), void _q_metaDataChanged())
+
+    inline QDeclarativeMediaBase *mediaBase() { return this; }
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeAudio))
+
+QT_END_HEADER
+
+#endif
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp b/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp
new file mode 100644
index 0000000..8e87e44
--- /dev/null
+++ b/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp
@@ -0,0 +1,413 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarativemediabase_p.h"
+
+#include <QtCore/qcoreevent.h>
+#include <QtCore/qurl.h>
+
+#include <QtMultimedia/qmediaplayercontrol.h>
+#include <QtMultimedia/qmediaservice.h>
+#include <QtMultimedia/qmediaserviceprovider.h>
+#include <QtMultimedia/qmetadatacontrol.h>
+#include "qmetadatacontrolmetaobject_p.h"
+
+
+
+QT_BEGIN_NAMESPACE
+
+
+class QDeclarativeMediaBaseObject : public QMediaObject
+{
+public:
+    QDeclarativeMediaBaseObject(QMediaService *service)
+        : QMediaObject(0, service)
+    {
+    }
+};
+
+class QDeclarativeMediaBasePlayerControl : public QMediaPlayerControl
+{
+public:
+    QDeclarativeMediaBasePlayerControl(QObject *parent)
+        : QMediaPlayerControl(parent)
+    {
+    }
+
+    QMediaPlayer::State state() const { return QMediaPlayer::StoppedState; }
+    QMediaPlayer::MediaStatus mediaStatus() const { return QMediaPlayer::NoMedia; }
+
+    qint64 duration() const { return 0; }
+    qint64 position() const { return 0; }
+    void setPosition(qint64) {}
+    int volume() const { return 0; }
+    void setVolume(int) {}
+    bool isMuted() const { return false; }
+    void setMuted(bool) {}
+    int bufferStatus() const { return 0; }
+    bool isAudioAvailable() const { return false; }
+    bool isVideoAvailable() const { return false; }
+    bool isSeekable() const { return false; }
+    QMediaTimeRange availablePlaybackRanges() const { return QMediaTimeRange(); }
+    qreal playbackRate() const { return 1; }
+    void setPlaybackRate(qreal) {}
+    QMediaContent media() const { return QMediaContent(); }
+    const QIODevice *mediaStream() const { return 0; }
+    void setMedia(const QMediaContent &, QIODevice *) {}
+
+    void play() {}
+    void pause() {}
+    void stop() {}
+};
+
+class QDeclarativeMediaBaseAnimation : public QObject
+{
+public:
+    QDeclarativeMediaBaseAnimation(QDeclarativeMediaBase *media)
+        : m_media(media)
+    {
+    }
+
+    void start() { if (!m_timer.isActive()) m_timer.start(500, this); }
+    void stop() { m_timer.stop(); }
+
+protected:
+    void timerEvent(QTimerEvent *event)
+    {
+        if (event->timerId() == m_timer.timerId()) {
+            event->accept();
+
+            if (m_media->m_state == QMediaPlayer::PlayingState)
+                emit m_media->positionChanged();
+            if (m_media->m_status == QMediaPlayer::BufferingMedia || QMediaPlayer::StalledMedia)
+                emit m_media->bufferProgressChanged();
+        } else {
+            QObject::timerEvent(event);
+        }
+    }
+
+private:
+    QDeclarativeMediaBase *m_media;
+    QBasicTimer m_timer;
+};
+
+void QDeclarativeMediaBase::_q_stateChanged(QMediaPlayer::State state)
+{
+    if (state != m_state) {
+        QMediaPlayer::State oldState = m_state;
+
+        m_state = state;
+
+        if (state == QMediaPlayer::StoppedState) {
+            emit stopped();
+            emit playingChanged();
+        } else if (oldState == QMediaPlayer::StoppedState) {
+            emit started();
+            emit playingChanged();
+        } else if (oldState  == QMediaPlayer::PausedState) {
+            m_paused = false;
+
+            emit resumed();
+            emit pausedChanged();
+        }
+
+        if (state == m_state && state == QMediaPlayer::PausedState) {
+            bool wasPaused = m_paused;
+
+            m_paused = true;
+
+            emit paused();
+
+            if (!wasPaused)
+                emit pausedChanged();
+        }
+
+        if (m_state == QMediaPlayer::PlayingState
+                || m_status == QMediaPlayer::BufferingMedia
+                || m_status == QMediaPlayer::StalledMedia) {
+            m_animation->start();
+        } else {
+            m_animation->stop();
+        }
+    }
+}
+
+void QDeclarativeMediaBase::_q_mediaStatusChanged(QMediaPlayer::MediaStatus status)
+{
+    if (status != m_status) {
+        m_status = status;
+
+        switch (status) {
+        case QMediaPlayer::LoadedMedia:
+            emit loaded();
+            break;
+        case QMediaPlayer::BufferingMedia:
+            emit buffering();
+            break;
+        case QMediaPlayer::BufferedMedia:
+            emit buffered();
+            break;
+        case QMediaPlayer::StalledMedia:
+            emit stalled();
+            break;
+        case QMediaPlayer::EndOfMedia:
+            emit endOfMedia();
+            break;
+        default:
+            break;
+        }
+
+        emit statusChanged();
+
+        if (m_state == QMediaPlayer::PlayingState
+                || m_status == QMediaPlayer::BufferingMedia
+                || m_status == QMediaPlayer::StalledMedia) {
+            m_animation->start();
+        } else {
+            m_animation->stop();
+        }
+    }
+}
+
+void QDeclarativeMediaBase::_q_metaDataChanged()
+{
+    m_metaObject->metaDataChanged();
+}
+
+QDeclarativeMediaBase::QDeclarativeMediaBase()
+    : m_mediaService(0)
+    , m_playerControl(0)
+    , m_mediaObject(0)
+    , m_mediaProvider(0)
+    , m_metaDataControl(0)
+    , m_metaObject(0)
+    , m_animation(0)
+    , m_state(QMediaPlayer::StoppedState)
+    , m_status(QMediaPlayer::NoMedia)
+    , m_error(QMediaPlayer::NoError)
+    , m_paused(false)
+{
+}
+
+QDeclarativeMediaBase::~QDeclarativeMediaBase()
+{
+}
+
+void QDeclarativeMediaBase::shutdown()
+{
+    delete m_metaObject;
+    delete m_mediaObject;
+
+    if (m_mediaProvider)
+        m_mediaProvider->releaseService(m_mediaService);
+
+    delete m_animation;
+
+}
+
+void QDeclarativeMediaBase::setObject(QObject *object)
+{
+    if ((m_mediaProvider = QMediaServiceProvider::defaultServiceProvider())) {
+        if ((m_mediaService = m_mediaProvider->requestService(Q_MEDIASERVICE_MEDIAPLAYER))) {
+            m_playerControl = qobject_cast<QMediaPlayerControl *>(
+                    m_mediaService->control(QMediaPlayerControl_iid));
+            m_metaDataControl = qobject_cast<QMetaDataControl *>(
+                    m_mediaService->control(QMetaDataControl_iid));
+            m_mediaObject = new QDeclarativeMediaBaseObject(m_mediaService);
+        }
+    }
+
+    if (m_playerControl) {
+        QObject::connect(m_playerControl, SIGNAL(stateChanged(QMediaPlayer::State)),
+                object, SLOT(_q_stateChanged(QMediaPlayer::State)));
+        QObject::connect(m_playerControl, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
+                object, SLOT(_q_mediaStatusChanged(QMediaPlayer::MediaStatus)));
+        QObject::connect(m_playerControl, SIGNAL(mediaChanged(QMediaContent)),
+                object, SIGNAL(sourceChanged()));
+        QObject::connect(m_playerControl, SIGNAL(durationChanged(qint64)),
+                object, SIGNAL(durationChanged()));
+        QObject::connect(m_playerControl, SIGNAL(positionChanged(qint64)),
+                object, SIGNAL(positionChanged()));
+        QObject::connect(m_playerControl, SIGNAL(volumeChanged(int)),
+                object, SIGNAL(volumeChanged()));
+        QObject::connect(m_playerControl, SIGNAL(mutedChanged(bool)),
+                object, SIGNAL(mutedChanged()));
+        QObject::connect(m_playerControl, SIGNAL(bufferStatusChanged(int)),
+                object, SIGNAL(bufferProgressChanged()));
+        QObject::connect(m_playerControl, SIGNAL(seekableChanged(bool)),
+                object, SIGNAL(seekableChanged()));
+        QObject::connect(m_playerControl, SIGNAL(playbackRateChanged(qreal)),
+                object, SIGNAL(playbackRateChanged()));
+        QObject::connect(m_playerControl, SIGNAL(error(int,QString)),
+                object, SLOT(_q_error(int,QString)));
+
+        m_animation = new QDeclarativeMediaBaseAnimation(this);
+    } else {
+        m_error = QMediaPlayer::ServiceMissingError;
+
+        m_playerControl = new QDeclarativeMediaBasePlayerControl(object);
+    }
+
+    if (m_metaDataControl) {
+        m_metaObject = new QMetaDataControlMetaObject(m_metaDataControl, object);
+
+        QObject::connect(m_metaDataControl, SIGNAL(metaDataChanged()),
+                object, SLOT(_q_metaDataChanged()));
+    }
+}
+
+QUrl QDeclarativeMediaBase::source() const
+{
+    return m_playerControl->media().canonicalUrl();
+}
+
+void QDeclarativeMediaBase::setSource(const QUrl &url)
+{
+    if (m_error != QMediaPlayer::ServiceMissingError && m_error != QMediaPlayer::NoError) {
+        m_error = QMediaPlayer::NoError;
+        m_errorString = QString();
+
+        emit errorChanged();
+    }
+
+    m_playerControl->setMedia(QMediaContent(url), 0);
+}
+
+bool QDeclarativeMediaBase::isPlaying() const
+{
+    return m_state != QMediaPlayer::StoppedState;
+}
+
+void QDeclarativeMediaBase::setPlaying(bool playing)
+{
+    if (playing && m_state == QMediaPlayer::StoppedState) {
+        if (m_paused)
+            m_playerControl->pause();
+        else
+            m_playerControl->play();
+    } else if (!playing) {
+        m_playerControl->stop();
+    }
+}
+
+bool QDeclarativeMediaBase::isPaused() const
+{
+    return m_paused;
+}
+
+void QDeclarativeMediaBase::setPaused(bool paused)
+{
+    if (m_paused != paused) {
+        if (paused && m_state == QMediaPlayer::PlayingState) {
+            m_playerControl->pause();
+        } else if (!paused && m_state == QMediaPlayer::PausedState) {
+            m_playerControl->play();
+        } else {
+            m_paused = paused;
+
+            emit pausedChanged();
+        }
+    }
+}
+
+int QDeclarativeMediaBase::duration() const
+{
+    return m_playerControl->duration();
+}
+
+int QDeclarativeMediaBase::position() const
+{
+    return m_playerControl->position();
+
+}
+
+void QDeclarativeMediaBase::setPosition(int position)
+{
+    m_playerControl->setPosition(position);
+}
+
+qreal QDeclarativeMediaBase::volume() const
+{
+    return qreal(m_playerControl->volume()) / 100;
+}
+
+void QDeclarativeMediaBase::setVolume(qreal volume)
+{
+    m_playerControl->setVolume(qRound(volume * 100));
+}
+
+bool QDeclarativeMediaBase::isMuted() const
+{
+    return m_playerControl->isMuted();
+}
+
+void QDeclarativeMediaBase::setMuted(bool muted)
+{
+    m_playerControl->setMuted(muted);
+}
+
+qreal QDeclarativeMediaBase::bufferProgress() const
+{
+    return qreal(m_playerControl->bufferStatus()) / 100;
+}
+
+bool QDeclarativeMediaBase::isSeekable() const
+{
+    return m_playerControl->isSeekable();
+}
+
+qreal QDeclarativeMediaBase::playbackRate() const
+{
+    return m_playerControl->playbackRate();
+}
+
+void QDeclarativeMediaBase::setPlaybackRate(qreal rate)
+{
+    m_playerControl->setPlaybackRate(rate);
+}
+
+QString QDeclarativeMediaBase::errorString() const
+{
+    return m_errorString;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h b/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h
new file mode 100644
index 0000000..b40e84e
--- /dev/null
+++ b/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h
@@ -0,0 +1,168 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVEMEDIABASE_P_H
+#define QDECLARATIVEMEDIABASE_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qbasictimer.h>
+#include <QtMultimedia/qmediaplayer.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QMediaPlayerControl;
+class QMediaService;
+class QMediaServiceProvider;
+class QMetaDataControl;
+class QMetaDataControlMetaObject;
+class QDeclarativeMediaBaseAnimation;
+
+class QDeclarativeMediaBase
+{
+public:
+    QDeclarativeMediaBase();
+    virtual ~QDeclarativeMediaBase();
+
+    QUrl source() const;
+    void setSource(const QUrl &url);
+
+    bool isPlaying() const;
+    void setPlaying(bool playing);
+
+    bool isPaused() const;
+    void setPaused(bool paused);
+
+    int duration() const;
+
+    int position() const;
+    void setPosition(int position);
+
+    qreal volume() const;
+    void setVolume(qreal volume);
+
+    bool isMuted() const;
+    void setMuted(bool muted);
+
+    qreal bufferProgress() const;
+
+    bool isSeekable() const;
+
+    qreal playbackRate() const;
+    void setPlaybackRate(qreal rate);
+
+    QString errorString() const;
+
+    void _q_stateChanged(QMediaPlayer::State state);
+    void _q_mediaStatusChanged(QMediaPlayer::MediaStatus status);
+
+    void _q_metaDataChanged();
+
+protected:
+    void shutdown();
+
+    void setObject(QObject *object);
+
+    virtual void sourceChanged() = 0;
+
+    virtual void playingChanged() = 0;
+    virtual void pausedChanged() = 0;
+
+    virtual void started() = 0;
+    virtual void resumed() = 0;
+    virtual void paused() = 0;
+    virtual void stopped() = 0;
+
+    virtual void statusChanged() = 0;
+
+    virtual void loaded() = 0;
+    virtual void buffering() = 0;
+    virtual void stalled() = 0;
+    virtual void buffered() = 0;
+    virtual void endOfMedia() = 0;
+
+    virtual void durationChanged() = 0;
+    virtual void positionChanged() = 0;
+
+    virtual void volumeChanged() = 0;
+    virtual void mutedChanged() = 0;
+
+    virtual void bufferProgressChanged() = 0;
+
+    virtual void seekableChanged() = 0;
+    virtual void playbackRateChanged() = 0;
+
+    virtual void errorChanged() = 0;
+
+    QMediaService *m_mediaService;
+    QMediaPlayerControl *m_playerControl;
+
+    QMediaObject *m_mediaObject;
+    QMediaServiceProvider *m_mediaProvider;
+    QMetaDataControl *m_metaDataControl;
+    QMetaDataControlMetaObject *m_metaObject;
+    QDeclarativeMediaBaseAnimation *m_animation;
+
+    QMediaPlayer::State m_state;
+    QMediaPlayer::MediaStatus m_status;
+    QMediaPlayer::Error m_error;
+    bool m_paused;
+    QString m_errorString;
+
+    friend class QDeclarativeMediaBaseAnimation;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo.cpp b/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo.cpp
new file mode 100644
index 0000000..064f242
--- /dev/null
+++ b/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo.cpp
@@ -0,0 +1,945 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarativevideo_p.h"
+
+#include <QtMultimedia/qmediaplayercontrol.h>
+#include <QtMultimedia/qmediaservice.h>
+#include <QtMultimedia/private/qpaintervideosurface_p.h>
+#include <QtMultimedia/qvideooutputcontrol.h>
+#include <QtMultimedia/qvideorenderercontrol.h>
+
+
+QT_BEGIN_NAMESPACE
+
+
+void QDeclarativeVideo::_q_nativeSizeChanged(const QSizeF &size)
+{
+    setImplicitWidth(size.width());
+    setImplicitHeight(size.height());
+}
+
+void QDeclarativeVideo::_q_error(int errorCode, const QString &errorString)
+{
+    m_error = QMediaPlayer::Error(errorCode);
+    m_errorString = errorString;
+
+    emit error(Error(errorCode), errorString);
+    emit errorChanged();
+}
+
+
+/*!
+    \qmlclass Video QDeclarativeVideo
+    \since 4.7
+    \brief The Video element allows you to add videos to a scene.
+    \inherits Item
+
+    \qml
+    Video { source: "video/movie.mpg" }
+    \endqml
+
+    The video item supports untransformed, stretched, and uniformly scaled video presentation.
+    For a description of stretched uniformly scaled presentation, see the \l fillMode property
+    description.
+
+    The video item is only visible when the \l hasVideo property is true and the video is playing.
+
+    \sa Audio
+*/
+
+/*!
+    \internal
+    \class QDeclarativeVideo
+    \brief The QDeclarativeVideo class provides a video item that you can add to a QDeclarativeView.
+*/
+
+QDeclarativeVideo::QDeclarativeVideo(QDeclarativeItem *parent)
+    : QDeclarativeItem(parent)
+    , m_graphicsItem(0)
+
+{
+    m_graphicsItem = new QGraphicsVideoItem(this);
+    connect(m_graphicsItem, SIGNAL(nativeSizeChanged(QSizeF)),
+            this, SLOT(_q_nativeSizeChanged(QSizeF)));
+
+    setObject(this);
+
+    if (m_mediaService) {
+        connect(m_playerControl, SIGNAL(audioAvailableChanged(bool)),
+                this, SIGNAL(hasAudioChanged()));
+        connect(m_playerControl, SIGNAL(videoAvailableChanged(bool)),
+                this, SIGNAL(hasVideoChanged()));
+
+        m_graphicsItem->setMediaObject(m_mediaObject);
+    }
+}
+
+QDeclarativeVideo::~QDeclarativeVideo()
+{
+    shutdown();
+
+    delete m_graphicsItem;
+}
+
+/*!
+    \qmlproperty url Video::source
+
+    This property holds the source URL of the media.
+*/
+
+/*!
+    \qmlproperty bool Video::playing
+
+    This property holds whether the media is playing.
+
+    Defaults to false, and can be set to true to start playback.
+*/
+
+/*!
+    \qmlproperty bool Video::paused
+
+    This property holds whether the media is paused.
+
+    Defaults to false, and can be set to true to pause playback.
+*/
+
+/*!
+    \qmlsignal Video::onStarted()
+
+    This handler is called when playback is started.
+*/
+
+/*!
+    \qmlsignal Video::onResumed()
+
+    This handler is called when playback is resumed from the paused state.
+*/
+
+/*!
+    \qmlsignal Video::onPaused()
+
+    This handler is called when playback is paused.
+*/
+
+/*!
+    \qmlsignal Video::onStopped()
+
+    This handler is called when playback is stopped.
+*/
+
+/*!
+    \qmlproperty enum Video::status
+
+    This property holds the status of media loading. It can be one of:
+
+    \list
+    \o NoMedia - no media has been set.
+    \o Loading - the media is currently being loaded.
+    \o Loaded - the media has been loaded.
+    \o Buffering - the media is buffering data.
+    \o Stalled - playback has been interrupted while the media is buffering data.
+    \o Buffered - the media has buffered data.
+    \o EndOfMedia - the media has played to the end.
+    \o InvalidMedia - the media cannot be played.
+    \o UnknownStatus - the status of the media is cannot be determined.
+    \endlist
+*/
+
+QDeclarativeVideo::Status QDeclarativeVideo::status() const
+{
+    return Status(m_status);
+}
+
+/*!
+    \qmlsignal Video::onLoaded()
+
+    This handler is called when the media source has been loaded.
+*/
+
+/*!
+    \qmlsignal Video::onBuffering()
+
+    This handler is called when the media starts buffering.
+*/
+
+/*!
+    \qmlsignal Video::onStalled()
+
+    This handler is called when playback has stalled while the media buffers.
+*/
+
+/*!
+    \qmlsignal Video::onBuffered()
+
+    This handler is called when the media has finished buffering.
+*/
+
+/*!
+    \qmlsignal Video::onEndOfMedia()
+
+    This handler is called when playback stops because end of the media has been reached.
+*/
+
+/*!
+    \qmlproperty int Video::duration
+
+    This property holds the duration of the media in milliseconds.
+
+    If the media doesn't have a fixed duration (a live stream for example) this will be 0.
+*/
+
+/*!
+    \qmlproperty int Video::position
+
+    This property holds the current playback position in milliseconds.
+*/
+
+/*!
+    \qmlproperty qreal Video::volume
+
+    This property holds the volume of the audio output, from 0.0 (silent) to 1.0 (maximum volume).
+*/
+
+/*!
+    \qmlproperty bool Video::muted
+
+    This property holds whether the audio output is muted.
+*/
+
+/*!
+    \qmlproperty bool Video::hasAudio
+
+    This property holds whether the media contains audio.
+*/
+
+bool QDeclarativeVideo::hasAudio() const
+{
+    return m_playerControl->isAudioAvailable();
+}
+
+/*!
+    \qmlproperty bool Video::hasVideo
+
+    This property holds whether the media contains video.
+*/
+
+bool QDeclarativeVideo::hasVideo() const
+{
+    return m_playerControl->isVideoAvailable();
+}
+
+/*!
+    \qmlproperty qreal Video::bufferProgress
+
+    This property holds how much of the data buffer is currently filled, from 0.0 (empty) to 1.0
+    (full).
+*/
+
+/*!
+    \qmlproperty bool Video::seekable
+
+    This property holds whether position of the video can be changed.
+*/
+
+/*!
+    \qmlproperty qreal Video::playbackRate
+
+    This property holds the rate at which video is played at as a multiple of the normal rate.
+*/
+
+/*!
+    \qmlproperty enum Video::error
+
+    This property holds the error state of the video.  It can be one of:
+
+    \list
+    \o NoError - there is no current error.
+    \o ResourceError - the video cannot be played due to a problem allocating resources.
+    \o FormatError - the video format is not supported.
+    \o NetworkError - the video cannot be played due to network issues.
+    \o AccessDenied - the video cannot be played due to insufficient permissions.
+    \o ServiceMissing -  the video cannot be played because the media service could not be
+    instantiated.
+    \endlist
+*/
+
+
+QDeclarativeVideo::Error QDeclarativeVideo::error() const
+{
+    return Error(m_error);
+}
+
+/*!
+    \qmlproperty string Video::errorString
+
+    This property holds a string describing the current error condition in more detail.
+*/
+
+/*!
+    \qmlsignal Video::onError(error, errorString)
+
+    This handler is called when an \l {Error}{error} has occurred.  The errorString parameter
+    may contain more detailed information about the error.
+*/
+
+/*!
+    \qmlproperty enum Video::fillMode
+
+    Set this property to define how the video is scaled to fit the target area.
+
+    \list
+    \o Stretch - the video is scaled to fit.
+    \o PreserveAspectFit - the video is scaled uniformly to fit without cropping
+    \o PreserveAspectCrop - the video is scaled uniformly to fill, cropping if necessary
+    \endlist
+
+    The default fill mode is PreserveAspectFit.
+*/
+
+QDeclarativeVideo::FillMode QDeclarativeVideo::fillMode() const
+{
+    return FillMode(m_graphicsItem->aspectRatioMode());
+}
+
+void QDeclarativeVideo::setFillMode(FillMode mode)
+{
+    m_graphicsItem->setAspectRatioMode(Qt::AspectRatioMode(mode));
+}
+
+/*!
+    \qmlmethod Video::play()
+
+    Starts playback of the media.
+
+    Sets the \l playing property to true, and the \l paused property to false.
+*/
+
+void QDeclarativeVideo::play()
+{
+    m_playerControl->play();
+
+    if (m_paused) {
+        m_paused = false;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlmethod Video::pause()
+
+    Pauses playback of the media.
+
+    Sets the \l playing and \l paused properties to true.
+*/
+
+void QDeclarativeVideo::pause()
+{
+    m_playerControl->pause();
+
+    if (!m_paused && m_state == QMediaPlayer::PausedState) {
+        m_paused = true;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlmethod Video::stop()
+
+    Stops playback of the media.
+
+    Sets the \l playing and \l paused properties to false.
+*/
+
+void QDeclarativeVideo::stop()
+{
+    m_playerControl->stop();
+
+    if (m_paused) {
+        m_paused = false;
+        emit pausedChanged();
+    }
+}
+
+void QDeclarativeVideo::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *)
+{
+}
+
+void QDeclarativeVideo::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+    m_graphicsItem->setSize(newGeometry.size());
+
+    QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
+}
+
+QT_END_NAMESPACE
+
+// ***************************************
+// Documentation for meta-data properties.
+// ***************************************
+
+/*!
+    \qmlproperty variant Video::title
+
+    This property holds the tile of the media.
+
+    \sa {QtMultimedia::Title}
+*/
+
+/*!
+    \qmlproperty variant Video::subTitle
+
+    This property holds the sub-title of the media.
+
+    \sa {QtMultimedia::SubTitle}
+*/
+
+/*!
+    \qmlproperty variant Video::author
+
+    This property holds the author of the media.
+
+    \sa {QtMultimedia::Author}
+*/
+
+/*!
+    \qmlproperty variant Video::comment
+
+    This property holds a user comment about the media.
+
+    \sa {QtMultimedia::Comment}
+*/
+
+/*!
+    \qmlproperty variant Video::description
+
+    This property holds a description of the media.
+
+    \sa {QtMultimedia::Description}
+*/
+
+/*!
+    \qmlproperty variant Video::category
+
+    This property holds the category of the media
+
+    \sa {QtMultimedia::Category}
+*/
+
+/*!
+    \qmlproperty variant Video::genre
+
+    This property holds the genre of the media.
+
+    \sa {QtMultimedia::Genre}
+*/
+
+/*!
+    \qmlproperty variant Video::year
+
+    This property holds the year of release of the media.
+
+    \sa {QtMultimedia::Year}
+*/
+
+/*!
+    \qmlproperty variant Video::date
+
+    This property holds the date of the media.
+
+    \sa {QtMultimedia::Date}
+*/
+
+/*!
+    \qmlproperty variant Video::userRating
+
+    This property holds a user rating of the media in the range of 0 to 100.
+
+    \sa {QtMultimedia::UserRating}
+*/
+
+/*!
+    \qmlproperty variant Video::keywords
+
+    This property holds a list of keywords describing the media.
+
+    \sa {QtMultimedia::Keywords}
+*/
+
+/*!
+    \qmlproperty variant Video::language
+
+    This property holds the language of the media, as an ISO 639-2 code.
+
+    \sa {QtMultimedia::Language}
+*/
+
+/*!
+    \qmlproperty variant Video::publisher
+
+    This property holds the publisher of the media.
+
+    \sa {QtMultimedia::Publisher}
+*/
+
+/*!
+    \qmlproperty variant Video::copyright
+
+    This property holds the media's copyright notice.
+
+    \sa {QtMultimedia::Copyright}
+*/
+
+/*!
+    \qmlproperty variant Video::parentalRating
+
+    This property holds the parental rating of the media.
+
+    \sa {QtMultimedia::ParentalRating}
+*/
+
+/*!
+    \qmlproperty variant Video::ratingOrganisation
+
+    This property holds the name of the rating organisation responsible for the
+    parental rating of the media.
+
+    \sa {QtMultimedia::RatingOrganisation}
+*/
+
+/*!
+    \qmlproperty variant Video::size
+
+    This property property holds the size of the media in bytes.
+
+    \sa {QtMultimedia::Size}
+*/
+
+/*!
+    \qmlproperty variant Video::mediaType
+
+    This property holds the type of the media.
+
+    \sa {QtMultimedia::MediaType}
+*/
+
+/*!
+    \qmlproperty variant Video::audioBitRate
+
+    This property holds the bit rate of the media's audio stream ni bits per
+    second.
+
+    \sa {QtMultimedia::AudioBitRate}
+*/
+
+/*!
+    \qmlproperty variant Video::audioCodec
+
+    This property holds the encoding of the media audio stream.
+
+    \sa {QtMultimedia::AudioCodec}
+*/
+
+/*!
+    \qmlproperty variant Video::averageLevel
+
+    This property holds the average volume level of the media.
+
+    \sa {QtMultimedia::AverageLevel}
+*/
+
+/*!
+    \qmlproperty variant Video::channelCount
+
+    This property holds the number of channels in the media's audio stream.
+
+    \sa {QtMultimedia::ChannelCount}
+*/
+
+/*!
+    \qmlproperty variant Video::peakValue
+
+    This property holds the peak volume of media's audio stream.
+
+    \sa {QtMultimedia::PeakValue}
+*/
+
+/*!
+    \qmlproperty variant Video::sampleRate
+
+    This property holds the sample rate of the media's audio stream in hertz.
+
+    \sa {QtMultimedia::SampleRate}
+*/
+
+/*!
+    \qmlproperty variant Video::albumTitle
+
+    This property holds the title of the album the media belongs to.
+
+    \sa {QtMultimedia::AlbumTitle}
+*/
+
+/*!
+    \qmlproperty variant Video::albumArtist
+
+    This property holds the name of the principal artist of the album the media
+    belongs to.
+
+    \sa {QtMultimedia::AlbumArtist}
+*/
+
+/*!
+    \qmlproperty variant Video::contributingArtist
+
+    This property holds the names of artists contributing to the media.
+
+    \sa {QtMultimedia::ContributingArtist}
+*/
+
+/*!
+    \qmlproperty variant Video::composer
+
+    This property holds the composer of the media.
+
+    \sa {QtMultimedia::Composer}
+*/
+
+/*!
+    \qmlproperty variant Video::conductor
+
+    This property holds the conductor of the media.
+
+    \sa {QtMultimedia::Conductor}
+*/
+
+/*!
+    \qmlproperty variant Video::lyrics
+
+    This property holds the lyrics to the media.
+
+    \sa {QtMultimedia::Lyrics}
+*/
+
+/*!
+    \qmlproperty variant Video::mood
+
+    This property holds the mood of the media.
+
+    \sa {QtMultimedia::Mood}
+*/
+
+/*!
+    \qmlproperty variant Video::trackNumber
+
+    This property holds the track number of the media.
+
+    \sa {QtMultimedia::TrackNumber}
+*/
+
+/*!
+    \qmlproperty variant Video::trackCount
+
+    This property holds the number of track on the album containing the media.
+
+    \sa {QtMultimedia::TrackNumber}
+*/
+
+/*!
+    \qmlproperty variant Video::coverArtUrlSmall
+
+    This property holds the URL of a small cover art image.
+
+    \sa {QtMultimedia::CoverArtUrlSmall}
+*/
+
+/*!
+    \qmlproperty variant Video::coverArtUrlLarge
+
+    This property holds the URL of a large cover art image.
+
+    \sa {QtMultimedia::CoverArtUrlLarge}
+*/
+
+/*!
+    \qmlproperty variant Video::resolution
+
+    This property holds the dimension of an image or video.
+
+    \sa {QtMultimedia::Resolution}
+*/
+
+/*!
+    \qmlproperty variant Video::pixelAspectRatio
+
+    This property holds the pixel aspect ratio of an image or video.
+
+    \sa {QtMultimedia::PixelAspectRatio}
+*/
+
+/*!
+    \qmlproperty variant Video::videoFrameRate
+
+    This property holds the frame rate of the media's video stream.
+
+    \sa {QtMultimedia::VideoFrameRate}
+*/
+
+/*!
+    \qmlproperty variant Video::videoBitRate
+
+    This property holds the bit rate of the media's video stream in bits per
+    second.
+
+    \sa {QtMultimedia::VideoBitRate}
+*/
+
+/*!
+    \qmlproperty variant Video::videoCodec
+
+    This property holds the encoding of the media's video stream.
+
+    \sa {QtMultimedia::VideoCodec}
+*/
+
+/*!
+    \qmlproperty variant Video::posterUrl
+
+    This property holds the URL of a poster image.
+
+    \sa {QtMultimedia::PosterUrl}
+*/
+
+/*!
+    \qmlproperty variant Video::chapterNumber
+
+    This property holds the chapter number of the media.
+
+    \sa {QtMultimedia::ChapterNumber}
+*/
+
+/*!
+    \qmlproperty variant Video::director
+
+    This property holds the director of the media.
+
+    \sa {QtMultimedia::Director}
+*/
+
+/*!
+    \qmlproperty variant Video::leadPerformer
+
+    This property holds the lead performer in the media.
+
+    \sa {QtMultimedia::LeadPerformer}
+*/
+
+/*!
+    \qmlproperty variant Video::writer
+
+    This property holds the writer of the media.
+
+    \sa {QtMultimedia::Writer}
+*/
+
+// The remaining properties are related to photos, and are technically
+// available but will certainly never have values.
+#ifndef Q_QDOC
+
+/*!
+    \qmlproperty variant Video::cameraManufacturer
+
+    \sa {QtMultimedia::CameraManufacturer}
+*/
+
+/*!
+    \qmlproperty variant Video::cameraModel
+
+    \sa {QtMultimedia::CameraModel}
+*/
+
+/*!
+    \qmlproperty variant Video::event
+
+    \sa {QtMultimedia::Event}
+*/
+
+/*!
+    \qmlproperty variant Video::subject
+
+    \sa {QtMultimedia::Subject}
+*/
+
+/*!
+    \qmlproperty variant Video::orientation
+
+    \sa {QtMultimedia::Orientation}
+*/
+
+/*!
+    \qmlproperty variant Video::exposureTime
+
+    \sa {QtMultimedia::ExposureTime}
+*/
+
+/*!
+    \qmlproperty variant Video::fNumber
+
+    \sa {QtMultimedia::FNumber}
+*/
+
+/*!
+    \qmlproperty variant Video::exposureProgram
+
+    \sa {QtMultimedia::ExposureProgram}
+*/
+
+/*!
+    \qmlproperty variant Video::isoSpeedRatings
+
+    \sa {QtMultimedia::ISOSpeedRatings}
+*/
+
+/*!
+    \qmlproperty variant Video::exposureBiasValue
+
+    \sa {QtMultimedia::ExposureBiasValue}
+*/
+
+/*!
+    \qmlproperty variant Video::dateTimeDigitized
+
+    \sa {QtMultimedia::DateTimeDigitized}
+*/
+
+/*!
+    \qmlproperty variant Video::subjectDistance
+
+    \sa {QtMultimedia::SubjectDistance}
+*/
+
+/*!
+    \qmlproperty variant Video::meteringMode
+
+    \sa {QtMultimedia::MeteringMode}
+*/
+
+/*!
+    \qmlproperty variant Video::lightSource
+
+    \sa {QtMultimedia::LightSource}
+*/
+
+/*!
+    \qmlproperty variant Video::flash
+
+    \sa {QtMultimedia::Flash}
+*/
+
+/*!
+    \qmlproperty variant Video::focalLength
+
+    \sa {QtMultimedia::FocalLength}
+*/
+
+/*!
+    \qmlproperty variant Video::exposureMode
+
+    \sa {QtMultimedia::ExposureMode}
+*/
+
+/*!
+    \qmlproperty variant Video::whiteBalance
+
+    \sa {QtMultimedia::WhiteBalance}
+*/
+
+/*!
+    \qmlproperty variant Video::DigitalZoomRatio
+
+    \sa {QtMultimedia::DigitalZoomRatio}
+*/
+
+/*!
+    \qmlproperty variant Video::focalLengthIn35mmFilm
+
+    \sa {QtMultimedia::FocalLengthIn35mmFile}
+*/
+
+/*!
+    \qmlproperty variant Video::sceneCaptureType
+
+    \sa {QtMultimedia::SceneCaptureType}
+*/
+
+/*!
+    \qmlproperty variant Video::gainControl
+
+    \sa {QtMultimedia::GainControl}
+*/
+
+/*!
+    \qmlproperty variant Video::contrast
+
+    \sa {QtMultimedia::contrast}
+*/
+
+/*!
+    \qmlproperty variant Video::saturation
+
+    \sa {QtMultimedia::Saturation}
+*/
+
+/*!
+    \qmlproperty variant Video::sharpness
+
+    \sa {QtMultimedia::Sharpness}
+*/
+
+/*!
+    \qmlproperty variant Video::deviceSettingDescription
+
+    \sa {QtMultimedia::DeviceSettingDescription}
+*/
+
+#endif
+
+#include "moc_qdeclarativevideo_p.cpp"
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h b/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h
new file mode 100644
index 0000000..fb13519
--- /dev/null
+++ b/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h
@@ -0,0 +1,204 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVEVIDEO_H
+#define QDECLARATIVEVIDEO_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qdeclarativemediabase_p.h"
+
+#include <QtMultimedia/qgraphicsvideoitem.h>
+
+#include <QtCore/qbasictimer.h>
+#include <QtDeclarative/qdeclarativeitem.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QTimerEvent;
+class QVideoSurfaceFormat;
+
+
+class QDeclarativeVideo : public QDeclarativeItem, public QDeclarativeMediaBase
+{
+    Q_OBJECT
+    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
+    Q_PROPERTY(bool playing READ isPlaying WRITE setPlaying NOTIFY playingChanged)
+    Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
+    Q_PROPERTY(Status status READ status NOTIFY statusChanged)
+    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
+    Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
+    Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged)
+    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
+    Q_PROPERTY(bool hasAudio READ hasAudio NOTIFY hasAudioChanged)
+    Q_PROPERTY(bool hasVideo READ hasVideo NOTIFY hasVideoChanged)
+    Q_PROPERTY(int bufferProgress READ bufferProgress NOTIFY bufferProgressChanged)
+    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
+    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
+    Q_PROPERTY(Error error READ error NOTIFY errorChanged)
+    Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
+    Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode)
+    Q_ENUMS(FillMode)
+    Q_ENUMS(Status)
+    Q_ENUMS(Error)
+public:
+    enum FillMode
+    {
+        Stretch            = Qt::IgnoreAspectRatio,
+        PreserveAspectFit  = Qt::KeepAspectRatio,
+        PreserveAspectCrop = Qt::KeepAspectRatioByExpanding
+    };
+
+    enum Status
+    {
+        UnknownStatus = QMediaPlayer::UnknownMediaStatus,
+        NoMedia       = QMediaPlayer::NoMedia,
+        Loading       = QMediaPlayer::LoadingMedia,
+        Loaded        = QMediaPlayer::LoadedMedia,
+        Stalled       = QMediaPlayer::StalledMedia,
+        Buffering     = QMediaPlayer::BufferingMedia,
+        Buffered      = QMediaPlayer::BufferedMedia,
+        EndOfMedia    = QMediaPlayer::EndOfMedia,
+        InvalidMedia  = QMediaPlayer::InvalidMedia
+    };
+
+    enum Error
+    {
+        NoError        = QMediaPlayer::NoError,
+        ResourceError  = QMediaPlayer::ResourceError,
+        FormatError    = QMediaPlayer::FormatError,
+        NetworkError   = QMediaPlayer::NetworkError,
+        AccessDenied   = QMediaPlayer::AccessDeniedError,
+        ServiceMissing = QMediaPlayer::ServiceMissingError
+    };
+
+    QDeclarativeVideo(QDeclarativeItem *parent = 0);
+    ~QDeclarativeVideo();
+
+    bool hasAudio() const;
+    bool hasVideo() const;
+
+    FillMode fillMode() const;
+    void setFillMode(FillMode mode);
+
+    Status status() const;
+    Error error() const;
+
+    void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+
+public Q_SLOTS:
+    void play();
+    void pause();
+    void stop();
+
+Q_SIGNALS:
+    void sourceChanged();
+
+    void playingChanged();
+    void pausedChanged();
+
+    void started();
+    void resumed();
+    void paused();
+    void stopped();
+
+    void statusChanged();
+
+    void loaded();
+    void buffering();
+    void stalled();
+    void buffered();
+    void endOfMedia();
+
+    void durationChanged();
+    void positionChanged();
+
+    void volumeChanged();
+    void mutedChanged();
+    void hasAudioChanged();
+    void hasVideoChanged();
+
+    void bufferProgressChanged();
+
+    void seekableChanged();
+    void playbackRateChanged();
+
+    void errorChanged();
+    void error(QDeclarativeVideo::Error error, const QString &errorString);
+
+protected:
+    void geometryChanged(const QRectF &geometry, const QRectF &);
+
+private Q_SLOTS:
+    void _q_nativeSizeChanged(const QSizeF &size);
+    void _q_error(int, const QString &);
+
+private:
+    Q_DISABLE_COPY(QDeclarativeVideo)
+
+    QGraphicsVideoItem *m_graphicsItem;
+
+    Q_PRIVATE_SLOT(mediaBase(), void _q_stateChanged(QMediaPlayer::State))
+    Q_PRIVATE_SLOT(mediaBase(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
+    Q_PRIVATE_SLOT(mediaBase(), void _q_metaDataChanged())
+
+    inline QDeclarativeMediaBase *mediaBase() { return this; }
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeVideo))
+
+QT_END_HEADER
+
+#endif
diff --git a/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp b/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp
new file mode 100644
index 0000000..e90cbd6
--- /dev/null
+++ b/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp
@@ -0,0 +1,362 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qmetadatacontrolmetaobject_p.h"
+#include <QtMultimedia/qmetadatacontrol.h>
+
+
+QT_BEGIN_NAMESPACE
+
+// copied from qmetaobject.cpp
+// do not touch without touching the moc as well
+enum PropertyFlags  {
+    Invalid = 0x00000000,
+    Readable = 0x00000001,
+    Writable = 0x00000002,
+    Resettable = 0x00000004,
+    EnumOrFlag = 0x00000008,
+    StdCppSet = 0x00000100,
+//    Override = 0x00000200,
+    Designable = 0x00001000,
+    ResolveDesignable = 0x00002000,
+    Scriptable = 0x00004000,
+    ResolveScriptable = 0x00008000,
+    Stored = 0x00010000,
+    ResolveStored = 0x00020000,
+    Editable = 0x00040000,
+    ResolveEditable = 0x00080000,
+    User = 0x00100000,
+    ResolveUser = 0x00200000,
+    Notify = 0x00400000,
+    Dynamic = 0x00800000
+};
+
+enum MethodFlags  {
+    AccessPrivate = 0x00,
+    AccessProtected = 0x01,
+    AccessPublic = 0x02,
+    AccessMask = 0x03, //mask
+
+    MethodMethod = 0x00,
+    MethodSignal = 0x04,
+    MethodSlot = 0x08,
+    MethodConstructor = 0x0c,
+    MethodTypeMask = 0x0c,
+
+    MethodCompatibility = 0x10,
+    MethodCloned = 0x20,
+    MethodScriptable = 0x40
+};
+
+struct QMetaObjectPrivate
+{
+    int revision;
+    int className;
+    int classInfoCount, classInfoData;
+    int methodCount, methodData;
+    int propertyCount, propertyData;
+    int enumeratorCount, enumeratorData;
+    int constructorCount, constructorData;
+    int flags;
+};
+
+static inline const QMetaObjectPrivate *priv(const uint* m_data)
+{ return reinterpret_cast<const QMetaObjectPrivate*>(m_data); }
+// end of copied lines from qmetaobject.cpp
+
+namespace
+{
+    struct MetaDataKey
+    {
+        QtMultimedia::MetaData key;
+        const char *name;
+    };
+
+    const MetaDataKey qt_metaDataKeys[] =
+    {
+        { QtMultimedia::Title, "title" },
+        { QtMultimedia::SubTitle, "subTitle" },
+        { QtMultimedia::Author, "author" },
+        { QtMultimedia::Comment, "comment" },
+        { QtMultimedia::Description, "description" },
+        { QtMultimedia::Category, "category" },
+        { QtMultimedia::Genre, "genre" },
+        { QtMultimedia::Year, "year" },
+        { QtMultimedia::Date, "date" },
+        { QtMultimedia::UserRating, "userRating" },
+        { QtMultimedia::Keywords, "keywords" },
+        { QtMultimedia::Language, "language" },
+        { QtMultimedia::Publisher, "publisher" },
+        { QtMultimedia::Copyright, "copyright" },
+        { QtMultimedia::ParentalRating, "parentalRating" },
+        { QtMultimedia::RatingOrganisation, "ratingOrganisation" },
+
+        // Media
+        { QtMultimedia::Size, "size" },
+        { QtMultimedia::MediaType, "mediaType" },
+//        { QtMultimedia::Duration, "duration" },
+
+        // Audio
+        { QtMultimedia::AudioBitRate, "audioBitRate" },
+        { QtMultimedia::AudioCodec, "audioCodec" },
+        { QtMultimedia::AverageLevel, "averageLevel" },
+        { QtMultimedia::ChannelCount, "channelCount" },
+        { QtMultimedia::PeakValue, "peakValue" },
+        { QtMultimedia::SampleRate, "sampleRate" },
+
+        // Music
+        { QtMultimedia::AlbumTitle, "albumTitle" },
+        { QtMultimedia::AlbumArtist, "albumArtist" },
+        { QtMultimedia::ContributingArtist, "contributingArtist" },
+        { QtMultimedia::Composer, "composer" },
+        { QtMultimedia::Conductor, "conductor" },
+        { QtMultimedia::Lyrics, "lyrics" },
+        { QtMultimedia::Mood, "mood" },
+        { QtMultimedia::TrackNumber, "trackNumber" },
+        { QtMultimedia::TrackCount, "trackCount" },
+
+        { QtMultimedia::CoverArtUrlSmall, "coverArtUrlSmall" },
+        { QtMultimedia::CoverArtUrlLarge, "coverArtUrlLarge" },
+
+        // Image/Video
+        { QtMultimedia::Resolution, "resolution" },
+        { QtMultimedia::PixelAspectRatio, "pixelAspectRatio" },
+
+        // Video
+        { QtMultimedia::VideoFrameRate, "videoFrameRate" },
+        { QtMultimedia::VideoBitRate, "videoBitRate" },
+        { QtMultimedia::VideoCodec, "videoCodec" },
+
+        { QtMultimedia::PosterUrl, "posterUrl" },
+
+        // Movie
+        { QtMultimedia::ChapterNumber, "chapterNumber" },
+        { QtMultimedia::Director, "director" },
+        { QtMultimedia::LeadPerformer, "leadPerformer" },
+        { QtMultimedia::Writer, "writer" },
+
+        // Photos
+        { QtMultimedia::CameraManufacturer, "cameraManufacturer" },
+        { QtMultimedia::CameraModel, "cameraModel" },
+        { QtMultimedia::Event, "event" },
+        { QtMultimedia::Subject, "subject" },
+        { QtMultimedia::Orientation, "orientation" },
+        { QtMultimedia::ExposureTime, "exposureTime" },
+        { QtMultimedia::FNumber, "fNumber" },
+        { QtMultimedia::ExposureProgram, "exposureProgram" },
+        { QtMultimedia::ISOSpeedRatings, "isoSpeedRatings" },
+        { QtMultimedia::ExposureBiasValue, "exposureBiasValue" },
+        { QtMultimedia::DateTimeOriginal, "dateTimeOriginal" },
+        { QtMultimedia::DateTimeDigitized, "dateTimeDigitized" },
+        { QtMultimedia::SubjectDistance, "subjectDistance" },
+        { QtMultimedia::MeteringMode, "meteringMode" },
+        { QtMultimedia::LightSource, "lightSource" },
+        { QtMultimedia::Flash, "flash" },
+        { QtMultimedia::FocalLength, "focalLength" },
+        { QtMultimedia::ExposureMode, "exposureMode" },
+        { QtMultimedia::WhiteBalance, "whiteBalance" },
+        { QtMultimedia::DigitalZoomRatio, "digitalZoomRatio" },
+        { QtMultimedia::FocalLengthIn35mmFilm, "focalLengthIn35mmFilm" },
+        { QtMultimedia::SceneCaptureType, "sceneCaptureType" },
+        { QtMultimedia::GainControl, "gainControl" },
+        { QtMultimedia::Contrast, "contrast" },
+        { QtMultimedia::Saturation, "saturation" },
+        { QtMultimedia::Sharpness, "sharpness" },
+        { QtMultimedia::DeviceSettingDescription, "deviceSettingDescription" }
+    };
+
+    class QMetaDataControlObject : public QObject
+    {
+    public:
+        inline QObjectData *data() { return d_ptr.data(); }
+    };
+}
+
+QMetaDataControlMetaObject::QMetaDataControlMetaObject(QMetaDataControl *control, QObject *object)
+    : m_control(control)
+    , m_object(object)
+    , m_string(0)
+    , m_data(0)
+    , m_propertyOffset(0)
+    , m_signalOffset(0)
+{
+    const QMetaObject *superClass = m_object->metaObject();
+
+    const int propertyCount =  sizeof(qt_metaDataKeys) / sizeof(MetaDataKey);
+    const int dataSize = sizeof(uint)
+            * (13                   // QMetaObjectPrivate members.
+            + 5                     // 5 members per signal.
+            + 4 * propertyCount     // 3 members per property + 1 notify signal per property.
+            + 1);                   // Terminating value.
+
+    m_data = reinterpret_cast<uint *>(qMalloc(dataSize));
+
+    QMetaObjectPrivate *pMeta = reinterpret_cast<QMetaObjectPrivate *>(m_data);
+
+    pMeta->revision = 3;
+    pMeta->className = 0;
+    pMeta->classInfoCount = 0;
+    pMeta->classInfoData = 0;
+    pMeta->methodCount = 1;
+    pMeta->methodData = 13;
+    pMeta->propertyCount = propertyCount;
+    pMeta->propertyData = 18;
+    pMeta->enumeratorCount = 0;
+    pMeta->enumeratorData = 0;
+    pMeta->constructorCount = 0;
+    pMeta->constructorData = 0;
+    pMeta->flags = 0x01;    // Dynamic meta object flag.
+
+    const int classNameSize = qstrlen(superClass->className()) + 1;
+
+    int stringIndex = classNameSize + 1;
+
+    // __metaDataChanged() signal.
+    static const char *changeSignal = "__metaDataChanged()";
+    const int changeSignalSize = qstrlen(changeSignal) + 1;
+
+    m_data[13] = stringIndex;                             // Signature.
+    m_data[14] = classNameSize;                           // Parameters.
+    m_data[15] = classNameSize;                           // Type.
+    m_data[16] = classNameSize;                           // Tag.
+    m_data[17] = MethodSignal | AccessProtected;          // Flags.
+
+    stringIndex += changeSignalSize;
+
+    const char *qvariantName = "QVariant";
+    const int qvariantSize = qstrlen(qvariantName) + 1;
+    const int qvariantIndex = stringIndex;
+
+    stringIndex += qvariantSize;
+
+    // Properties.
+    for (int i = 0; i < propertyCount; ++i) {       
+        m_data[18 + 3 * i] = stringIndex;                                       // Name.
+        m_data[19 + 3 * i] = qvariantIndex;                                     // Type.
+        m_data[20 + 3 * i] 
+                = Readable | Writable | Notify | Dynamic | (0xffffffff << 24);  // Flags.
+        m_data[18 + propertyCount * 3 + i] = 0;                                 // Notify signal.
+
+        stringIndex += qstrlen(qt_metaDataKeys[i].name) + 1;
+    }
+
+    // Terminating value.
+    m_data[18 + propertyCount * 4] = 0;
+
+    // Build string.
+    m_string = reinterpret_cast<char *>(qMalloc(stringIndex + 1));
+
+    // Class name.
+    qMemCopy(m_string, superClass->className(), classNameSize);
+
+    stringIndex = classNameSize;
+
+    // Null m_string.
+    m_string[stringIndex] = '\0';
+    stringIndex += 1;
+
+    // __metaDataChanged() signal.
+    qMemCopy(m_string + stringIndex, changeSignal, changeSignalSize);
+    stringIndex += changeSignalSize;
+
+    qMemCopy(m_string + stringIndex, qvariantName, qvariantSize);
+    stringIndex += qvariantSize;
+
+    // Properties.
+    for (int i = 0; i < propertyCount; ++i) {
+        const int propertyNameSize = qstrlen(qt_metaDataKeys[i].name) + 1;
+
+        qMemCopy(m_string + stringIndex, qt_metaDataKeys[i].name, propertyNameSize);
+        stringIndex += propertyNameSize;
+    }
+
+    // Terminating character.
+    m_string[stringIndex] = '\0';
+
+    d.superdata = superClass;
+    d.stringdata = m_string;
+    d.data = m_data;
+    d.extradata = 0;
+
+    static_cast<QMetaDataControlObject *>(m_object)->data()->metaObject = this;
+
+    m_propertyOffset = propertyOffset();
+    m_signalOffset = methodOffset();
+}
+
+QMetaDataControlMetaObject::~QMetaDataControlMetaObject()
+{
+    static_cast<QMetaDataControlObject *>(m_object)->data()->metaObject = 0;
+
+    qFree(m_data);
+    qFree(m_string);
+}
+
+int QMetaDataControlMetaObject::metaCall(QMetaObject::Call c, int id, void **a)
+{
+    if (c == QMetaObject::ReadProperty && id >= m_propertyOffset) {
+        int propId = id - m_propertyOffset;
+
+        *reinterpret_cast<QVariant *>(a[0]) = m_control->metaData(qt_metaDataKeys[propId].key);
+
+        return -1;
+    } else if (c == QMetaObject::WriteProperty && id >= m_propertyOffset) {
+        int propId = id - m_propertyOffset;
+
+        m_control->setMetaData(qt_metaDataKeys[propId].key, *reinterpret_cast<QVariant *>(a[0]));
+
+        return -1;
+    } else {
+        return m_object->qt_metacall(c, id, a);
+    }
+}
+
+int QMetaDataControlMetaObject::createProperty(const char *, const char *)
+{
+    return -1;
+}
+
+void QMetaDataControlMetaObject::metaDataChanged()
+{
+    activate(m_object, m_signalOffset, 0);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h b/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h
new file mode 100644
index 0000000..c381f2d
--- /dev/null
+++ b/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMETADATACONTROLMETAOBJECT_P_H
+#define QMETADATACONTROLMETAOJBECT_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qmetaobject.h>
+#include <QtMultimedia/qtmedianamespace.h>
+
+#include <QtCore/private/qobject_p.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QMetaDataControl;
+
+class QMetaDataControlMetaObject : public QAbstractDynamicMetaObject
+{
+public:
+    QMetaDataControlMetaObject(QMetaDataControl *control, QObject *object);
+    ~QMetaDataControlMetaObject();
+
+    int metaCall(QMetaObject::Call call, int _id, void **arguments);
+    int createProperty(const char *, const char *);
+
+    void metaDataChanged();
+
+private:
+    QMetaDataControl *m_control;
+    QObject *m_object;
+    char *m_string;
+    uint *m_data;
+
+    int m_propertyOffset;
+    int m_signalOffset;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/src.pro b/src/src.pro
index 2b9dc30..ebfd44b 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -116,7 +116,6 @@ src_declarative.target = sub-declarative
       src_phonon.depends +=  src_dbus
    }
    contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2): src_plugins.depends += src_opengl
-   contains(QT_CONFIG, declarative): src_multimedia.depends += src_declarative
 }
 
 !symbian {
diff --git a/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro b/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro
index 13bf606..bfc2223 100644
--- a/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro
+++ b/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro
@@ -1,4 +1,14 @@
 load(qttest_p4)
-SOURCES += tst_qdeclarativeaudio.cpp
+
+HEADERS += \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h
+
+SOURCES += \
+        tst_qdeclarativeaudio.cpp \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio.cpp \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp
 
 QT += multimedia declarative
diff --git a/tests/auto/qdeclarativeaudio/tst_qdeclarativeaudio.cpp b/tests/auto/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
index 11439ce..55c7135 100644
--- a/tests/auto/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
+++ b/tests/auto/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
@@ -41,7 +41,7 @@
 
 #include <QtTest/QtTest>
 
-#include <QtMultimedia/private/qdeclarativeaudio_p.h>
+#include "../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h"
 
 #include <QtGui/qapplication.h>
 #include <QtMultimedia/qmediaplayercontrol.h>
diff --git a/tests/auto/qdeclarativevideo/qdeclarativevideo.pro b/tests/auto/qdeclarativevideo/qdeclarativevideo.pro
index d946bb0..497ee0e 100644
--- a/tests/auto/qdeclarativevideo/qdeclarativevideo.pro
+++ b/tests/auto/qdeclarativevideo/qdeclarativevideo.pro
@@ -1,4 +1,14 @@
 load(qttest_p4)
-SOURCES += tst_qdeclarativevideo.cpp
+
+HEADERS += \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h
+
+SOURCES += \
+        tst_qdeclarativevideo.cpp \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo.cpp \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp \
+        $$PWD/../../../src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp
 
 QT += multimedia declarative
diff --git a/tests/auto/qdeclarativevideo/tst_qdeclarativevideo.cpp b/tests/auto/qdeclarativevideo/tst_qdeclarativevideo.cpp
index 9fc1e70..d3bfc38 100644
--- a/tests/auto/qdeclarativevideo/tst_qdeclarativevideo.cpp
+++ b/tests/auto/qdeclarativevideo/tst_qdeclarativevideo.cpp
@@ -41,7 +41,7 @@
 
 #include <QtTest/QtTest>
 
-#include <QtMultimedia/private/qdeclarativevideo_p.h>
+#include "../../../src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h"
 
 #include <QtGui/qapplication.h>
 #include <QtMultimedia/qabstractvideosurface.h>
-- 
cgit v0.12


From 399858f133819eac1d7a71029cc132c76a6e0bbc Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Wed, 3 Mar 2010 15:18:00 +1000
Subject: Undo a doc revert.

Reviewed-by: Dmytro Poplavskiy
---
 src/plugins/mediaservices/gstreamer/qgstreamermessage.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/plugins/mediaservices/gstreamer/qgstreamermessage.cpp b/src/plugins/mediaservices/gstreamer/qgstreamermessage.cpp
index 863b6d4..d52aa75 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamermessage.cpp
+++ b/src/plugins/mediaservices/gstreamer/qgstreamermessage.cpp
@@ -50,7 +50,7 @@ static int wuchi = qRegisterMetaType<QGstreamerMessage>();
 
 
 /*!
-    \class gstreamer::QGstreamerMessage
+    \class QGstreamerMessage
     \internal
 */
 
-- 
cgit v0.12


From a8d10340dce323030e6e3b197eb1849af303f4d0 Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Wed, 3 Mar 2010 16:03:26 +1000
Subject: QT7 mediaservice; Fix memory leak

Reviewed-by: Dmytro Poplavskiy
---
 src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm
index b046672..59d01a2 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm
@@ -251,6 +251,7 @@ void QT7PlayerMetaDataControl::updateTags()
             readFormattedData(metaDataRef, kQTMetaDataStorageFormatiTunes, metaMap);
         }
 #else
+        AutoReleasePool pool;
         NSString *name = [movie attributeForKey:@"QTMovieDisplayNameAttribute"];
         metaMap.insert(QLatin1String("nam"), QString::fromUtf8([name UTF8String]));
 #endif // QUICKTIME_C_API_AVAILABLE
-- 
cgit v0.12


From 6e0565eaa293b84f7583947822fe5939cb47af89 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Tue, 2 Mar 2010 15:39:28 +0100
Subject: remove a warning on windows and simplify a bit the code

---
 src/gui/dialogs/qfontdialog.cpp | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/src/gui/dialogs/qfontdialog.cpp b/src/gui/dialogs/qfontdialog.cpp
index a4bf15d..b987611 100644
--- a/src/gui/dialogs/qfontdialog.cpp
+++ b/src/gui/dialogs/qfontdialog.cpp
@@ -988,13 +988,10 @@ void QFontDialog::open(QObject *receiver, const char *member)
 */
 void QFontDialog::setVisible(bool visible)
 {
-    Q_D(QFontDialog);
-    if (visible) {
-        if (testAttribute(Qt::WA_WState_ExplicitShowHide) && !testAttribute(Qt::WA_WState_Hidden))
-            return;
-    } else if  (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden))
+    if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden) != visible)
         return;
 #ifdef Q_WS_MAC
+    Q_D(QFontDialog);
     if (d->canBeNativeDialog()){
         if (d->setVisible_sys(visible)){
             d->nativeDialogInUse = true;
-- 
cgit v0.12


From 60324267fbb8a8554e62aaf9ef01360709292320 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Tue, 2 Mar 2010 16:27:46 +0100
Subject: Make the sub-menu accessible via its shortcut even if it is the
 current

Task-number: QTBUG-7411
Reviewed-by: ogoffart
---
 src/gui/widgets/qmenu.cpp      | 12 ++----------
 tests/auto/qmenu/tst_qmenu.cpp | 20 ++++++++++++++++++++
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index e2cf25b..5db14b8 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -487,7 +487,7 @@ void QMenuPrivate::popupAction(QAction *action, int delay, bool activateFirst)
     if (action && action->isEnabled()) {
         if (!delay)
             q->internalDelayedPopup();
-        else
+        else if (!QMenuPrivate::menuDelayTimer.isActive() && (!action->menu() || !action->menu()->isVisible()))
             QMenuPrivate::menuDelayTimer.start(delay, q);
         if (activateFirst && action->menu())
             action->menu()->d_func()->setFirstActionActive();
@@ -543,15 +543,6 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason
 {
     Q_Q(QMenu);
     tearoffHighlighted = 0;
-    if (action == currentAction) {
-        if (!action || !action->menu() || action->menu() == activeMenu) {
-            if(QMenu *menu = qobject_cast<QMenu*>(causedPopup.widget)) {
-                if(causedPopup.action && menu->d_func()->activeMenu == q)
-                    menu->d_func()->setCurrentAction(causedPopup.action, 0, reason, false);
-            }
-        }
-        return;
-    }
     if (currentAction)
         q->update(actionRect(currentAction));
 
@@ -565,6 +556,7 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason
 #ifdef QT3_SUPPORT
     emitHighlighted = action;
 #endif
+
     currentAction = action;
     if (action) {
         if (!action->isSeparator()) {
diff --git a/tests/auto/qmenu/tst_qmenu.cpp b/tests/auto/qmenu/tst_qmenu.cpp
index 3559b15..e10d7ee 100644
--- a/tests/auto/qmenu/tst_qmenu.cpp
+++ b/tests/auto/qmenu/tst_qmenu.cpp
@@ -105,6 +105,7 @@ private slots:
     void deleteActionInTriggered();
     void pushButtonPopulateOnAboutToShow();
     void QTBUG7907_submenus_autoselect();
+    void QTBUG7411_submenus_activate();
 protected slots:
     void onActivated(QAction*);
     void onHighlighted(QAction*);
@@ -948,6 +949,25 @@ void tst_QMenu::QTBUG7907_submenus_autoselect()
     QVERIFY(!subset.isVisible());
 }
 
+void tst_QMenu::QTBUG7411_submenus_activate()
+{
+    QMenu menu("Test Menu");
+    QAction *act = menu.addAction("foo");
+    QMenu sub1("&sub1");
+    sub1.addAction("foo");
+    sub1.setTitle("&sub1");
+    QAction *act1 = menu.addMenu(&sub1);
+    menu.show();
+    QTest::qWaitForWindowShown(&menu);
+    menu.setActiveAction(act);
+    QTest::keyPress(&menu, Qt::Key_Down);
+    QCOMPARE(menu.activeAction(), act1);
+    QVERIFY(!sub1.isVisible());
+    QTest::keyPress(&menu, Qt::Key_S);
+    QTRY_VERIFY(sub1.isVisible());
+}
+
+
 
 QTEST_MAIN(tst_QMenu)
 #include "tst_qmenu.moc"
-- 
cgit v0.12


From a4af046157c7ef94990f9520c4611597ff271c57 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Wed, 3 Mar 2010 11:42:12 +0100
Subject: fixed a memory leak when restoring a state in QMainWindow

Task-number: QTBUG-8631
---
 src/gui/widgets/qdockarealayout.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/gui/widgets/qdockarealayout.cpp b/src/gui/widgets/qdockarealayout.cpp
index c1b1ea3..f44858a 100644
--- a/src/gui/widgets/qdockarealayout.cpp
+++ b/src/gui/widgets/qdockarealayout.cpp
@@ -1985,7 +1985,10 @@ bool QDockAreaLayoutInfo::restoreState(QDataStream &stream, QList<QDockWidget*>
                         emit widget->dockLocationChanged(toDockWidgetArea(dockPos));
                     }
                 }
-
+		if (testing) {
+		  //was it is not really added to the layout, we need to delete the object here
+		  delete item.widgetItem;
+		}
             }
         } else if (nextMarker == SequenceMarker) {
             int dummy;
-- 
cgit v0.12


From 24cf789b68f21b2d1ea31580e55c91a2cae25a12 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Wed, 3 Mar 2010 11:02:11 +0100
Subject: Fix compilation of Q_DECLARE_METATYPE(QVariant) by introducing
 QMetaType::QVariant

After 03daf059647c0a0222e8774b0a083f58c8e64934

With the recent change in QMetaType, qRegisterMetaType<T> instantiates
QMetaTypeId2<T>, which itself instantiates QMetaTypeId<T> if T is not
builtin into QMetaType.

But qRegisterMetaType<QVariant> is called in qvariant.h which makes
further call to Q_DECLARE_METATYPE(QVariant) to fail as
QMetaTypeId<QVariant> would have been instantied before

The solution is to make QVariant a builtin type.

Reviewed-by: Thierry
---
 src/corelib/kernel/qmetatype.cpp | 15 +++++++++++++++
 src/corelib/kernel/qmetatype.h   |  5 ++++-
 src/corelib/kernel/qvariant.h    |  3 +--
 3 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index be506b4..8f2d025 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -133,6 +133,7 @@ QT_BEGIN_NAMESPACE
     \value Float \c float
     \value QObjectStar QObject *
     \value QWidgetStar QWidget *
+    \value QVariant QVariant
 
     \value QColorGroup QColorGroup
     \value QCursor QCursor
@@ -300,6 +301,7 @@ static const struct { const char * typeName; int typeNameLength; int type; } typ
     QT_ADD_STATIC_METATYPE("float", QMetaType::Float),
     QT_ADD_STATIC_METATYPE("QObject*", QMetaType::QObjectStar),
     QT_ADD_STATIC_METATYPE("QWidget*", QMetaType::QWidgetStar),
+    QT_ADD_STATIC_METATYPE("QVariant", QMetaType::QVariant),
 
     /* Type aliases - order doesn't matter */
     QT_ADD_STATIC_METATYPE("unsigned long", QMetaType::ULong),
@@ -686,6 +688,9 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data)
     case QMetaType::QVariantList:
         stream << *static_cast<const NS(QVariantList)*>(data);
         break;
+    case QMetaType::QVariant:
+        stream << *static_cast<const NS(QVariant)*>(data);
+        break;
 #endif
     case QMetaType::QByteArray:
         stream << *static_cast<const NS(QByteArray)*>(data);
@@ -888,6 +893,9 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
     case QMetaType::QVariantList:
         stream >> *static_cast< NS(QVariantList)*>(data);
         break;
+    case QMetaType::QVariant:
+        stream >> *static_cast< NS(QVariant)*>(data);
+        break;
 #endif
     case QMetaType::QByteArray:
         stream >> *static_cast< NS(QByteArray)*>(data);
@@ -1055,6 +1063,8 @@ void *QMetaType::construct(int type, const void *copy)
             return new NS(QVariantHash)(*static_cast<const NS(QVariantHash)*>(copy));
         case QMetaType::QVariantList:
             return new NS(QVariantList)(*static_cast<const NS(QVariantList)*>(copy));
+        case QMetaType::QVariant:
+            return new NS(QVariant)(*static_cast<const NS(QVariant)*>(copy));
 #endif
         case QMetaType::QByteArray:
             return new NS(QByteArray)(*static_cast<const NS(QByteArray)*>(copy));
@@ -1150,6 +1160,8 @@ void *QMetaType::construct(int type, const void *copy)
             return new NS(QVariantHash);
         case QMetaType::QVariantList:
             return new NS(QVariantList);
+        case QMetaType::QVariant:
+            return new NS(QVariant);
 #endif
         case QMetaType::QByteArray:
             return new NS(QByteArray);
@@ -1291,6 +1303,9 @@ void QMetaType::destroy(int type, void *data)
     case QMetaType::QVariantList:
         delete static_cast< NS(QVariantList)* >(data);
         break;
+    case QMetaType::QVariant:
+        delete static_cast< NS(QVariant)* >(data);
+        break;
 #endif
     case QMetaType::QByteArray:
         delete static_cast< NS(QByteArray)* >(data);
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 2ed4a1f..98ed4bd 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -86,7 +86,8 @@ public:
         FirstCoreExtType = 128 /* VoidStar */,
         VoidStar = 128, Long = 129, Short = 130, Char = 131, ULong = 132,
         UShort = 133, UChar = 134, Float = 135, QObjectStar = 136, QWidgetStar = 137,
-        LastCoreExtType = QWidgetStar,
+        QVariant = 138,
+        LastCoreExtType = QVariant,
 
 // This logic must match the one in qglobal.h
 #if defined(QT_COORD_TYPE)
@@ -353,6 +354,7 @@ class QVector2D;
 class QVector3D;
 class QVector4D;
 class QQuaternion;
+class QVariant;
 
 QT_END_NAMESPACE
 
@@ -421,6 +423,7 @@ Q_DECLARE_BUILTIN_METATYPE(QVector2D, QVector2D)
 Q_DECLARE_BUILTIN_METATYPE(QVector3D, QVector3D)
 Q_DECLARE_BUILTIN_METATYPE(QVector4D, QVector4D)
 Q_DECLARE_BUILTIN_METATYPE(QQuaternion, QQuaternion)
+Q_DECLARE_BUILTIN_METATYPE(QVariant, QVariant)
 
 QT_END_HEADER
 
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index 9628dbf..cb2825c 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -589,8 +589,7 @@ template<typename T> inline T qvariant_cast(const QVariant &v)
 
 template<> inline QVariant qvariant_cast<QVariant>(const QVariant &v)
 {
-    static const int vid = qRegisterMetaType<QVariant>("QVariant");
-    if (vid == v.userType())
+    if (v.userType() == QMetaType::QVariant)
         return *reinterpret_cast<const QVariant *>(v.constData());
     return v;
 }
-- 
cgit v0.12


From 7a6f492a6dcf9140eda309dcdff6e0f8d321df19 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Wed, 3 Mar 2010 11:07:26 +0100
Subject: Fix QVariant autotest

After 03daf059647c0a0222e8774b0a083f58c8e64934, typedef of int are just
aliases to int, and therefor we need to use a real custom type for the test now

Reviewed-by: Thierry
---
 tests/auto/qvariant/tst_qvariant.cpp | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/tests/auto/qvariant/tst_qvariant.cpp b/tests/auto/qvariant/tst_qvariant.cpp
index a316dda..1a4182f 100644
--- a/tests/auto/qvariant/tst_qvariant.cpp
+++ b/tests/auto/qvariant/tst_qvariant.cpp
@@ -2518,15 +2518,23 @@ void tst_QVariant::variant_to()
     QCOMPARE(qVariantFromValue(0.25f).toDouble(), 0.25);
 }
 
+struct Blah { int i; };
+
+QDataStream& operator>>(QDataStream& s, Blah& c)
+{ return (s >> c.i); }
+
+QDataStream& operator<<(QDataStream& s, const Blah& c)
+{ return (s << c.i); }
+
 void tst_QVariant::saveLoadCustomTypes()
 {
     QByteArray data;
 
-    int i = 42;
-    int tp = qRegisterMetaType<int>("Blah");
+    Blah i = { 42 };
+    int tp = qRegisterMetaType<Blah>("Blah");
     QVariant v = QVariant(tp, &i);
 
-    qRegisterMetaTypeStreamOperators<int>("Blah");
+    qRegisterMetaTypeStreamOperators<Blah>("Blah");
 
     QCOMPARE(v.userType(), tp);
     QVERIFY(v.type() == QVariant::UserType);
-- 
cgit v0.12


From 9957e85e37345e946ecc67196d65fbca867a2001 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Wed, 3 Mar 2010 10:34:44 +0100
Subject: Add config.test for multimedia/qml

using pkg-config from pri file is not good for cross-compiling

Reviewed-by: paul
---
 config.tests/unix/pulseaudio/pulseaudio.pro     |  4 ++
 config.tests/unix/pulseaudio/pulseaudiotest.cpp | 49 +++++++++++++++++++++++++
 configure                                       | 15 ++++++++
 src/multimedia/qml/qml.pri                      | 20 +++++-----
 4 files changed, 79 insertions(+), 9 deletions(-)
 create mode 100644 config.tests/unix/pulseaudio/pulseaudio.pro
 create mode 100644 config.tests/unix/pulseaudio/pulseaudiotest.cpp

diff --git a/config.tests/unix/pulseaudio/pulseaudio.pro b/config.tests/unix/pulseaudio/pulseaudio.pro
new file mode 100644
index 0000000..698a35f
--- /dev/null
+++ b/config.tests/unix/pulseaudio/pulseaudio.pro
@@ -0,0 +1,4 @@
+SOURCES = pulseaudiotest.cpp
+LIBS+=-lpulse
+CONFIG -= qt dylib
+mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/pulseaudio/pulseaudiotest.cpp b/config.tests/unix/pulseaudio/pulseaudiotest.cpp
new file mode 100644
index 0000000..eed88da
--- /dev/null
+++ b/config.tests/unix/pulseaudio/pulseaudiotest.cpp
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <pulse/pulseaudio.h>
+
+int main(int ,char **)
+{
+    pa_threaded_mainloop *mainloop = pa_threaded_mainloop_new();
+    return 0;
+}
+
diff --git a/configure b/configure
index 2312165..7ac4ff0 100755
--- a/configure
+++ b/configure
@@ -784,6 +784,7 @@ OPT_HELP=
 CFG_SILENT=no
 CFG_GRAPHICS_SYSTEM=default
 CFG_ALSA=auto
+CFG_PULSEAUDIO=auto
 CFG_NETWORKMANAGER=auto
 CFG_COREWLAN=auto
 
@@ -5945,6 +5946,14 @@ if [ "$CFG_ALSA" = "auto" ]; then
     fi
 fi
 
+if [ "$CFG_PULSEAUDIO" = "auto" ]; then
+    if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/pulseaudio "pulseaudio" $L_FLAGS $I_FLAGS $l_FLAGS; then
+        CFG_PULSEAUDIO=yes
+    else
+        CFG_PULSEAUDIO=no
+    fi
+fi
+
 if [ "$CFG_NETWORKMANAGER" = "auto" ]; then
     if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/networkmanager "NetworkManager" $L_FLAGS $I_FLAGS $l_FLAGS; then
         CFG_NETWORKMANAGER=yes
@@ -6439,6 +6448,10 @@ if [ "$CFG_ALSA" = "yes" ]; then
     QT_CONFIG="$QT_CONFIG alsa"
 fi
 
+if [ "$CFG_PULSEAUDIO" = "yes" ]; then
+    QT_CONFIG="$QT_CONFIG pulseaudio"
+fi
+
 if [ "$CFG_NETWORKMANAGER" = "yes" ]; then
     QT_CONFIG="$QT_CONFIG networkmanager"
 fi
@@ -7154,6 +7167,7 @@ fi
 [ "$CFG_XRANDR" = "runtime" ]    && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_RUNTIME_XRANDR"
 [ "$CFG_XINPUT" = "runtime" ]    && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_RUNTIME_XINPUT"
 [ "$CFG_ALSA" = "no" ]           && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_ALSA"
+[ "$CFG_PULSEAUDIO" = "no" ]          && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_PULSEAUDIO"
 [ "$CFG_NETWORKMANAGER" = "no" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_NETWORKMANAGER"
 [ "$CFG_COREWLAN" = "no" ]       && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_COREWLAN"
 
@@ -7657,6 +7671,7 @@ elif [ "$CFG_OPENSSL" = "linked" ]; then
 fi
 echo "OpenSSL support ........ $CFG_OPENSSL $OPENSSL_LINKAGE"
 echo "Alsa support ........... $CFG_ALSA"
+echo "Pulse Audio support .... $CFG_PULSEAUDIO"
 echo "NetworkManager support . $CFG_NETWORKMANAGER"
 if [ "$PLATFORM_MAC" = "yes" ]; then
     echo "CoreWlan support ....... $CFG_COREWLAN"
diff --git a/src/multimedia/qml/qml.pri b/src/multimedia/qml/qml.pri
index d0ff71d..d7aef1a 100644
--- a/src/multimedia/qml/qml.pri
+++ b/src/multimedia/qml/qml.pri
@@ -2,15 +2,17 @@
 contains(QT_CONFIG, declarative) {
     QT += declarative
 
-    system(pkg-config --exists \'libpulse >= 0.9.10\') {
-        DEFINES += QT_MULTIMEDIA_PULSEAUDIO
-        HEADERS += $$PWD/qsoundeffect_pulse_p.h
-        SOURCES += $$PWD/qsoundeffect_pulse_p.cpp
-        LIBS += -lpulse
-    } else:x11 {
-        DEFINES += QT_MULTIMEDIA_QMEDIAPLAYER
-        HEADERS += $$PWD/qsoundeffect_qmedia_p.h
-        SOURCES += $$PWD/qsoundeffect_qmedia_p.cpp
+   unix { 
+       unix:contains(QT_CONFIG, pulseaudio) {
+            DEFINES += QT_MULTIMEDIA_PULSEAUDIO
+            HEADERS += $$PWD/qsoundeffect_pulse_p.h
+            SOURCES += $$PWD/qsoundeffect_pulse_p.cpp
+            LIBS += -lpulse
+        } else {
+            DEFINES += QT_MULTIMEDIA_QMEDIAPLAYER
+            HEADERS += $$PWD/qsoundeffect_qmedia_p.h
+            SOURCES += $$PWD/qsoundeffect_qmedia_p.cpp
+        } 
     } else {
         HEADERS += $$PWD/qsoundeffect_qsound_p.h
         SOURCES += $$PWD/qsoundeffect_qsound_p.cpp
-- 
cgit v0.12


From 388bd11da343f5e7bc9928bc1151de18bc01fe7f Mon Sep 17 00:00:00 2001
From: Yoann Lopes <yoann.lopes@nokia.com>
Date: Wed, 3 Mar 2010 11:56:56 +0100
Subject: Revert "Fixes crash when destroying a QGraphicsItem."

The patch was wrong. The new one is pushed into 4.6. The old one
is reverted to avoid merge conflicts.
This reverts commit a7ef2d899d711d750238a8d69284da808188b407.
---
 src/gui/graphicsview/qgraphicsitem.cpp         |  5 +--
 tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 57 --------------------------
 2 files changed, 2 insertions(+), 60 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 5735cd6..4f06f80 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -3179,9 +3179,8 @@ void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool clim
 */
 void QGraphicsItem::clearFocus()
 {
-    // Pass focus to the closest parent focus scope when clearing focus
-    // from a focus scope.
-    if (!d_ptr->inDestructor && (d_ptr->flags & ItemIsFocusScope)) {
+    // Pass focus to the closest parent focus scope.
+    if (!d_ptr->inDestructor) {
         QGraphicsItem *p = d_ptr->parent;
         while (p) {
             if (p->flags() & ItemIsFocusScope) {
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 269ec24..7c1b97e 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -438,7 +438,6 @@ private slots:
     void QTBUG_6738_missingUpdateWithSetParent();
     void QTBUG_7714_fullUpdateDiscardingOpacityUpdate2();
     void QT_2653_fullUpdateDiscardingOpacityUpdate();
-    void QT_2649_focusScope();
 
 private:
     QList<QGraphicsItem *> paintedItems;
@@ -10003,61 +10002,5 @@ void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2()
     QTRY_COMPARE(view.repaints, 1);
 }
 
-void tst_QGraphicsItem::QT_2649_focusScope()
-{
-    QGraphicsScene *scene = new QGraphicsScene;
-
-    QGraphicsRectItem *subFocusItem = new QGraphicsRectItem;
-    subFocusItem->setFlags(QGraphicsItem::ItemIsFocusable);
-    subFocusItem->setFocus();
-    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem);
-
-    QGraphicsRectItem *scope = new QGraphicsRectItem;
-    scope->setFlags(QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemIsFocusScope);
-    scope->setFocus();
-    subFocusItem->setParentItem(scope);
-    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0);
-    QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem);
-
-    QGraphicsRectItem *rootItem = new QGraphicsRectItem;
-    rootItem->setFlags(QGraphicsItem::ItemIsFocusable);
-    scope->setParentItem(rootItem);
-    QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0);
-    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0);
-    QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem);
-
-    scene->addItem(rootItem);
-
-    QEvent windowActivate(QEvent::WindowActivate);
-    qApp->sendEvent(scene, &windowActivate);
-    scene->setFocus();
-
-    QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0);
-    QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0);
-    QVERIFY(subFocusItem->hasFocus());
-
-    //If we hide the focusScope, the entire subFocus chain should be cleared
-    scope->hide();
-
-    QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)0);
-    QCOMPARE(scope->focusItem(), (QGraphicsItem *)0);
-    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)0);
-    QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0);
-    QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem);
-    QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0);
-    QVERIFY(!subFocusItem->hasFocus());
-
-    delete scene;
-}
-
 QTEST_MAIN(tst_QGraphicsItem)
 #include "tst_qgraphicsitem.moc"
-- 
cgit v0.12


From 4a5eaccce02dbabfd81e8809d453fc268cdba644 Mon Sep 17 00:00:00 2001
From: aavit <qt-info@nokia.com>
Date: Tue, 2 Mar 2010 14:38:39 +0100
Subject: Some cleanup of outdated src/3rdparty stuff

Reviewed-by: trustme
---
 src/3rdparty/README                                |  34 +-
 src/3rdparty/patches/freetype-2.3.5-config.patch   | 265 ---------------
 src/3rdparty/patches/freetype-2.3.6-ascii.patch    | 174 ----------
 src/3rdparty/patches/freetype-2.3.6-vxworks.patch  |  35 --
 src/3rdparty/patches/libjpeg-6b-config.patch       |  50 ---
 src/3rdparty/patches/libjpeg-6b-vxworks.patch      |  23 --
 .../patches/libpng-1.2.20-elf-visibility.patch     |  17 -
 src/3rdparty/patches/libpng-1.2.20-vxworks.patch   |  13 -
 src/3rdparty/patches/libtiff-3.8.2-config.patch    | 374 ---------------------
 src/3rdparty/patches/libtiff-3.8.2-vxworks.patch   |  11 -
 src/3rdparty/patches/sqlite-3.5.6-config.patch     |  38 ---
 src/3rdparty/patches/sqlite-3.5.6-vxworks.patch    |  68 ----
 src/3rdparty/patches/sqlite-3.5.6-wince.patch      |  19 --
 13 files changed, 15 insertions(+), 1106 deletions(-)
 delete mode 100644 src/3rdparty/patches/freetype-2.3.5-config.patch
 delete mode 100644 src/3rdparty/patches/freetype-2.3.6-ascii.patch
 delete mode 100644 src/3rdparty/patches/freetype-2.3.6-vxworks.patch
 delete mode 100644 src/3rdparty/patches/libjpeg-6b-config.patch
 delete mode 100644 src/3rdparty/patches/libjpeg-6b-vxworks.patch
 delete mode 100644 src/3rdparty/patches/libpng-1.2.20-elf-visibility.patch
 delete mode 100644 src/3rdparty/patches/libpng-1.2.20-vxworks.patch
 delete mode 100644 src/3rdparty/patches/libtiff-3.8.2-config.patch
 delete mode 100644 src/3rdparty/patches/libtiff-3.8.2-vxworks.patch
 delete mode 100644 src/3rdparty/patches/sqlite-3.5.6-config.patch
 delete mode 100644 src/3rdparty/patches/sqlite-3.5.6-vxworks.patch
 delete mode 100644 src/3rdparty/patches/sqlite-3.5.6-wince.patch

diff --git a/src/3rdparty/README b/src/3rdparty/README
index ef05674..0248db1 100644
--- a/src/3rdparty/README
+++ b/src/3rdparty/README
@@ -1,26 +1,22 @@
 The libraries included here are the original packages, unpacked, and
 with their version number removed from the directory name (for version
-information, see the README files in the directories).  The following
-have been removed:
- 
-    libjpeg - some source files, images, Makefiles, manual pages
-    libpng/contrib - a collection of examples and test-suite
-    libmng/bcb - a collection of files for the Borland compiler
-    libmng/contrib - a collection of projects that use libmng
-    libmng/special - configuration file for Mozilla integration
-    libtiff/contrib - a collection of additions to libtiff
-    libtiff/man - manual pages
-    libtiff/tools - a collection of command-line tools based on libtiff
-    zlib/contrib - a collection of non-zlib code
-    zlib/amiga - zlib for a platform not supported by Qt
-    zlib/as400 - zlib for a platform not supported by Qt
-    zlib/msdos - zlib for a platform not supported by Qt
-    zlib/old - zlib for a platform not supported by Qt
-    zlib/qnx - zlib packaging
+information, see the README files in the directories).
 
-Some patches are applied from time to time. Recent patches can be
-found in the patches subdirectory.
+Certain files and subdirectories of the original library packages that
+are irrelevant to Qt may not be included here. Typically, those are
+the standalone library configuration and make files, tools, test
+files, contribs, documentation, and similar.
 
+Patches may have been applied, typically for configuration and build
+issues in the Qt framework. Such patches can be reviewed in the the
+public git repository; they will appear in the commit logs of each
+library directory, following the latest clean version update commit.
+
+The 'patches' subdirectory contains certain patches applied prior to
+the start of the public git history, where the library has not been
+updated since.
+
+--
 
 The pvr2d.h & wsegl.h in the powervr directory are required for building
 the PowerVR plugin on Qt for Embedded Linux. These headers are for SGX
diff --git a/src/3rdparty/patches/freetype-2.3.5-config.patch b/src/3rdparty/patches/freetype-2.3.5-config.patch
deleted file mode 100644
index 2653467..0000000
--- a/src/3rdparty/patches/freetype-2.3.5-config.patch
+++ /dev/null
@@ -1,265 +0,0 @@
---- builds/unix/ftconfig.h	1970-01-01 01:00:00.000000000 +0100
-+++ builds/unix/ftconfig.h	2007-07-15 00:00:00.000000000 +0200
-@@ -0,0 +1,262 @@
-+/* ftconfig.h.  Generated by configure.  */
-+/***************************************************************************/
-+/*                                                                         */
-+/*  ftconfig.in                                                            */
-+/*                                                                         */
-+/*    UNIX-specific configuration file (specification only).               */
-+/*                                                                         */
-+/*  Copyright 1996-2000, 2002 by                                           */
-+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-+/*                                                                         */
-+/*  This file is part of the FreeType project, and may only be used,       */
-+/*  modified, and distributed under the terms of the FreeType project      */
-+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-+/*  this file you indicate that you have read the license and              */
-+/*  understand and accept it fully.                                        */
-+/*                                                                         */
-+/***************************************************************************/
-+
-+
-+  /*************************************************************************/
-+  /*                                                                       */
-+  /* This header file contains a number of macro definitions that are used */
-+  /* by the rest of the engine.  Most of the macros here are automatically */
-+  /* determined at compile time, and you should not need to change it to   */
-+  /* port FreeType, except to compile the library with a non-ANSI          */
-+  /* compiler.                                                             */
-+  /*                                                                       */
-+  /* Note however that if some specific modifications are needed, we       */
-+  /* advise you to place a modified copy in your build directory.          */
-+  /*                                                                       */
-+  /* The build directory is usually `freetype/builds/<system>', and        */
-+  /* contains system-specific files that are always included first when    */
-+  /* building the library.                                                 */
-+  /*                                                                       */
-+  /*************************************************************************/
-+
-+
-+#ifndef __FTCONFIG_H__
-+#define __FTCONFIG_H__
-+
-+#include <ft2build.h>
-+#include FT_CONFIG_OPTIONS_H
-+#include FT_CONFIG_STANDARD_LIBRARY_H
-+
-+
-+FT_BEGIN_HEADER
-+
-+
-+  /*************************************************************************/
-+  /*                                                                       */
-+  /*               PLATFORM-SPECIFIC CONFIGURATION MACROS                  */
-+  /*                                                                       */
-+  /* These macros can be toggled to suit a specific system.  The current   */
-+  /* ones are defaults used to compile FreeType in an ANSI C environment   */
-+  /* (16bit compilers are also supported).  Copy this file to your own     */
-+  /* `freetype/builds/<system>' directory, and edit it to port the engine. */
-+  /*                                                                       */
-+  /*************************************************************************/
-+
-+
-+#define HAVE_UNISTD_H 1
-+#define HAVE_FCNTL_H 1
-+
-+#define SIZEOF_INT 4
-+#define SIZEOF_LONG 4
-+
-+#define FT_SIZEOF_INT   SIZEOF_INT
-+#define FT_SIZEOF_LONG  SIZEOF_LONG
-+
-+
-+  /* Preferred alignment of data */
-+#define FT_ALIGNMENT  8
-+
-+
-+  /* FT_UNUSED is a macro used to indicate that a given parameter is not  */
-+  /* used -- this is only used to get rid of unpleasant compiler warnings */
-+#ifndef FT_UNUSED
-+#define FT_UNUSED( arg )  ( (arg) = (arg) )
-+#endif
-+
-+
-+  /*************************************************************************/
-+  /*                                                                       */
-+  /*                     AUTOMATIC CONFIGURATION MACROS                    */
-+  /*                                                                       */
-+  /* These macros are computed from the ones defined above.  Don't touch   */
-+  /* their definition, unless you know precisely what you are doing.  No   */
-+  /* porter should need to mess with them.                                 */
-+  /*                                                                       */
-+  /*************************************************************************/
-+
-+
-+  /*************************************************************************/
-+  /*                                                                       */
-+  /* IntN types                                                            */
-+  /*                                                                       */
-+  /*   Used to guarantee the size of some specific integers.               */
-+  /*                                                                       */
-+  typedef signed short    FT_Int16;
-+  typedef unsigned short  FT_UInt16;
-+
-+#if FT_SIZEOF_INT == 4
-+
-+  typedef signed int      FT_Int32;
-+  typedef unsigned int    FT_UInt32;
-+
-+#elif FT_SIZEOF_LONG == 4
-+
-+  typedef signed long     FT_Int32;
-+  typedef unsigned long   FT_UInt32;
-+
-+#else
-+#error "no 32bit type found -- please check your configuration files"
-+#endif
-+
-+#if FT_SIZEOF_LONG == 8
-+
-+  /* FT_LONG64 must be defined if a 64-bit type is available */
-+#define FT_LONG64
-+#define FT_INT64   long
-+
-+#else
-+
-+  /*************************************************************************/
-+  /*                                                                       */
-+  /* Many compilers provide the non-ANSI `long long' 64-bit type.  You can */
-+  /* activate it by defining the FTCALC_USE_LONG_LONG macro in             */
-+  /* `ftoption.h'.                                                         */
-+  /*                                                                       */
-+  /* Note that this will produce many -ansi warnings during library        */
-+  /* compilation, and that in many cases,  the generated code will be      */
-+  /* neither smaller nor faster!                                           */
-+  /*                                                                       */
-+#ifdef FTCALC_USE_LONG_LONG
-+
-+#define FT_LONG64
-+#define FT_INT64   long long
-+
-+#endif /* FTCALC_USE_LONG_LONG */
-+#endif /* FT_SIZEOF_LONG == 8 */
-+
-+
-+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
-+
-+#define FT_LOCAL( x )      static  x
-+#define FT_LOCAL_DEF( x )  static  x
-+
-+#else
-+
-+#ifdef __cplusplus
-+#define FT_LOCAL( x )      extern "C"  x
-+#define FT_LOCAL_DEF( x )  extern "C"  x
-+#else
-+#define FT_LOCAL( x )      extern  x
-+#define FT_LOCAL_DEF( x )  extern  x
-+#endif
-+
-+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
-+
-+
-+#ifndef FT_BASE
-+
-+#ifdef __cplusplus
-+#define FT_BASE( x )  extern "C"  x
-+#else
-+#define FT_BASE( x )  extern  x
-+#endif
-+
-+#endif /* !FT_BASE */
-+
-+
-+#ifndef FT_BASE_DEF
-+
-+#ifdef __cplusplus
-+#define FT_BASE_DEF( x )  extern "C"  x
-+#else
-+#define FT_BASE_DEF( x )  extern  x
-+#endif
-+
-+#endif /* !FT_BASE_DEF */
-+
-+
-+#ifndef FT_EXPORT
-+
-+#ifdef __cplusplus
-+#define FT_EXPORT( x )  extern "C"  x
-+#else
-+#define FT_EXPORT( x )  extern  x
-+#endif
-+
-+#endif /* !FT_EXPORT */
-+
-+
-+#ifndef FT_EXPORT_DEF
-+
-+#ifdef __cplusplus
-+#define FT_EXPORT_DEF( x )  extern "C"  x
-+#else
-+#define FT_EXPORT_DEF( x )  extern  x
-+#endif
-+
-+#endif /* !FT_EXPORT_DEF */
-+
-+
-+#ifndef FT_EXPORT_VAR
-+
-+#ifdef __cplusplus
-+#define FT_EXPORT_VAR( x )  extern "C"  x
-+#else
-+#define FT_EXPORT_VAR( x )  extern  x
-+#endif
-+
-+#endif /* !FT_EXPORT_VAR */
-+
-+  /* The following macros are needed to compile the library with a   */
-+  /* C++ compiler and with 16bit compilers.                          */
-+  /*                                                                 */
-+
-+  /* This is special.  Within C++, you must specify `extern "C"' for */
-+  /* functions which are used via function pointers, and you also    */
-+  /* must do that for structures which contain function pointers to  */
-+  /* assure C linkage -- it's not possible to have (local) anonymous */
-+  /* functions which are accessed by (global) function pointers.     */
-+  /*                                                                 */
-+  /*                                                                 */
-+  /* FT_CALLBACK_DEF is used to _define_ a callback function.        */
-+  /*                                                                 */
-+  /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
-+  /* contains pointers to callback functions.                        */
-+  /*                                                                 */
-+  /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable   */
-+  /* that contains pointers to callback functions.                   */
-+  /*                                                                 */
-+  /*                                                                 */
-+  /* Some 16bit compilers have to redefine these macros to insert    */
-+  /* the infamous `_cdecl' or `__fastcall' declarations.             */
-+  /*                                                                 */
-+#ifndef FT_CALLBACK_DEF
-+#ifdef __cplusplus
-+#define FT_CALLBACK_DEF( x )  extern "C"  x
-+#else
-+#define FT_CALLBACK_DEF( x )  static  x
-+#endif
-+#endif /* FT_CALLBACK_DEF */
-+
-+#ifndef FT_CALLBACK_TABLE
-+#ifdef __cplusplus
-+#define FT_CALLBACK_TABLE      extern "C"
-+#define FT_CALLBACK_TABLE_DEF  extern "C"
-+#else
-+#define FT_CALLBACK_TABLE      extern
-+#define FT_CALLBACK_TABLE_DEF  /* nothing */
-+#endif
-+#endif /* FT_CALLBACK_TABLE */
-+
-+
-+FT_END_HEADER
-+
-+#endif /* __FTCONFIG_H__ */
-+
-+
-+/* END */
diff --git a/src/3rdparty/patches/freetype-2.3.6-ascii.patch b/src/3rdparty/patches/freetype-2.3.6-ascii.patch
deleted file mode 100644
index cc46296..0000000
--- a/src/3rdparty/patches/freetype-2.3.6-ascii.patch
+++ /dev/null
@@ -1,174 +0,0 @@
---- include/freetype/ftbbox.h.orig	2007-10-20 15:27:57.000000000 +0200
-+++ include/freetype/ftbbox.h	2008-06-15 00:00:00.000000000 +0200
-@@ -61,7 +61,7 @@
-   /*    Computes the exact bounding box of an outline.  This is slower     */
-   /*    than computing the control box.  However, it uses an advanced      */
-   /*    algorithm which returns _very_ quickly when the two boxes          */
--  /*    coincide.  Otherwise, the outline Bézier arcs are traversed to     */
-+  /*    coincide.  Otherwise, the outline Bezier arcs are traversed to     */
-   /*    extract their extrema.                                             */
-   /*                                                                       */
-   /* <Input>                                                               */
---- include/freetype/ftglyph.h.orig	2008-04-13 23:58:59.000000000 +0200
-+++ include/freetype/ftglyph.h	2008-06-15 00:00:00.000000000 +0200
-@@ -354,10 +354,10 @@
-   /*                                                                       */
-   /* <Description>                                                         */
-   /*    Return a glyph's `control box'.  The control box encloses all the  */
--  /*    outline's points, including Bézier control points.  Though it      */
-+  /*    outline's points, including Bezier control points.  Though it      */
-   /*    coincides with the exact bounding box for most glyphs, it can be   */
-   /*    slightly larger in some situations (like when rotating an outline  */
--  /*    which contains Bézier outside arcs).                               */
-+  /*    which contains Bezier outside arcs).                               */
-   /*                                                                       */
-   /*    Computing the control box is very fast, while getting the bounding */
-   /*    box can take much more time as it needs to walk over all segments  */
---- include/freetype/ftimage.h.orig	2008-05-31 08:46:38.000000000 +0200
-+++ include/freetype/ftimage.h	2008-06-15 00:00:00.000000000 +0200
-@@ -318,11 +318,11 @@
-   /*                                                                       */
-   /*    tags       :: A pointer to an array of `n_points' chars, giving    */
-   /*                  each outline point's type.  If bit 0 is unset, the   */
--  /*                  point is `off' the curve, i.e., a Bézier control     */
-+  /*                  point is `off' the curve, i.e., a Bezier control     */
-   /*                  point, while it is `on' when set.                    */
-   /*                                                                       */
-   /*                  Bit 1 is meaningful for `off' points only.  If set,  */
--  /*                  it indicates a third-order Bézier arc control point; */
-+  /*                  it indicates a third-order Bezier arc control point; */
-   /*                  and a second-order control point if unset.           */
-   /*                                                                       */
-   /*    contours   :: An array of `n_contours' shorts, giving the end      */
-@@ -528,7 +528,7 @@
-   /*    A function pointer type use to describe the signature of a `conic  */
-   /*    to' function during outline walking/decomposition.                 */
-   /*                                                                       */
--  /*    A `conic to' is emitted to indicate a second-order Bézier arc in   */
-+  /*    A `conic to' is emitted to indicate a second-order Bezier arc in   */
-   /*    the outline.                                                       */
-   /*                                                                       */
-   /* <Input>                                                               */
-@@ -560,12 +560,12 @@
-   /*    A function pointer type used to describe the signature of a `cubic */
-   /*    to' function during outline walking/decomposition.                 */
-   /*                                                                       */
--  /*    A `cubic to' is emitted to indicate a third-order Bézier arc.      */
-+  /*    A `cubic to' is emitted to indicate a third-order Bezier arc.      */
-   /*                                                                       */
-   /* <Input>                                                               */
--  /*    control1 :: A pointer to the first Bézier control point.           */
-+  /*    control1 :: A pointer to the first Bezier control point.           */
-   /*                                                                       */
--  /*    control2 :: A pointer to the second Bézier control point.          */
-+  /*    control2 :: A pointer to the second Bezier control point.          */
-   /*                                                                       */
-   /*    to       :: A pointer to the target end point.                     */
-   /*                                                                       */
-@@ -591,7 +591,7 @@
-   /*                                                                       */
-   /* <Description>                                                         */
-   /*    A structure to hold various function pointers used during outline  */
--  /*    decomposition in order to emit segments, conic, and cubic Béziers, */
-+  /*    decomposition in order to emit segments, conic, and cubic Beziers, */
-   /*    as well as `move to' and `close to' operations.                    */
-   /*                                                                       */
-   /* <Fields>                                                              */
-@@ -599,9 +599,9 @@
-   /*                                                                       */
-   /*    line_to  :: The segment emitter.                                   */
-   /*                                                                       */
--  /*    conic_to :: The second-order Bézier arc emitter.                   */
-+  /*    conic_to :: The second-order Bezier arc emitter.                   */
-   /*                                                                       */
--  /*    cubic_to :: The third-order Bézier arc emitter.                    */
-+  /*    cubic_to :: The third-order Bezier arc emitter.                    */
-   /*                                                                       */
-   /*    shift    :: The shift that is applied to coordinates before they   */
-   /*                are sent to the emitter.                               */
-@@ -698,7 +698,7 @@
-   /*                                                                       */
-   /*    FT_GLYPH_FORMAT_OUTLINE ::                                         */
-   /*      The glyph image is a vectorial outline made of line segments     */
--  /*      and Bézier arcs; it can be described as an @FT_Outline; you      */
-+  /*      and Bezier arcs; it can be described as an @FT_Outline; you      */
-   /*      generally want to access the `outline' field of the              */
-   /*      @FT_GlyphSlotRec structure to read it.                           */
-   /*                                                                       */
---- include/freetype/ftoutln.h.orig      2008-05-29 00:05:07.000000000 +0200
-+++ include/freetype/ftoutln.h   2008-06-15 00:00:00.000000000 +0200
-@@ -85,7 +85,7 @@
-   /*                                                                       */
-   /* <Description>                                                         */
-   /*    Walks over an outline's structure to decompose it into individual  */
--  /*    segments and Bézier arcs.  This function is also able to emit      */
-+  /*    segments and Bezier arcs.  This function is also able to emit      */
-   /*    `move to' and `close to' operations to indicate the start and end  */
-   /*    of new contours in the outline.                                    */
-   /*                                                                       */
-@@ -213,10 +213,10 @@
-   /*                                                                       */
-   /* <Description>                                                         */
-   /*    Returns an outline's `control box'.  The control box encloses all  */
--  /*    the outline's points, including Bézier control points.  Though it  */
-+  /*    the outline's points, including Bezier control points.  Though it  */
-   /*    coincides with the exact bounding box for most glyphs, it can be   */
-   /*    slightly larger in some situations (like when rotating an outline  */
--  /*    which contains Bézier outside arcs).                               */
-+  /*    which contains Bezier outside arcs).                               */
-   /*                                                                       */
-   /*    Computing the control box is very fast, while getting the bounding */
-   /*    box can take much more time as it needs to walk over all segments  */
---- include/freetype/ftstroke.h.orig     2008-05-29 00:06:54.000000000 +0200
-+++ include/freetype/ftstroke.h  2008-06-15 00:00:00.000000000 +0200
-@@ -407,7 +407,7 @@
-    *   FT_Stroker_ConicTo
-    *
-    * @description:
--   *   `Draw' a single quadratic Bézier in the stroker's current sub-path,
-+   *   `Draw' a single quadratic Bezier in the stroker's current sub-path,
-    *   from the last position.
-    *
-    * @input:
-@@ -415,7 +415,7 @@
-    *     The target stroker handle.
-    *
-    *   control ::
--   *     A pointer to a Bézier control point.
-+   *     A pointer to a Bezier control point.
-    *
-    *   to ::
-    *     A pointer to the destination point.
-@@ -439,7 +439,7 @@
-    *   FT_Stroker_CubicTo
-    *
-    * @description:
--   *   `Draw' a single cubic Bézier in the stroker's current sub-path,
-+   *   `Draw' a single cubic Bezier in the stroker's current sub-path,
-    *   from the last position.
-    *
-    * @input:
-@@ -447,10 +447,10 @@
-    *     The target stroker handle.
-    *
-    *   control1 ::
--   *     A pointer to the first Bézier control point.
-+   *     A pointer to the first Bezier control point.
-    *
-    *   control2 ::
--   *     A pointer to second Bézier control point.
-+   *     A pointer to second Bezier control point.
-    *
-    *   to ::
-    *     A pointer to the destination point.
---- include/freetype/ftwinfnt.h.orig     2008-05-28 23:27:19.000000000 +0200
-+++ include/freetype/ftwinfnt.h  2008-06-15 00:00:00.000000000 +0200
-@@ -77,7 +77,7 @@
-    *     Mac Roman encoding.
-    *
-    *   FT_WinFNT_ID_OEM ::
--   *     From Michael Pöttgen <michael@poettgen.de>:
-+   *     From Michael Poettgen <michael@poettgen.de>:
-    *
-    *       The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM
-    *       is used for the charset of vector fonts, like `modern.fon',
diff --git a/src/3rdparty/patches/freetype-2.3.6-vxworks.patch b/src/3rdparty/patches/freetype-2.3.6-vxworks.patch
deleted file mode 100644
index 21e884c..0000000
--- a/src/3rdparty/patches/freetype-2.3.6-vxworks.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git builds/unix/ftsystem.c builds/unix/ftsystem.c
-index 3a740fd..40fa8d0 100644
---- builds/unix/ftsystem.c
-+++ builds/unix/ftsystem.c
-@@ -69,6 +69,9 @@
- #include <string.h>
- #include <errno.h>
- 
-+#ifdef VXWORKS
-+#include <ioLib.h>
-+#endif
- 
-   /*************************************************************************/
-   /*                                                                       */
-@@ -238,7 +241,7 @@
-       return FT_Err_Invalid_Stream_Handle;
- 
-     /* open the file */
--    file = open( filepathname, O_RDONLY );
-+    file = open( filepathname, O_RDONLY, 0);
-     if ( file < 0 )
-     {
-       FT_ERROR(( "FT_Stream_Open:" ));
-@@ -317,7 +320,11 @@
- 
- 
-         read_count = read( file,
-+#ifndef VXWORKS
-                            stream->base + total_read_count,
-+#else
-+                           (char *) stream->base + total_read_count,
-+#endif
-                            stream->size - total_read_count );
- 
-         if ( read_count <= 0 )
diff --git a/src/3rdparty/patches/libjpeg-6b-config.patch b/src/3rdparty/patches/libjpeg-6b-config.patch
deleted file mode 100644
index 3012b8f..0000000
--- a/src/3rdparty/patches/libjpeg-6b-config.patch
+++ /dev/null
@@ -1,50 +0,0 @@
---- jconfig.h.orig	1970-01-01 01:00:00.000000000 +0100
-+++ jconfig.h	2006-06-15 00:00:00.000000000 +0200
-@@ -0,0 +1,47 @@
-+/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 95 or NT. */
-+/* see jconfig.doc for explanations */
-+
-+#define HAVE_PROTOTYPES
-+#define HAVE_UNSIGNED_CHAR
-+#define HAVE_UNSIGNED_SHORT
-+/* #define void char */
-+/* #define const */
-+#undef CHAR_IS_UNSIGNED
-+#define HAVE_STDDEF_H
-+#define HAVE_STDLIB_H
-+#undef NEED_BSD_STRINGS
-+#undef NEED_SYS_TYPES_H
-+#undef NEED_FAR_POINTERS	/* we presume a 32-bit flat memory model */
-+#undef NEED_SHORT_EXTERNAL_NAMES
-+#undef INCOMPLETE_TYPES_BROKEN
-+
-+#if defined(_WIN32)
-+/* Define "boolean" as unsigned char, not int, per Windows custom */
-+#ifndef __RPCNDR_H__		/* don't conflict if rpcndr.h already read */
-+typedef unsigned char boolean;
-+#endif
-+#define HAVE_BOOLEAN		/* prevent jmorecfg.h from redefining it */
-+#endif
-+
-+
-+#ifdef JPEG_INTERNALS
-+
-+#undef RIGHT_SHIFT_IS_UNSIGNED
-+
-+#endif /* JPEG_INTERNALS */
-+
-+#ifdef JPEG_CJPEG_DJPEG
-+
-+#define BMP_SUPPORTED		/* BMP image file format */
-+#define GIF_SUPPORTED		/* GIF image file format */
-+#define PPM_SUPPORTED		/* PBMPLUS PPM/PGM image file format */
-+#undef RLE_SUPPORTED		/* Utah RLE image file format */
-+#define TARGA_SUPPORTED		/* Targa image file format */
-+
-+#define TWO_FILE_COMMANDLINE	/* optional */
-+#define USE_SETMODE		/* Microsoft has setmode() */
-+#undef NEED_SIGNAL_CATCHER
-+#undef DONT_USE_B_MODE
-+#undef PROGRESS_REPORT		/* optional */
-+
-+#endif /* JPEG_CJPEG_DJPEG */
diff --git a/src/3rdparty/patches/libjpeg-6b-vxworks.patch b/src/3rdparty/patches/libjpeg-6b-vxworks.patch
deleted file mode 100644
index 263c8d0..0000000
--- a/src/3rdparty/patches/libjpeg-6b-vxworks.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff --git jmorecfg.h jmorecfg.h
-index 54a7d1c..b0b5870 100644
---- jmorecfg.h
-+++ jmorecfg.h
-@@ -157,7 +157,7 @@ typedef short INT16;
- 
- /* INT32 must hold at least signed 32-bit values. */
- 
--#ifndef XMD_H			/* X11/xmd.h correctly defines INT32 */
-+#if !defined(XMD_H) && !defined(VXWORKS)			/* X11/xmd.h correctly defines INT32 */
- typedef long INT32;
- #endif
- 
-@@ -183,6 +183,9 @@ typedef unsigned int JDIMENSION;
- /* a function called through method pointers: */
- #define METHODDEF(type)		static type
- /* a function used only in its module: */
-+#if defined(VXWORKS) && defined(LOCAL)
-+# undef LOCAL
-+#endif
- #define LOCAL(type)		static type
- /* a function referenced thru EXTERNs: */
- #define GLOBAL(type)		type
diff --git a/src/3rdparty/patches/libpng-1.2.20-elf-visibility.patch b/src/3rdparty/patches/libpng-1.2.20-elf-visibility.patch
deleted file mode 100644
index a374cbf..0000000
--- a/src/3rdparty/patches/libpng-1.2.20-elf-visibility.patch
+++ /dev/null
@@ -1,17 +0,0 @@
---- pngconf.h.orig	2007-09-08 05:22:56.000000000 +0200
-+++ pngconf.h	2007-09-09 00:00:00.000000000 +0200
-@@ -1375,6 +1375,14 @@
- #      if 0 /* ... other platforms, with other meanings */
- #      endif
- #   endif
-+
-+#   if !defined(PNG_IMPEXP)
-+#       include <qconfig.h>
-+#       if defined(QT_VISIBILITY_AVAILABLE)
-+#           define PNG_IMPEXP __attribute__((visibility("default")))
-+#       endif
-+#   endif
-+
- #endif
- 
- #ifndef PNGAPI
diff --git a/src/3rdparty/patches/libpng-1.2.20-vxworks.patch b/src/3rdparty/patches/libpng-1.2.20-vxworks.patch
deleted file mode 100644
index 4c49b3f..0000000
--- a/src/3rdparty/patches/libpng-1.2.20-vxworks.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git pngconf.h pngconf.h
-index 19e4732..8eb7d35 100644
---- pngconf.h
-+++ pngconf.h
-@@ -344,7 +344,7 @@
- #  endif /* __linux__ */
- #endif /* PNG_SETJMP_SUPPORTED */
- 
--#ifdef BSD
-+#if defined(BSD) && !defined(VXWORKS)
- #  include <strings.h>
- #else
- #  include <string.h>
diff --git a/src/3rdparty/patches/libtiff-3.8.2-config.patch b/src/3rdparty/patches/libtiff-3.8.2-config.patch
deleted file mode 100644
index 44230ea..0000000
--- a/src/3rdparty/patches/libtiff-3.8.2-config.patch
+++ /dev/null
@@ -1,374 +0,0 @@
---- libtiff/tif_config.h	1970-01-01 01:00:00.000000000 +0100
-+++ libtiff/tif_config.h	2008-05-25 00:00:00.000000000 +0200
-@@ -0,0 +1,296 @@
-+/*
-+  Configuration defines by Trolltech.
-+*/
-+
-+#include <qglobal.h>
-+#if defined(Q_OS_WINCE)
-+# include <qfunctions_wince.h>
-+#endif
-+
-+/* Support CCITT Group 3 & 4 algorithms */
-+#define CCITT_SUPPORT 1
-+
-+/* Pick up YCbCr subsampling info from the JPEG data stream to support files
-+   lacking the tag (default enabled). */
-+#define CHECK_JPEG_YCBCR_SUBSAMPLING 1
-+
-+/* Support C++ stream API (requires C++ compiler) */
-+/* #undef CXX_SUPPORT */
-+
-+/* Treat extra sample as alpha (default enabled). The RGBA interface will
-+   treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many
-+   packages produce RGBA files but don't mark the alpha properly. */
-+#define DEFAULT_EXTRASAMPLE_AS_ALPHA 1
-+
-+/* Use the Apple OpenGL framework. */
-+/* #undef HAVE_APPLE_OPENGL_FRAMEWORK */
-+
-+/* Define to 1 if you have the <assert.h> header file. */
-+#define HAVE_ASSERT_H 1
-+
-+/* Define to 1 if you have the <dlfcn.h> header file. */
-+/* #undef HAVE_DLFCN_H */
-+
-+/* Define to 1 if you have the <fcntl.h> header file. */
-+#if !defined(Q_OS_WINCE)
-+#define HAVE_FCNTL_H 1
-+#endif
-+
-+/* Define to 1 if you have the `floor' function. */
-+/* #undef HAVE_FLOOR */
-+
-+/* Define to 1 if you have the `getopt' function. */
-+/* #undef HAVE_GETOPT */
-+
-+/* Define as 0 or 1 according to the floating point format suported by the
-+   machine */
-+#define HAVE_IEEEFP 1
-+
-+/* Define to 1 if the system has the type `int16'. */
-+/* #undef HAVE_INT16 */
-+#ifdef Q_OS_AIX
-+#define HAVE_INT16 1
-+#endif
-+
-+/* Define to 1 if the system has the type `int32'. */
-+/* #undef HAVE_INT32 */
-+#ifdef Q_OS_AIX
-+#define HAVE_INT32 1
-+#endif
-+
-+/* Define to 1 if the system has the type `int8'. */
-+/* #undef HAVE_INT8 */
-+#ifdef Q_OS_AIX
-+#define HAVE_INT8 1
-+#endif
-+
-+/* Define to 1 if you have the <inttypes.h> header file. */
-+/* #undef HAVE_INTTYPES_H */
-+
-+/* Define to 1 if you have the `isascii' function. */
-+/* #undef HAVE_ISASCII */
-+
-+/* Define to 1 if you have the `lfind' function. */
-+/* #undef HAVE_LFIND */
-+
-+/* Define to 1 if you have the `c' library (-lc). */
-+/* #undef HAVE_LIBC */
-+
-+/* Define to 1 if you have the `m' library (-lm). */
-+/* #undef HAVE_LIBM */
-+
-+/* Define to 1 if you have the <limits.h> header file. */
-+/* #undef HAVE_LIMITS_H */
-+
-+/* Define to 1 if you have the <malloc.h> header file. */
-+/* #undef HAVE_MALLOC_H */
-+
-+/* Define to 1 if you have the `memmove' function. */
-+/* #undef HAVE_MEMMOVE */
-+
-+/* Define to 1 if you have the <memory.h> header file. */
-+/* #undef HAVE_MEMORY_H */
-+
-+/* Define to 1 if you have the `memset' function. */
-+/* #undef HAVE_MEMSET */
-+
-+/* Define to 1 if you have the `mmap' function. */
-+/* #undef HAVE_MMAP */
-+
-+/* Define to 1 if you have the `pow' function. */
-+/* #undef HAVE_POW */
-+
-+/* Define if you have POSIX threads libraries and header files. */
-+/* #undef HAVE_PTHREAD */
-+
-+/* Define to 1 if you have the <search.h> header file. */
-+#if !defined(Q_OS_WINCE)
-+#define HAVE_SEARCH_H 1
-+#endif
-+
-+/* Define to 1 if you have the `sqrt' function. */
-+/* #undef HAVE_SQRT */
-+
-+/* Define to 1 if you have the <stdint.h> header file. */
-+/* #undef HAVE_STDINT_H */
-+
-+/* Define to 1 if you have the <stdlib.h> header file. */
-+/* #undef HAVE_STDLIB_H */
-+
-+/* Define to 1 if you have the `strcasecmp' function. */
-+/* #undef HAVE_STRCASECMP */
-+
-+/* Define to 1 if you have the `strchr' function. */
-+/* #undef HAVE_STRCHR */
-+
-+/* Define to 1 if you have the <strings.h> header file. */
-+/* #undef HAVE_STRINGS_H */
-+
-+/* Define to 1 if you have the <string.h> header file. */
-+#define HAVE_STRING_H 1
-+
-+/* Define to 1 if you have the `strrchr' function. */
-+/* #undef HAVE_STRRCHR */
-+
-+/* Define to 1 if you have the `strstr' function. */
-+/* #undef HAVE_STRSTR */
-+
-+/* Define to 1 if you have the `strtol' function. */
-+/* #undef HAVE_STRTOL */
-+
-+/* Define to 1 if you have the `strtoul' function. */
-+/* #undef HAVE_STRTOUL */
-+
-+/* Define to 1 if you have the <sys/stat.h> header file. */
-+/* #undef HAVE_SYS_STAT_H */
-+
-+/* Define to 1 if you have the <sys/time.h> header file. */
-+/* #undef HAVE_SYS_TIME_H */
-+
-+/* Define to 1 if you have the <sys/types.h> header file. */
-+#define HAVE_SYS_TYPES_H 1
-+
-+/* Define to 1 if you have the <unistd.h> header file. */
-+#define HAVE_UNISTD_H 1
-+
-+/* Define to 1 if you have the <windows.h> header file. */
-+/* #undef HAVE_WINDOWS_H */
-+#ifdef Q_OS_WIN
-+#define TIF_PLATFORM_CONSOLE
-+#endif
-+
-+/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian
-+   (Intel) */
-+#if (Q_BYTE_ORDER == Q_BIG_ENDIAN)
-+#define HOST_BIGENDIAN 1
-+#else
-+#define HOST_BIGENDIAN 0
-+#endif
-+
-+/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */
-+#define HOST_FILLORDER FILLORDER_LSB2MSB
-+
-+/* Support JPEG compression (requires IJG JPEG library) */
-+/* #undef JPEG_SUPPORT */
-+
-+/* Support LogLuv high dynamic range encoding */
-+#define LOGLUV_SUPPORT 1
-+
-+/* Define to the sub-directory in which libtool stores uninstalled libraries.
-+   */
-+/* #undef LT_OBJDIR */
-+
-+/* Support LZW algorithm */
-+#define LZW_SUPPORT 1
-+
-+/* Support Microsoft Document Imaging format */
-+#define MDI_SUPPORT 1
-+
-+/* Support NeXT 2-bit RLE algorithm */
-+#define NEXT_SUPPORT 1
-+
-+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-+/* #undef NO_MINUS_C_MINUS_O */
-+
-+/* Support Old JPEG compresson (read contrib/ojpeg/README first! Compilation
-+   fails with unpatched IJG JPEG library) */
-+/* #undef OJPEG_SUPPORT */
-+
-+/* Name of package */
-+/* #undef PACKAGE */
-+
-+/* Define to the address where bug reports for this package should be sent. */
-+/* #undef PACKAGE_BUGREPORT */
-+
-+/* Define to the full name of this package. */
-+/* #undef PACKAGE_NAME */
-+
-+/* Define to the full name and version of this package. */
-+/* #undef PACKAGE_STRING */
-+
-+/* Define to the one symbol short name of this package. */
-+/* #undef PACKAGE_TARNAME */
-+
-+/* Define to the version of this package. */
-+/* #undef PACKAGE_VERSION */
-+
-+/* Support Macintosh PackBits algorithm */
-+#define PACKBITS_SUPPORT 1
-+
-+/* Support Pixar log-format algorithm (requires Zlib) */
-+#define PIXARLOG_SUPPORT 1
-+
-+/* Define to necessary symbol if this constant uses a non-standard name on
-+   your system. */
-+/* #undef PTHREAD_CREATE_JOINABLE */
-+
-+/* The size of a `int', as computed by sizeof. */
-+#define SIZEOF_INT 4
-+
-+/* The size of a `long', as computed by sizeof. */
-+#if (QT_POINTER_SIZE == 8) && !defined(Q_OS_WIN64)
-+#define SIZEOF_LONG 8
-+#else
-+#define SIZEOF_LONG 4
-+#endif
-+
-+/* Define to 1 if you have the ANSI C header files. */
-+/* #undef STDC_HEADERS */
-+
-+/* Support strip chopping (whether or not to convert single-strip uncompressed
-+   images to mutiple strips of specified size to reduce memory usage) */
-+#define STRIPCHOP_DEFAULT TIFF_STRIPCHOP
-+
-+/* Default size of the strip in bytes (when strip chopping enabled) */
-+/* #undef STRIP_SIZE_DEFAULT */
-+
-+/* Enable SubIFD tag (330) support */
-+#define SUBIFD_SUPPORT 1
-+
-+/* Support ThunderScan 4-bit RLE algorithm */
-+#define THUNDER_SUPPORT 1
-+
-+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-+/* #undef TIME_WITH_SYS_TIME */
-+
-+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
-+/* #undef TM_IN_SYS_TIME */
-+
-+/* Version number of package */
-+/* #undef VERSION */
-+
-+/* Define to 1 if your processor stores words with the most significant byte
-+   first (like Motorola and SPARC, unlike Intel and VAX). */
-+#if (Q_BYTE_ORDER == Q_BIG_ENDIAN)
-+#define WORDS_BIGENDIAN 1
-+#else
-+/* #undef WORDS_BIGENDIAN */
-+#endif
-+
-+/* Define to 1 if the X Window System is missing or not being used. */
-+/* #undef X_DISPLAY_MISSING */
-+
-+/* Support Deflate compression */
-+#define ZIP_SUPPORT 1
-+
-+/* Number of bits in a file offset, on hosts where this is settable. */
-+/* #undef _FILE_OFFSET_BITS */
-+
-+/* Define for large files, on AIX-style hosts. */
-+/* #undef _LARGE_FILES */
-+
-+/* Define to empty if `const' does not conform to ANSI C. */
-+/* #undef const */
-+
-+/* Define to `__inline__' or `__inline' if that's what the C compiler
-+   calls it, or to nothing if 'inline' is not supported under any name.  */
-+#ifndef __cplusplus
-+#undef inline
-+#define inline
-+#endif
-+
-+/* Define to `long' if <sys/types.h> does not define. */
-+/* #undef off_t */
-+
-+/* Define to `unsigned' if <sys/types.h> does not define. */
-+/* #undef size_t */
---- libtiff/tiffconf.h	2006-03-23 15:55:22.000000000 +0100
-+++ libtiff/tiffconf.h	2008-05-25 00:00:00.000000000 +0200
-@@ -1,6 +1,5 @@
--/* libtiff/tiffconf.h.  Generated by configure.  */
- /*
--  Configuration defines for installed libtiff.
-+  Configuration defines by Trolltech.
-   This file maintained for backward compatibility. Do not use definitions
-   from this file in your programs.
- */
-@@ -8,6 +7,8 @@
- #ifndef _TIFFCONF_
- #define _TIFFCONF_
- 
-+#include <qglobal.h>
-+
- /* Define to 1 if the system has the type `int16'. */
- /* #undef HAVE_INT16 */
- 
-@@ -21,7 +22,11 @@
- #define SIZEOF_INT 4
- 
- /* The size of a `long', as computed by sizeof. */
-+#if (QT_POINTER_SIZE == 8) && !defined(Q_OS_WIN64)
-+#define SIZEOF_LONG 8
-+#else
- #define SIZEOF_LONG 4
-+#endif
- 
- /* Compatibility stuff. */
- 
-@@ -34,13 +39,17 @@
- 
- /* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian
-    (Intel) */
-+#if (Q_BYTE_ORDER == Q_BIG_ENDIAN)
-+#define HOST_BIGENDIAN 1
-+#else
- #define HOST_BIGENDIAN 0
-+#endif
- 
- /* Support CCITT Group 3 & 4 algorithms */
- #define CCITT_SUPPORT 1
- 
- /* Support JPEG compression (requires IJG JPEG library) */
--#define JPEG_SUPPORT 1
-+/* #undef JPEG_SUPPORT */
- 
- /* Support LogLuv high dynamic range encoding */
- #define LOGLUV_SUPPORT 1
---- libtiff/tiffiop.h	2006-03-21 17:42:50.000000000 +0100
-+++ libtiff/tiffiop.h	2008-05-25 00:00:00.000000000 +0200
-@@ -37,7 +37,12 @@
- #endif
- 
- #ifdef HAVE_SYS_TYPES_H
-+#if !defined(Q_OS_WINCE)
- # include <sys/types.h>
-+#else
-+# include <windows.h>
-+# include <types.h>
-+#endif
- #endif
- 
- #ifdef HAVE_STRING_H
---- libtiff/tif_win32.c	2006-02-07 14:51:03.000000000 +0100
-+++ libtiff/tif_win32.c	2008-05-25 00:00:00.000000000 +0200
-@@ -29,6 +29,7 @@
-  * Scott Wagner (wagner@itek.com), Itek Graphix, Rochester, NY USA
-  */
- #include "tiffiop.h"
-+#include <windows.h>
- 
- static tsize_t
- _tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
diff --git a/src/3rdparty/patches/libtiff-3.8.2-vxworks.patch b/src/3rdparty/patches/libtiff-3.8.2-vxworks.patch
deleted file mode 100644
index b1b725e..0000000
--- a/src/3rdparty/patches/libtiff-3.8.2-vxworks.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- libtiff/tif_config.h.orig
-+++ libtiff/tif_config.h
-@@ -104,7 +104,7 @@
- /* #undef HAVE_PTHREAD */
- 
- /* Define to 1 if you have the <search.h> header file. */
--#if !defined(Q_OS_WINCE)
-+#if !defined(Q_OS_WINCE) && !defined(Q_OS_VXWORKS)
- #define HAVE_SEARCH_H 1
- #endif
- 
diff --git a/src/3rdparty/patches/sqlite-3.5.6-config.patch b/src/3rdparty/patches/sqlite-3.5.6-config.patch
deleted file mode 100644
index cf158ea..0000000
--- a/src/3rdparty/patches/sqlite-3.5.6-config.patch
+++ /dev/null
@@ -1,38 +0,0 @@
---- sqlite3.c.orig	2008-02-06 16:03:28.000000000 +0100
-+++ sqlite3.c	2008-02-13 00:00:00.000000000 +0100
-@@ -16823,6 +16823,8 @@
- */
- #if OS_UNIX              /* This file is used on unix only */
- 
-+#include <qconfig.h>
-+
- /* #define SQLITE_ENABLE_LOCKING_STYLE 0 */
- 
- /*
-@@ -16865,7 +16867,7 @@
- ** If we are to be thread-safe, include the pthreads header and define
- ** the SQLITE_UNIX_THREADS macro.
- */
--#if SQLITE_THREADSAFE
-+#ifndef QT_NO_THREAD
- # define SQLITE_UNIX_THREADS 1
- #endif
- 
-@@ -19739,6 +19741,8 @@
- ** desktops but not so well in embedded systems.
- */
- 
-+#include <qconfig.h>
-+
- #include <winbase.h>
- 
- #ifdef __CYGWIN__
-@@ -19748,7 +19752,7 @@
- /*
- ** Macros used to determine whether or not to use threads.
- */
--#if defined(THREADSAFE) && THREADSAFE
-+#ifndef QT_NO_THREAD
- # define SQLITE_W32_THREADS 1
- #endif
- 
diff --git a/src/3rdparty/patches/sqlite-3.5.6-vxworks.patch b/src/3rdparty/patches/sqlite-3.5.6-vxworks.patch
deleted file mode 100644
index 6ae65fd..0000000
--- a/src/3rdparty/patches/sqlite-3.5.6-vxworks.patch
+++ /dev/null
@@ -1,68 +0,0 @@
---- sqlite3.c.orig
-+++ sqlite3.c
-@@ -383,7 +383,7 @@ SQLITE_PRIVATE   void sqlite3Coverage(int);
- **
- ** See also ticket #2741.
- */
--#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQLITE_THREADSAFE
-+#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQLITE_THREADSAFE && !defined(VXWORKS)
- #  define _XOPEN_SOURCE 500  /* Needed to enable pthread recursive mutexes */
- #endif
- 
-@@ -440,6 +440,13 @@ SQLITE_PRIVATE   void sqlite3Coverage(int);
- */
- #ifndef _SQLITE3_H_
- #define _SQLITE3_H_
-+
-+#ifdef VXWORKS
-+# define SQLITE_HOMEGROWN_RECURSIVE_MUTEX
-+# define NO_GETTOD
-+# include <ioLib.h>
-+#endif
-+
- #include <stdarg.h>     /* Needed for the definition of va_list */
- 
- /*
-@@ -18792,7 +18799,11 @@ SQLITE_PRIVATE sqlite3_vfs *sqlite3OsDefaultVfs(void){
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
--#include <sys/time.h>
-+#ifdef VXWORKS
-+# include <sys/times.h>
-+#else
-+# include <sys/time.h>
-+#endif
- #include <errno.h>
- #ifdef SQLITE_ENABLE_LOCKING_STYLE
- #include <sys/ioctl.h>
-@@ -19728,7 +19739,11 @@ static int seekAndWrite(unixFile *id, i64 offset, const void *pBuf, int cnt){
-   if( newOffset!=offset ){
-     return -1;
-   }
-+# ifndef VXWORKS
-   got = write(id->h, pBuf, cnt);
-+# else
-+  got = write(id->h, (char *)pBuf, cnt);
-+# endif
- #endif
-   TIMER_END;
-   OSTRACE5("WRITE   %-3d %5d %7lld %d\n", id->h, got, offset, TIMER_ELAPSED);
-@@ -21554,12 +21569,16 @@ static int unixRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
- #if !defined(SQLITE_TEST)
-   {
-     int pid, fd;
--    fd = open("/dev/urandom", O_RDONLY);
-+    fd = open("/dev/urandom", O_RDONLY, 0);
-     if( fd<0 ){
-       time_t t;
-       time(&t);
-       memcpy(zBuf, &t, sizeof(t));
-+#ifndef VXWORKS
-       pid = getpid();
-+#else
-+      pid = (int)taskIdCurrent();
-+#endif
-       memcpy(&zBuf[sizeof(t)], &pid, sizeof(pid));
-     }else{
-       read(fd, zBuf, nBuf);
diff --git a/src/3rdparty/patches/sqlite-3.5.6-wince.patch b/src/3rdparty/patches/sqlite-3.5.6-wince.patch
deleted file mode 100644
index 02965f8..0000000
--- a/src/3rdparty/patches/sqlite-3.5.6-wince.patch
+++ /dev/null
@@ -1,19 +0,0 @@
---- sqlite3.c.orig	2008-02-06 16:03:28.000000000 +0100
-+++ sqlite3.c	2008-02-13 00:00:00.000000000 +0100
-@@ -8837,6 +8837,16 @@
- }
- 
- /*
-+** Windows CE does not declare the localtime
-+** function as it is not defined anywhere.
-+** Anyway we need the forward-declaration to be
-+** able to define it later on.
-+*/
-+#if defined(_WIN32_WCE) && (_WIN32_WCE >= 0x600)
-+struct tm *__cdecl localtime(const time_t *t);
-+#endif
-+
-+/*
- ** Compute the difference (in days) between localtime and UTC (a.k.a. GMT)
- ** for the time value p where p is in UTC.
- */
-- 
cgit v0.12


From 515f6a8c3dbe382bbb4f84f758a61c719143d8a6 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Wed, 3 Mar 2010 14:53:16 +0100
Subject: sizeHint of checkbox/radiobutton without text is not correct

Reviewed-by: Jens Bache-Wiig
---
 src/gui/styles/qcommonstyle.cpp  | 2 +-
 src/gui/widgets/qcheckbox.cpp    | 2 +-
 src/gui/widgets/qradiobutton.cpp | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp
index f8464cc..b0e2d37 100644
--- a/src/gui/styles/qcommonstyle.cpp
+++ b/src/gui/styles/qcommonstyle.cpp
@@ -4760,7 +4760,7 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
 
             int margins = 0;
             // we add 4 pixels for label margins
-            if (btn->icon.isNull() || !btn->text.isEmpty())
+            if (!btn->icon.isNull() || !btn->text.isEmpty())
                 margins = 4 + proxy()->pixelMetric(isRadio ? PM_RadioButtonLabelSpacing
                                                   : PM_CheckBoxLabelSpacing, opt, widget);
             sz += QSize(w + margins, 4);
diff --git a/src/gui/widgets/qcheckbox.cpp b/src/gui/widgets/qcheckbox.cpp
index 4e0ff66..bc0900e 100644
--- a/src/gui/widgets/qcheckbox.cpp
+++ b/src/gui/widgets/qcheckbox.cpp
@@ -291,7 +291,7 @@ QSize QCheckBox::sizeHint() const
     QFontMetrics fm = fontMetrics();
     QStyleOptionButton opt;
     initStyleOption(&opt);
-    QSize sz = style()->itemTextRect(fm, QRect(0, 0, 1, 1), Qt::TextShowMnemonic, false,
+    QSize sz = style()->itemTextRect(fm, QRect(), Qt::TextShowMnemonic, false,
                                      text()).size();
     if (!opt.icon.isNull())
         sz = QSize(sz.width() + opt.iconSize.width() + 4, qMax(sz.height(), opt.iconSize.height()));
diff --git a/src/gui/widgets/qradiobutton.cpp b/src/gui/widgets/qradiobutton.cpp
index d73ff2f..20b6c720 100644
--- a/src/gui/widgets/qradiobutton.cpp
+++ b/src/gui/widgets/qradiobutton.cpp
@@ -195,7 +195,7 @@ QSize QRadioButton::sizeHint() const
     ensurePolished();
     QStyleOptionButton opt;
     initStyleOption(&opt);
-    QSize sz = style()->itemTextRect(fontMetrics(), QRect(0, 0, 1, 1), Qt::TextShowMnemonic,
+    QSize sz = style()->itemTextRect(fontMetrics(), QRect(), Qt::TextShowMnemonic,
                                      false, text()).size();
     if (!opt.icon.isNull())
         sz = QSize(sz.width() + opt.iconSize.width() + 4, qMax(sz.height(), opt.iconSize.height()));
-- 
cgit v0.12


From 5b97c515ea574c1ac23c8595af34de406db2536d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Wed, 3 Mar 2010 15:58:02 +0100
Subject: Updating documentation for how to build QWS with tslib

Reviewed-by: David Boddie <dboddie@trolltech.com>
---
 doc/src/platforms/emb-pointer.qdoc             | 6 +++---
 doc/src/snippets/code/doc_src_emb-pointer.qdoc | 5 ++++-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/doc/src/platforms/emb-pointer.qdoc b/doc/src/platforms/emb-pointer.qdoc
index 34510da..3c37b63 100644
--- a/doc/src/platforms/emb-pointer.qdoc
+++ b/doc/src/platforms/emb-pointer.qdoc
@@ -154,9 +154,9 @@
     in the build environment.
 
     The tslib sources can be downloaded from \l
-    http://tslib.berlios.de. Use the \c configure script's -L and
-    -I options to explicitly specify the location of the library and
-    its headers:
+    http://tslib.berlios.de. Specify the location of the library and
+    its headers using -L and -I options in the \c qmake.conf file in 
+    your \c mkspec. Also it can be helpful to add a -rpath-link:
 
     \snippet doc/src/snippets/code/doc_src_emb-pointer.qdoc 7
 
diff --git a/doc/src/snippets/code/doc_src_emb-pointer.qdoc b/doc/src/snippets/code/doc_src_emb-pointer.qdoc
index 9661ae5..0d66e18 100644
--- a/doc/src/snippets/code/doc_src_emb-pointer.qdoc
+++ b/doc/src/snippets/code/doc_src_emb-pointer.qdoc
@@ -77,7 +77,10 @@ export QWS_MOUSE_PROTO="Vr41xx:press=500:/dev/misc/ts"
 
 
 //! [7]
-./configure  -L <path to tslib library> -I <path to tslib headers>
+....
+QMAKE_CFLAGS += -I<path to tslib headers>
+QMAKE_LFLAGS += -L<path to tslib library> -Wl,-rpath-link=<path to tslib library>
+....
 //! [7]
 
 
-- 
cgit v0.12


From bfd0d6557dc54c0fd0270de6c138ea1031ea092c Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Wed, 3 Mar 2010 16:52:41 +0100
Subject: Fix warnings on MSVC

---
 src/gui/graphicsview/qgraphicslinearlayout.cpp | 2 ++
 src/gui/image/qpixmapfilter.cpp                | 4 ++--
 src/gui/kernel/qwidget.cpp                     | 1 -
 src/gui/painting/qdrawhelper.cpp               | 2 +-
 4 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicslinearlayout.cpp b/src/gui/graphicsview/qgraphicslinearlayout.cpp
index 6a9eb29..9722683 100644
--- a/src/gui/graphicsview/qgraphicslinearlayout.cpp
+++ b/src/gui/graphicsview/qgraphicslinearlayout.cpp
@@ -554,6 +554,8 @@ void QGraphicsLinearLayout::dump(int indent) const
                d->orientation == Qt::Horizontal ? "Horizontal" : "Vertical");
         d->engine.dump(indent + 1);
     }
+#else
+    Q_UNUSED(indent);
 #endif
 }
 
diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp
index 2792e45..0abf51f 100644
--- a/src/gui/image/qpixmapfilter.cpp
+++ b/src/gui/image/qpixmapfilter.cpp
@@ -726,7 +726,7 @@ void expblur(QImage &img, qreal radius, bool improvedQuality = false, int transp
 
     int img_height = img.height();
     for (int row = 0; row < img_height; ++row) {
-        for (int i = 0; i <= improvedQuality; ++i)
+        for (int i = 0; i <= int(improvedQuality); ++i)
             qt_blurrow<aprec, zprec, alphaOnly>(img, row, alpha);
     }
 
@@ -759,7 +759,7 @@ void expblur(QImage &img, qreal radius, bool improvedQuality = false, int transp
 
     img_height = temp.height();
     for (int row = 0; row < img_height; ++row) {
-        for (int i = 0; i <= improvedQuality; ++i)
+        for (int i = 0; i <= int(improvedQuality); ++i)
             qt_blurrow<aprec, zprec, alphaOnly>(temp, row, alpha);
     }
 
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 2f6ec6b..aa5d259 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -5339,7 +5339,6 @@ void QWidgetPrivate::render(QPaintDevice *target, const QPoint &targetOffset,
                             const QRegion &sourceRegion, QWidget::RenderFlags renderFlags,
                             bool readyToRender)
 {
-    Q_Q(QWidget);
     if (!target) {
         qWarning("QWidget::render: null pointer to paint device");
         return;
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index 891f4c2..acd286a 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -7813,7 +7813,6 @@ static void qt_blend_color_argb_armv6(int count, const QSpan *spans, void *userD
 
 void qInitDrawhelperAsm()
 {
-    const uint features = qDetectCPUFeatures();
 
     qt_memfill32 = qt_memfill_template<quint32, quint32>;
     qt_memfill16 = qt_memfill_quint16; //qt_memfill_template<quint16, quint16>;
@@ -7822,6 +7821,7 @@ void qInitDrawhelperAsm()
     CompositionFunctionSolid *functionForModeSolidAsm = 0;
 
 #ifdef QT_NO_DEBUG
+    const uint features = qDetectCPUFeatures();
     if (false) {
 #ifdef QT_HAVE_SSE2
     } else if (features & SSE2) {
-- 
cgit v0.12


From 9b60566af57543310a7b5bec03b5de1e24c7f746 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Wed, 3 Mar 2010 18:30:51 +0100
Subject: Fix source compatibility of qRegisterMetaType

ActiveQt is having construct like
qRegisterMetaType("Foo*", (Foo*)0 );
instead of
qRegisterMetaType<Foo *>("Foo*");
Which the compiler could not disambiguate anymore since
commit 03daf059647c0a0222e8774b0a083f58c8e64934

Reviewed-by: Thierry
---
 src/corelib/kernel/qmetatype.h | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 98ed4bd..2108b92 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -173,7 +173,7 @@ namespace QtPrivate {
 template <typename T>
 int qRegisterMetaType(const char *typeName
 #ifndef qdoc
-    , typename QMetaTypeId2<T>::CustomType * dummy = 0
+    , T * dummy = 0
 #endif
 )
 {
@@ -190,17 +190,6 @@ int qRegisterMetaType(const char *typeName
                                    reinterpret_cast<QMetaType::Constructor>(cptr));
 }
 
-template <typename T>
-int qRegisterMetaType(const char *typeName
-#ifndef qdoc
-    , typename QMetaTypeId2<T>::BuiltinType * /* dummy */ = 0
-#endif
-)
-{
-    return QMetaType::registerTypedef(typeName, QMetaTypeId2<T>::MetaType);
-}
-
-
 #ifndef QT_NO_DATASTREAM
 template <typename T>
 void qRegisterMetaTypeStreamOperators(const char *typeName
@@ -229,7 +218,6 @@ struct QMetaTypeId
 template <typename T>
 struct QMetaTypeId2
 {
-    typedef T CustomType;
     enum { Defined = QMetaTypeId<T>::Defined };
     static inline int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); }
 };
@@ -297,7 +285,6 @@ inline int qRegisterMetaTypeStreamOperators()
     QT_BEGIN_NAMESPACE \
     template<> struct QMetaTypeId2<TYPE> \
     { \
-        typedef TYPE BuiltinType; \
         enum { Defined = 1, MetaType = QMetaType::NAME }; \
         static inline int qt_metatype_id() { return QMetaType::NAME; } \
     }; \
-- 
cgit v0.12


From 89a478c8c747b2f572deb88d028715e88c16853e Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Thu, 4 Mar 2010 09:53:28 +1000
Subject: Make sure currentIndex is updated when view is flicked.

Task-number: QTBUG-8396
---
 examples/declarative/parallax/qml/ParallaxView.qml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/examples/declarative/parallax/qml/ParallaxView.qml b/examples/declarative/parallax/qml/ParallaxView.qml
index 5e58100..08193ae 100644
--- a/examples/declarative/parallax/qml/ParallaxView.qml
+++ b/examples/declarative/parallax/qml/ParallaxView.qml
@@ -25,6 +25,7 @@ Item {
         anchors.fill: parent
         model: VisualItemModel { id: visualModel }
 
+        highlightRangeMode: ListView.StrictlyEnforceRange
         snapMode: ListView.SnapOneItem
     }
 
-- 
cgit v0.12


From 06e61382f0d6f07798f7db3049f3e185be54efc1 Mon Sep 17 00:00:00 2001
From: Warwick Allison <warwick.allison@nokia.com>
Date: Thu, 4 Mar 2010 09:54:16 +1000
Subject: system import path not supported with Qt 4.6.

---
 src/declarative/qml/qdeclarativeengine.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index ecaea61..bd67b0b 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -1383,7 +1383,11 @@ public:
             paths += QFileInfo(base.toLocalFile()).path();
             paths += importPath;
             paths += QDeclarativeEnginePrivate::get(engine)->environmentImportPath;
+#if (QT_VERSION >= QT_VERSION_CHECK(4,7,0))
             QString builtinPath = QLibraryInfo::location(QLibraryInfo::ImportsPath);
+#else
+            QString builtinPath;
+#endif
             if (!builtinPath.isEmpty())
                 paths += builtinPath;
 
-- 
cgit v0.12


From b67d5d90a306534a1ea2fcb333981c6b1126105c Mon Sep 17 00:00:00 2001
From: Warwick Allison <warwick.allison@nokia.com>
Date: Thu, 4 Mar 2010 09:54:42 +1000
Subject: Fix visibility of classes in private headers upon which
 Bauhaus/Creator relies.

Author: Erik Verbruggen
---
 src/declarative/qml/qdeclarativebinding_p.h  | 4 ++--
 src/declarative/qml/qdeclarativeproperty_p.h | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/declarative/qml/qdeclarativebinding_p.h b/src/declarative/qml/qdeclarativebinding_p.h
index ec5809d..1a714f0 100644
--- a/src/declarative/qml/qdeclarativebinding_p.h
+++ b/src/declarative/qml/qdeclarativebinding_p.h
@@ -64,7 +64,7 @@
 
 QT_BEGIN_NAMESPACE
 
-class Q_AUTOTEST_EXPORT QDeclarativeAbstractBinding
+class Q_DECLARATIVE_EXPORT QDeclarativeAbstractBinding
 {
 public:
     QDeclarativeAbstractBinding();
@@ -101,7 +101,7 @@ private:
 
 class QDeclarativeContext;
 class QDeclarativeBindingPrivate;
-class Q_AUTOTEST_EXPORT QDeclarativeBinding : public QDeclarativeExpression, public QDeclarativeAbstractBinding
+class Q_DECLARATIVE_EXPORT QDeclarativeBinding : public QDeclarativeExpression, public QDeclarativeAbstractBinding
 {
 Q_OBJECT
 public:
diff --git a/src/declarative/qml/qdeclarativeproperty_p.h b/src/declarative/qml/qdeclarativeproperty_p.h
index 1fda7f4..c31e2d3 100644
--- a/src/declarative/qml/qdeclarativeproperty_p.h
+++ b/src/declarative/qml/qdeclarativeproperty_p.h
@@ -65,7 +65,7 @@ QT_BEGIN_NAMESPACE
 class QDeclarativeContext;
 class QDeclarativeEnginePrivate;
 class QDeclarativeExpression;
-class Q_AUTOTEST_EXPORT QDeclarativePropertyPrivate
+class Q_DECLARATIVE_EXPORT QDeclarativePropertyPrivate
 {
 public:
     enum WriteFlag { BypassInterceptor = 0x01, DontRemoveBinding = 0x02 };
-- 
cgit v0.12


From 7ab3b4d96a0cedb50d2c1ce5bfe9eed315548c4f Mon Sep 17 00:00:00 2001
From: Michael Brasser <michael.brasser@nokia.com>
Date: Thu, 4 Mar 2010 09:56:03 +1000
Subject: Fix Samegame.

---
 demos/declarative/samegame/SamegameCore/samegame.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/demos/declarative/samegame/SamegameCore/samegame.js b/demos/declarative/samegame/SamegameCore/samegame.js
index c0f10bd..1214b79 100755
--- a/demos/declarative/samegame/SamegameCore/samegame.js
+++ b/demos/declarative/samegame/SamegameCore/samegame.js
@@ -4,7 +4,7 @@ var maxX = 10;//Nums are for gameCanvas.tileSize 40
 var maxY = 15;
 var maxIndex = maxX*maxY;
 var board = new Array(maxIndex);
-var tileSrc = "content/BoomBlock.qml";
+var tileSrc = "SamegameCore/BoomBlock.qml";
 var scoresURL = "http://qtfx-nokia.trolltech.com.au/samegame/scores.php";
 var scoresURL = "";
 var timer;
-- 
cgit v0.12


From 26d28b39504d1c55690985deb52646114b6cf710 Mon Sep 17 00:00:00 2001
From: Michael Brasser <michael.brasser@nokia.com>
Date: Thu, 4 Mar 2010 10:43:33 +1000
Subject: Fix benchmarks.

Get them all running again after renames, etc.
---
 tests/benchmarks/declarative/binding/binding.pro         |  3 +++
 tests/benchmarks/declarative/binding/data/idproperty.txt |  2 +-
 .../declarative/binding/data/objectproperty.txt          |  2 +-
 tests/benchmarks/declarative/binding/testtypes.h         |  6 +++---
 tests/benchmarks/declarative/binding/tst_binding.cpp     | 16 ++++++++--------
 tests/benchmarks/declarative/creation/tst_creation.cpp   |  5 +++--
 .../qdeclarativecomponent/data/samegame/BoomBlock.qml    |  6 +++---
 .../qdeclarativecomponent/qdeclarativecomponent.pro      |  3 +++
 .../declarative/qdeclarativecomponent/testtypes.h        |  6 +++---
 .../qdeclarativecomponent/tst_qdeclarativecomponent.cpp  | 14 +++++++-------
 .../qdeclarativemetaproperty.pro                         |  2 ++
 .../tst_qdeclarativemetaproperty.cpp                     |  8 ++++----
 tests/benchmarks/declarative/script/tst_script.cpp       | 11 ++++++-----
 13 files changed, 47 insertions(+), 37 deletions(-)

diff --git a/tests/benchmarks/declarative/binding/binding.pro b/tests/benchmarks/declarative/binding/binding.pro
index aa4cc41..5ceaf34 100644
--- a/tests/benchmarks/declarative/binding/binding.pro
+++ b/tests/benchmarks/declarative/binding/binding.pro
@@ -7,6 +7,9 @@ macx:CONFIG -= app_bundle
 SOURCES += tst_binding.cpp testtypes.cpp
 HEADERS += testtypes.h
 
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
+
 symbian* {
     data.sources = data/*
     data.path = data
diff --git a/tests/benchmarks/declarative/binding/data/idproperty.txt b/tests/benchmarks/declarative/binding/data/idproperty.txt
index 71e3c4e..4e474ba 100644
--- a/tests/benchmarks/declarative/binding/data/idproperty.txt
+++ b/tests/benchmarks/declarative/binding/data/idproperty.txt
@@ -1,7 +1,7 @@
 import Test 1.0
 
 MyQmlObject {
-    id: MyObject
+    id: myObject
 
     MyQmlObject {
         result: ###
diff --git a/tests/benchmarks/declarative/binding/data/objectproperty.txt b/tests/benchmarks/declarative/binding/data/objectproperty.txt
index 63fa74d..6133dd6 100644
--- a/tests/benchmarks/declarative/binding/data/objectproperty.txt
+++ b/tests/benchmarks/declarative/binding/data/objectproperty.txt
@@ -1,7 +1,7 @@
 import Test 1.0
 
 MyQmlObject {
-    id: MyObject
+    id: myObject
 
     result: ###
 }
diff --git a/tests/benchmarks/declarative/binding/testtypes.h b/tests/benchmarks/declarative/binding/testtypes.h
index 4b103ce..523f94d 100644
--- a/tests/benchmarks/declarative/binding/testtypes.h
+++ b/tests/benchmarks/declarative/binding/testtypes.h
@@ -50,7 +50,7 @@ class MyQmlObject : public QObject
     Q_PROPERTY(int result READ result WRITE setResult);
     Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged);
     Q_PROPERTY(MyQmlObject *object READ object WRITE setObject NOTIFY objectChanged);
-    Q_PROPERTY(QDeclarativeList<QObject *> *data READ data);
+    Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data);
     Q_CLASSINFO("DefaultProperty", "data");
 public:
     MyQmlObject() : m_result(0), m_value(0), m_object(0) {}
@@ -61,7 +61,7 @@ public:
     int value() const { return m_value; }
     void setValue(int v) { m_value = v; emit valueChanged(); }
 
-    QDeclarativeList<QObject *> *data() { return &m_data; }
+    QDeclarativeListProperty<QObject> data() { return QDeclarativeListProperty<QObject>(this, m_data); }
 
     MyQmlObject *object() const { return m_object; }
     void setObject(MyQmlObject *o) { m_object = o; emit objectChanged(); }
@@ -71,7 +71,7 @@ signals:
     void objectChanged();
 
 private:
-    QDeclarativeConcreteList<QObject *> m_data;
+    QList<QObject *> m_data;
     int m_result;
     int m_value;
     MyQmlObject *m_object;
diff --git a/tests/benchmarks/declarative/binding/tst_binding.cpp b/tests/benchmarks/declarative/binding/tst_binding.cpp
index ee529a7..dbddac3 100644
--- a/tests/benchmarks/declarative/binding/tst_binding.cpp
+++ b/tests/benchmarks/declarative/binding/tst_binding.cpp
@@ -103,8 +103,8 @@ void tst_binding::objectproperty_data()
     QTest::addColumn<QString>("file");
     QTest::addColumn<QString>("binding");
 
-    QTest::newRow("object.value") << "data/objectproperty.txt" << "object.value";
-    QTest::newRow("object.value + 10") << "data/objectproperty.txt" << "object.value + 10";
+    QTest::newRow("object.value") << SRCDIR "/data/objectproperty.txt" << "object.value";
+    QTest::newRow("object.value + 10") << SRCDIR "/data/objectproperty.txt" << "object.value + 10";
 }
 
 void tst_binding::objectproperty()
@@ -132,13 +132,13 @@ void tst_binding::basicproperty_data()
     QTest::addColumn<QString>("file");
     QTest::addColumn<QString>("binding");
 
-    QTest::newRow("value") << "data/localproperty.txt" << "value";
-    QTest::newRow("value + 10") << "data/localproperty.txt" << "value + 10";
-    QTest::newRow("value + value + 10") << "data/localproperty.txt" << "value + value + 10";
+    QTest::newRow("value") << SRCDIR "/data/localproperty.txt" << "value";
+    QTest::newRow("value + 10") << SRCDIR "/data/localproperty.txt" << "value + 10";
+    QTest::newRow("value + value + 10") << SRCDIR "/data/localproperty.txt" << "value + value + 10";
 
-    QTest::newRow("MyObject.value") << "data/idproperty.txt" << "MyObject.value";
-    QTest::newRow("MyObject.value + 10") << "data/idproperty.txt" << "MyObject.value + 10";
-    QTest::newRow("MyObject.value + MyObject.value + 10") << "data/idproperty.txt" << "MyObject.value + MyObject.value + 10";
+    QTest::newRow("myObject.value") << SRCDIR "/data/idproperty.txt" << "myObject.value";
+    QTest::newRow("myObject.value + 10") << SRCDIR "/data/idproperty.txt" << "myObject.value + 10";
+    QTest::newRow("myObject.value + myObject.value + 10") << SRCDIR "/data/idproperty.txt" << "myObject.value + myObject.value + 10";
 }
 
 void tst_binding::basicproperty()
diff --git a/tests/benchmarks/declarative/creation/tst_creation.cpp b/tests/benchmarks/declarative/creation/tst_creation.cpp
index 9c0fd27..4319208 100644
--- a/tests/benchmarks/declarative/creation/tst_creation.cpp
+++ b/tests/benchmarks/declarative/creation/tst_creation.cpp
@@ -42,7 +42,7 @@
 #include <qtest.h>
 #include <QDeclarativeEngine>
 #include <QDeclarativeComponent>
-#include <QDeclarativeMetaType>
+#include <private/qdeclarativemetatype_p.h>
 #include <QDebug>
 #include <QGraphicsScene>
 #include <QGraphicsItem>
@@ -339,7 +339,8 @@ void tst_creation::itemtree_data_cpp()
         for (int i = 0; i < 30; ++i) {
             QDeclarativeItem *child = new QDeclarativeItem;
             QDeclarativeGraphics_setParent_noEvent(child,item);
-            item->data()->append(child);
+            QDeclarativeListReference ref(item, "data");
+            ref.append(child);
         }
         delete item;
     }
diff --git a/tests/benchmarks/declarative/qdeclarativecomponent/data/samegame/BoomBlock.qml b/tests/benchmarks/declarative/qdeclarativecomponent/data/samegame/BoomBlock.qml
index 723e62a..e48194a 100644
--- a/tests/benchmarks/declarative/qdeclarativecomponent/data/samegame/BoomBlock.qml
+++ b/tests/benchmarks/declarative/qdeclarativecomponent/data/samegame/BoomBlock.qml
@@ -7,8 +7,8 @@ Item { id:block
     property int targetX: 0
     property int targetY: 0
 
-    x: SpringFollow { enabled: spawned; source: targetX; spring: 2; damping: 0.2 }
-    y: SpringFollow { source: targetY; spring: 2; damping: 0.2 }
+    SpringFollow on x { enabled: spawned; source: targetX; spring: 2; damping: 0.2 }
+    SpringFollow on y { source: targetY; spring: 2; damping: 0.2 }
 
     Image { id: img
         source: {
@@ -21,7 +21,7 @@ Item { id:block
             }
         }
         opacity: 0
-        opacity: Behavior { NumberAnimation { duration: 200 } }
+        Behavior on opacity { NumberAnimation { duration: 200 } }
         anchors.fill: parent
     }
 
diff --git a/tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro b/tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro
index 12fa9f4..30ef235 100644
--- a/tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro
+++ b/tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro
@@ -7,6 +7,9 @@ macx:CONFIG -= app_bundle
 SOURCES += tst_qdeclarativecomponent.cpp testtypes.cpp
 HEADERS += testtypes.h
 
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
+
 symbian* {
     data.sources = data/*
     data.path = data
diff --git a/tests/benchmarks/declarative/qdeclarativecomponent/testtypes.h b/tests/benchmarks/declarative/qdeclarativecomponent/testtypes.h
index 4b103ce..523f94d 100644
--- a/tests/benchmarks/declarative/qdeclarativecomponent/testtypes.h
+++ b/tests/benchmarks/declarative/qdeclarativecomponent/testtypes.h
@@ -50,7 +50,7 @@ class MyQmlObject : public QObject
     Q_PROPERTY(int result READ result WRITE setResult);
     Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged);
     Q_PROPERTY(MyQmlObject *object READ object WRITE setObject NOTIFY objectChanged);
-    Q_PROPERTY(QDeclarativeList<QObject *> *data READ data);
+    Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data);
     Q_CLASSINFO("DefaultProperty", "data");
 public:
     MyQmlObject() : m_result(0), m_value(0), m_object(0) {}
@@ -61,7 +61,7 @@ public:
     int value() const { return m_value; }
     void setValue(int v) { m_value = v; emit valueChanged(); }
 
-    QDeclarativeList<QObject *> *data() { return &m_data; }
+    QDeclarativeListProperty<QObject> data() { return QDeclarativeListProperty<QObject>(this, m_data); }
 
     MyQmlObject *object() const { return m_object; }
     void setObject(MyQmlObject *o) { m_object = o; emit objectChanged(); }
@@ -71,7 +71,7 @@ signals:
     void objectChanged();
 
 private:
-    QDeclarativeConcreteList<QObject *> m_data;
+    QList<QObject *> m_data;
     int m_result;
     int m_value;
     MyQmlObject *m_object;
diff --git a/tests/benchmarks/declarative/qdeclarativecomponent/tst_qdeclarativecomponent.cpp b/tests/benchmarks/declarative/qdeclarativecomponent/tst_qdeclarativecomponent.cpp
index 7065303..4b1456e 100644
--- a/tests/benchmarks/declarative/qdeclarativecomponent/tst_qdeclarativecomponent.cpp
+++ b/tests/benchmarks/declarative/qdeclarativecomponent/tst_qdeclarativecomponent.cpp
@@ -90,13 +90,13 @@ void tst_qmlcomponent::creation_data()
 {
     QTest::addColumn<QString>("file");
 
-    QTest::newRow("Object") << "data/object.qml";
-    QTest::newRow("Object - Id") << "data/object_id.qml";
-    QTest::newRow("MyQmlObject") << "data/myqmlobject.qml";
-    QTest::newRow("MyQmlObject: basic binding") << "data/myqmlobject_binding.qml";
-    QTest::newRow("Synthesized properties") << "data/synthesized_properties.qml";
-    QTest::newRow("Synthesized properties.2") << "data/synthesized_properties.2.qml";
-    QTest::newRow("SameGame - BoomBlock") << "data/samegame/BoomBlock.qml";
+    QTest::newRow("Object") << SRCDIR "/data/object.qml";
+    QTest::newRow("Object - Id") << SRCDIR "/data/object_id.qml";
+    QTest::newRow("MyQmlObject") << SRCDIR "/data/myqmlobject.qml";
+    QTest::newRow("MyQmlObject: basic binding") << SRCDIR "/data/myqmlobject_binding.qml";
+    QTest::newRow("Synthesized properties") << SRCDIR "/data/synthesized_properties.qml";
+    QTest::newRow("Synthesized properties.2") << SRCDIR "/data/synthesized_properties.2.qml";
+    QTest::newRow("SameGame - BoomBlock") << SRCDIR "/data/samegame/BoomBlock.qml";
 }
 
 void tst_qmlcomponent::creation()
diff --git a/tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro b/tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro
index 8070768..79fdd26 100644
--- a/tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro
+++ b/tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro
@@ -6,3 +6,5 @@ macx:CONFIG -= app_bundle
 
 SOURCES += tst_qdeclarativemetaproperty.cpp 
 
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/benchmarks/declarative/qdeclarativemetaproperty/tst_qdeclarativemetaproperty.cpp b/tests/benchmarks/declarative/qdeclarativemetaproperty/tst_qdeclarativemetaproperty.cpp
index dae1751..8a5f4ae 100644
--- a/tests/benchmarks/declarative/qdeclarativemetaproperty/tst_qdeclarativemetaproperty.cpp
+++ b/tests/benchmarks/declarative/qdeclarativemetaproperty/tst_qdeclarativemetaproperty.cpp
@@ -42,7 +42,7 @@
 #include <qtest.h>
 #include <QDeclarativeEngine>
 #include <QDeclarativeComponent>
-#include <QDeclarativeMetaProperty>
+#include <QDeclarativeProperty>
 #include <QFile>
 #include <QDebug>
 
@@ -89,8 +89,8 @@ void tst_qmlmetaproperty::lookup_data()
 {
     QTest::addColumn<QString>("file");
 
-    QTest::newRow("Simple Object") << "data/object.qml";
-    QTest::newRow("Synthesized Object") << "data/synthesized_object.qml";
+    QTest::newRow("Simple Object") << SRCDIR "/data/object.qml";
+    QTest::newRow("Synthesized Object") << SRCDIR "/data/synthesized_object.qml";
 }
 
 void tst_qmlmetaproperty::lookup()
@@ -103,7 +103,7 @@ void tst_qmlmetaproperty::lookup()
     QObject *obj = c.create();
 
     QBENCHMARK {
-        QDeclarativeMetaProperty p(obj, "x");
+        QDeclarativeProperty p(obj, "x");
     }
 
     delete obj;
diff --git a/tests/benchmarks/declarative/script/tst_script.cpp b/tests/benchmarks/declarative/script/tst_script.cpp
index 61f5fc8..9dd4076 100644
--- a/tests/benchmarks/declarative/script/tst_script.cpp
+++ b/tests/benchmarks/declarative/script/tst_script.cpp
@@ -96,11 +96,6 @@ private slots:
 private:
 };
 
-void tst_script::initTestCase()
-{
-    QML_REGISTER_TYPE(Qt.test, 1, 0, TestObject, TestObject);
-}
-
 inline QUrl TEST_FILE(const QString &filename)
 {
     return QUrl::fromLocalFile(QLatin1String(SRCDIR) + QLatin1String("/data/") + filename);
@@ -147,6 +142,12 @@ int TestObject::x()
     return m_x++;
 }
 
+void tst_script::initTestCase()
+{
+    QML_REGISTER_TYPE(Qt.test, 1, 0, TestObject, TestObject);
+}
+
+
 #define PROPERTY_PROGRAM \
     "(function(testObject) { return (function() { " \
     "    var test = 0; " \
-- 
cgit v0.12


From 1c21463aca94051a5c5e293bd9d5f6da8c491bf9 Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Thu, 4 Mar 2010 10:45:55 +1000
Subject: Set StrongFocus on QDeclarativeView so that elements can get focus.

Task-number: QTBUG-8637
---
 src/declarative/util/qdeclarativeview.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp
index f08e634..cd67aeb 100644
--- a/src/declarative/util/qdeclarativeview.cpp
+++ b/src/declarative/util/qdeclarativeview.cpp
@@ -194,6 +194,7 @@ void QDeclarativeViewPrivate::execute()
     \o Initializes QGraphicsView for QML key handling:
         \list
         \o QGraphicsView::viewport()->setFocusPolicy(Qt::NoFocus);
+        \o QGraphicsView::setFocusPolicy(Qt::StrongFocus);
         \o QGraphicsScene::setStickyFocus(true);
         \endlist
     \endlist
@@ -268,6 +269,7 @@ void QDeclarativeViewPrivate::init()
     q->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
     scene.setItemIndexMethod(QGraphicsScene::NoIndex);
     q->viewport()->setFocusPolicy(Qt::NoFocus);
+    q->setFocusPolicy(Qt::StrongFocus);
 
     scene.setStickyFocus(true);  //### needed for correct focus handling
 }
-- 
cgit v0.12


From 4164a11032b64fe5a557515f283fa0e4c6d0260d Mon Sep 17 00:00:00 2001
From: Michael Brasser <michael.brasser@nokia.com>
Date: Thu, 4 Mar 2010 12:18:36 +1000
Subject: Fix test.

---
 tests/benchmarks/declarative/qdeclarativecomponent/data/object_id.qml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/benchmarks/declarative/qdeclarativecomponent/data/object_id.qml b/tests/benchmarks/declarative/qdeclarativecomponent/data/object_id.qml
index 69114af..dc29f15 100644
--- a/tests/benchmarks/declarative/qdeclarativecomponent/data/object_id.qml
+++ b/tests/benchmarks/declarative/qdeclarativecomponent/data/object_id.qml
@@ -1,6 +1,6 @@
 import Qt 4.6
 
 QtObject {
-    id: Blah
+    id: blah
 }
 
-- 
cgit v0.12


From 984625e5788900c96507b773193f519295d0be80 Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Thu, 4 Mar 2010 12:00:06 +1000
Subject: Namespace fixes.

Reviewed-by: Rohan McGovern
---
 src/corelib/tools/qsimd_p.h | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h
index 724f3e0..21f308d 100644
--- a/src/corelib/tools/qsimd_p.h
+++ b/src/corelib/tools/qsimd_p.h
@@ -47,9 +47,6 @@
 
 QT_BEGIN_HEADER
 
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Core)
 
 #if defined(QT_NO_MAC_XARCH) || (defined(Q_OS_DARWIN) && (defined(__ppc__) || defined(__ppc64__)))
 // Disable MMX and SSE on Mac/PPC builds, or if the compiler
@@ -103,6 +100,10 @@ QT_MODULE(Core)
 #include <mm3dnow.h>
 #endif
 
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Core)
+
 enum CPUFeatures {
     None        = 0,
     MMX         = 0x1,
-- 
cgit v0.12


From 6ed01163b4de5e51f760b3627a6271796cbed212 Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Thu, 4 Mar 2010 12:00:47 +1000
Subject: Cocoa namespace fixes.

Reviewed-by: Rohan McGovern
---
 src/gui/kernel/qt_cocoa_helpers_mac.mm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm
index 9560952..c776b2a 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac.mm
+++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm
@@ -373,7 +373,7 @@ QMacTabletHash *qt_mac_tablet_hash()
 // Clears the QWidget pointer that each QCocoaView holds.
 void qt_mac_clearCocoaViewQWidgetPointers(QWidget *widget)
 {
-    QCocoaView *cocoaView = reinterpret_cast<QCocoaView *>(qt_mac_nativeview_for(widget));
+    QT_MANGLE_NAMESPACE(QCocoaView) *cocoaView = reinterpret_cast<QT_MANGLE_NAMESPACE(QCocoaView) *>(qt_mac_nativeview_for(widget));
     if (cocoaView && [cocoaView respondsToSelector:@selector(qt_qwidget)]) {
         [cocoaView qt_clearQWidget];
     }
-- 
cgit v0.12


From 1cc9c745f09c3399aeccc0f9b8ca07bbbfaf143b Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Thu, 4 Mar 2010 12:01:06 +1000
Subject: Fix namespace qml decleration.

Reviewed-by: Andrew den Exter
---
 src/plugins/qdeclarativemodules/multimedia/multimedia.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/plugins/qdeclarativemodules/multimedia/multimedia.cpp b/src/plugins/qdeclarativemodules/multimedia/multimedia.cpp
index e03d8f3..a2e74f4 100644
--- a/src/plugins/qdeclarativemodules/multimedia/multimedia.cpp
+++ b/src/plugins/qdeclarativemodules/multimedia/multimedia.cpp
@@ -47,11 +47,10 @@
 #include "qdeclarativeaudio_p.h"
 
 
+QML_DECLARE_TYPE(QSoundEffect)
 
 QT_BEGIN_NAMESPACE
 
-QML_DECLARE_TYPE(QSoundEffect)
-
 class QMultimediaDeclarativeModule : public QDeclarativeExtensionPlugin
 {
     Q_OBJECT
-- 
cgit v0.12


From 1287332bfc1dfb85c59c309d9f2bf37b970013c9 Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Thu, 4 Mar 2010 12:58:13 +1000
Subject: Document that the views do not set clip: true.

Task-number: QT-2942
---
 src/declarative/graphicsitems/qdeclarativegridview.cpp | 5 +++++
 src/declarative/graphicsitems/qdeclarativelistview.cpp | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index 5b313be..7b97dcc 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -697,6 +697,11 @@ void QDeclarativeGridViewPrivate::updateCurrent(int modelIndex)
 
     In this case ListModel is a handy way for us to test our UI.  In practice
     the model would be implemented in C++, or perhaps via a SQL data source.
+
+    Note that views do not enabel \e clip automatically.  If the view
+    is not clipped by another item or the screen, it will be necessary
+    to set \e {clip: true} in order to have the out of view items clipped
+    nicely.
 */
 QDeclarativeGridView::QDeclarativeGridView(QDeclarativeItem *parent)
     : QDeclarativeFlickable(*(new QDeclarativeGridViewPrivate), parent)
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index eb5315d..09f8162 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -1359,6 +1359,11 @@ void QDeclarativeListViewPrivate::flickY(qreal velocity)
 
     In this case ListModel is a handy way for us to test our UI.  In practice
     the model would be implemented in C++, or perhaps via a SQL data source.
+
+    Note that views do not enabel \e clip automatically.  If the view
+    is not clipped by another item or the screen, it will be necessary
+    to set \e {clip: true} in order to have the out of view items clipped
+    nicely.
 */
 
 QDeclarativeListView::QDeclarativeListView(QDeclarativeItem *parent)
-- 
cgit v0.12


From 08cf6561c4ad2288e385e63d941b60b268cc484e Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Thu, 4 Mar 2010 13:05:17 +1000
Subject: Fix spelling.

---
 src/declarative/graphicsitems/qdeclarativegridview.cpp | 2 +-
 src/declarative/graphicsitems/qdeclarativelistview.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index 7b97dcc..a6f3d8f 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -698,7 +698,7 @@ void QDeclarativeGridViewPrivate::updateCurrent(int modelIndex)
     In this case ListModel is a handy way for us to test our UI.  In practice
     the model would be implemented in C++, or perhaps via a SQL data source.
 
-    Note that views do not enabel \e clip automatically.  If the view
+    Note that views do not enable \e clip automatically.  If the view
     is not clipped by another item or the screen, it will be necessary
     to set \e {clip: true} in order to have the out of view items clipped
     nicely.
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 09f8162..a5da424 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -1360,7 +1360,7 @@ void QDeclarativeListViewPrivate::flickY(qreal velocity)
     In this case ListModel is a handy way for us to test our UI.  In practice
     the model would be implemented in C++, or perhaps via a SQL data source.
 
-    Note that views do not enabel \e clip automatically.  If the view
+    Note that views do not enable \e clip automatically.  If the view
     is not clipped by another item or the screen, it will be necessary
     to set \e {clip: true} in order to have the out of view items clipped
     nicely.
-- 
cgit v0.12


From afbfc2907b417034a98cf17f5787e0dfe467f737 Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Thu, 4 Mar 2010 13:29:37 +1000
Subject: Remove unnecessary additional hash of QDeclarativeGridViewAttached

---
 .../graphicsitems/qdeclarativegridview.cpp            |  9 ++++-----
 .../graphicsitems/qdeclarativegridview_p.h            | 19 +++----------------
 2 files changed, 7 insertions(+), 21 deletions(-)

diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index a6f3d8f..b3c5577 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -52,8 +52,6 @@
 
 QT_BEGIN_NAMESPACE
 
-QHash<QObject*, QDeclarativeGridViewAttached*> QDeclarativeGridViewAttached::attachedProperties;
-
 
 //----------------------------------------------------------------------------
 
@@ -61,8 +59,9 @@ class FxGridItem
 {
 public:
     FxGridItem(QDeclarativeItem *i, QDeclarativeGridView *v) : item(i), view(v) {
-        attached = QDeclarativeGridViewAttached::properties(item);
-        attached->m_view = view;
+        attached = static_cast<QDeclarativeGridViewAttached*>(qmlAttachedPropertiesObject<QDeclarativeGridView>(item));
+        if (attached)
+            attached->m_view = view;
     }
     ~FxGridItem() {}
 
@@ -1748,7 +1747,7 @@ void QDeclarativeGridView::refill()
 
 QDeclarativeGridViewAttached *QDeclarativeGridView::qmlAttachedProperties(QObject *obj)
 {
-    return QDeclarativeGridViewAttached::properties(obj);
+    return new QDeclarativeGridViewAttached(obj);
 }
 
 QT_END_NAMESPACE
diff --git a/src/declarative/graphicsitems/qdeclarativegridview_p.h b/src/declarative/graphicsitems/qdeclarativegridview_p.h
index d463a46..22fcef6 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview_p.h
+++ b/src/declarative/graphicsitems/qdeclarativegridview_p.h
@@ -167,9 +167,7 @@ class QDeclarativeGridViewAttached : public QObject
 public:
     QDeclarativeGridViewAttached(QObject *parent)
         : QObject(parent), m_isCurrent(false), m_delayRemove(false) {}
-    ~QDeclarativeGridViewAttached() {
-        attachedProperties.remove(parent());
-    }
+    ~QDeclarativeGridViewAttached() {}
 
     Q_PROPERTY(QDeclarativeGridView *view READ view CONSTANT)
     QDeclarativeGridView *view() { return m_view; }
@@ -192,15 +190,6 @@ public:
         }
     }
 
-    static QDeclarativeGridViewAttached *properties(QObject *obj) {
-        QDeclarativeGridViewAttached *rv = attachedProperties.value(obj);
-        if (!rv) {
-            rv = new QDeclarativeGridViewAttached(obj);
-            attachedProperties.insert(obj, rv);
-        }
-        return rv;
-    }
-
     void emitAdd() { emit add(); }
     void emitRemove() { emit remove(); }
 
@@ -212,10 +201,8 @@ Q_SIGNALS:
 
 public:
     QDeclarativeGridView *m_view;
-    bool m_isCurrent;
-    bool m_delayRemove;
-
-    static QHash<QObject*, QDeclarativeGridViewAttached*> attachedProperties;
+    bool m_isCurrent : 1;
+    bool m_delayRemove : 1;
 };
 
 
-- 
cgit v0.12


From c425733907910ad04ed3abdefb5108d682858b12 Mon Sep 17 00:00:00 2001
From: Bea Lam <bea.lam@nokia.com>
Date: Thu, 4 Mar 2010 13:31:33 +1000
Subject: Fix tests failing due to javascript eval errors.

---
 .../qdeclarativeworkerscript/data/worker.qml         |  4 ----
 .../tst_qdeclarativeworkerscript.cpp                 | 20 +++++++++++++-------
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/tests/auto/declarative/qdeclarativeworkerscript/data/worker.qml b/tests/auto/declarative/qdeclarativeworkerscript/data/worker.qml
index bb4028f..1fce155 100644
--- a/tests/auto/declarative/qdeclarativeworkerscript/data/worker.qml
+++ b/tests/auto/declarative/qdeclarativeworkerscript/data/worker.qml
@@ -12,10 +12,6 @@ WorkerScript {
         worker.sendMessage(value)
     }
 
-    function testSendLiteral(value) {
-        eval('worker.sendMessage(' + value +')')
-    }
-
     function compareLiteralResponse(expected) {
         var e = eval('(' + expected + ')')
         return worker.response == e
diff --git a/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp b/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp
index 9957b50..27ecef4 100644
--- a/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp
+++ b/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp
@@ -48,9 +48,9 @@
 #include <QtDeclarative/qdeclarativeitem.h>
 
 #include <private/qdeclarativeworkerscript_p.h>
+#include <private/qdeclarativeengine_p.h>
 #include "../../../shared/util.h"
 
-Q_DECLARE_METATYPE(QList<QObject*>)
 Q_DECLARE_METATYPE(QScriptValue)
 
 class tst_QDeclarativeWorkerScript : public QObject
@@ -86,13 +86,14 @@ void tst_QDeclarativeWorkerScript::source()
     QFETCH(QUrl, source);
     QFETCH(bool, valid);
 
-    QDeclarativeComponent component(&m_engine);
-    component.setData("import Qt 4.6\nWorkerScript { source: '" + source.toString().toUtf8() + "'; }", QUrl());
-
     if (!valid) {
         QByteArray w = "WorkerScript: Cannot find source file \"" + source.toString().toUtf8() + "\"";
         QTest::ignoreMessage(QtWarningMsg, w.constData());
     }
+
+    QDeclarativeComponent component(&m_engine);
+    component.setData("import Qt 4.6\nWorkerScript { source: '" + source.toString().toUtf8() + "'; }", QUrl());
+
     QDeclarativeWorkerScript *item = qobject_cast<QDeclarativeWorkerScript*>(component.create());
     QVERIFY(item != 0);
 
@@ -169,9 +170,15 @@ void tst_QDeclarativeWorkerScript::messaging_sendJsObject()
     QDeclarativeWorkerScript *worker = qobject_cast<QDeclarativeWorkerScript*>(component.create());
     QVERIFY(worker != 0);
 
-    QString jsObject = "{'spell power': 3101, 'haste': 1125}";
+    QString jsObject = "{'name': 'zyz', 'spell power': 3101, 'haste': 1125}";
 
-    QVERIFY(QMetaObject::invokeMethod(worker, "testSendLiteral", Q_ARG(QVariant, jsObject)));
+    QScriptEngine *engine = QDeclarativeEnginePrivate::getScriptEngine(qmlEngine(worker));
+    QScriptValue sv = engine->newObject();
+    sv.setProperty("name", "zyz");
+    sv.setProperty("spell power", 3101);
+    sv.setProperty("haste", 1125);
+
+    QVERIFY(QMetaObject::invokeMethod(worker, "testSend", Q_ARG(QVariant, qVariantFromValue(sv))));
     waitForEchoMessage(worker);
 
     QVariant result = qVariantFromValue(false);
@@ -185,4 +192,3 @@ void tst_QDeclarativeWorkerScript::messaging_sendJsObject()
 QTEST_MAIN(tst_QDeclarativeWorkerScript)
 
 #include "tst_qdeclarativeworkerscript.moc"
-
-- 
cgit v0.12


From 8047d8f2e63df60b5ea3f6fd02568658c3d19fc6 Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Thu, 4 Mar 2010 14:39:18 +1000
Subject: Documented view behavior when items are removed from start of view.

Task-number: QTBUG-7694
---
 src/declarative/graphicsitems/qdeclarativegridview.cpp | 12 ++++++++++++
 src/declarative/graphicsitems/qdeclarativelistview.cpp |  6 ++++++
 2 files changed, 18 insertions(+)

diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index b3c5577..463b238 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -1340,6 +1340,18 @@ void QDeclarativeGridView::moveCurrentIndexRight()
     }
 }
 
+/*!
+    \qmlmethod GridView::positionViewAtIndex(int index)
+
+    Positions the view such that the \a index is at the top (or left for horizontal orientation) of the view.
+    If positioning the view at the index would cause empty space to be displayed at
+    the end of the view, the view will be positioned at the end.
+
+    It is not recommended to use contentX or contentY to position the view
+    at a particular index.  This is unreliable since removing items from the start
+    of the list does not cause all other items to be repositioned.
+    The correct way to bring an item into view is with positionViewAtIndex.
+*/
 void QDeclarativeGridView::positionViewAtIndex(int index)
 {
     Q_D(QDeclarativeGridView);
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index a5da424..32627da 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -2286,6 +2286,12 @@ void QDeclarativeListView::decrementCurrentIndex()
     Positions the view such that the \a index is at the top (or left for horizontal orientation) of the view.
     If positioning the view at the index would cause empty space to be displayed at
     the end of the view, the view will be positioned at the end.
+
+    It is not recommended to use contentX or contentY to position the view
+    at a particular index.  This is unreliable since removing items from the start
+    of the list does not cause all other items to be repositioned, and because
+    the actual start of the view can vary based on the size of the delegates.
+    The correct way to bring an item into view is with positionViewAtIndex.
 */
 void QDeclarativeListView::positionViewAtIndex(int index)
 {
-- 
cgit v0.12


From eda079761194a96783cdb8d49c79eb2c9c0b7dac Mon Sep 17 00:00:00 2001
From: Warwick Allison <warwick.allison@nokia.com>
Date: Thu, 4 Mar 2010 14:49:20 +1000
Subject: Compile without QVariant::EasingCurve in Qt 4.6.2.

---
 src/declarative/qml/qdeclarativecompiler.cpp       |  2 +-
 src/declarative/qml/qdeclarativeenginedebug.cpp    |  4 +--
 .../qml/qdeclarativeobjectscriptclass.cpp          |  2 +-
 src/declarative/qml/qdeclarativeproperty.cpp       |  6 ++--
 src/declarative/qml/qdeclarativevaluetype.cpp      | 41 ++++++++++++++++++++++
 src/declarative/qml/qdeclarativevaluetype_p.h      |  9 ++++-
 src/declarative/util/qdeclarativeanimation.cpp     |  8 +++--
 7 files changed, 61 insertions(+), 11 deletions(-)

diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index 1eea012..b07a85a 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -1792,7 +1792,7 @@ bool QDeclarativeCompiler::buildGroupedProperty(QDeclarativeParser::Property *pr
     if (prop->values.count())
         COMPILE_EXCEPTION(prop->values.first(), QCoreApplication::translate("QDeclarativeCompiler", "Invalid value in grouped property"));
 
-    if (prop->type < (int)QVariant::UserType) {
+    if (QDeclarativeValueTypeFactory::isValueType(prop->type)) {
         QDeclarativeEnginePrivate *ep =
             static_cast<QDeclarativeEnginePrivate *>(QObjectPrivate::get(engine));
         if (prop->type >= 0 /* QVariant == -1 */ && ep->valueTypes[prop->type]) {
diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp
index 09882cb..3e4acbe 100644
--- a/src/declarative/qml/qdeclarativeenginedebug.cpp
+++ b/src/declarative/qml/qdeclarativeenginedebug.cpp
@@ -117,7 +117,7 @@ QDeclarativeEngineDebugServer::propertyData(QObject *obj, int propIdx)
     QVariant value = prop.read(obj);
     rv.value = valueContents(value);
 
-    if (QVariant::Type(prop.userType()) < QVariant::UserType) {
+    if (QDeclarativeValueTypeFactory::isValueType(prop.userType())) {
         rv.type = QDeclarativeObjectProperty::Basic;
     } else if (QDeclarativeMetaType::isQObject(prop.userType()))  {
         rv.type = QDeclarativeObjectProperty::Object;
@@ -131,7 +131,7 @@ QDeclarativeEngineDebugServer::propertyData(QObject *obj, int propIdx)
 QVariant QDeclarativeEngineDebugServer::valueContents(const QVariant &value) const
 {
     int userType = value.userType();
-    if (QVariant::Type(userType) < QVariant::UserType)
+    if (QDeclarativeValueTypeFactory::isValueType(userType))
         return value;
 
     /*
diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
index 542f417..2e4ffa7 100644
--- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
+++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
@@ -232,7 +232,7 @@ QDeclarativeObjectScriptClass::property(QObject *obj, const Identifier &name)
                 QDeclarativeEnginePrivate::CapturedProperty(obj, lastData->coreIndex, lastData->notifyIndex);
         }
 
-        if ((uint)lastData->propType < QVariant::UserType) {
+        if (QDeclarativeValueTypeFactory::isValueType((uint)lastData->propType)) {
             QDeclarativeValueType *valueType = enginePriv->valueTypes[lastData->propType];
             if (valueType)
                 return Value(scriptEngine, enginePriv->valueTypeClass->newObject(obj, lastData->coreIndex, valueType));
diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp
index 521c241..4f73b89 100644
--- a/src/declarative/qml/qdeclarativeproperty.cpp
+++ b/src/declarative/qml/qdeclarativeproperty.cpp
@@ -238,10 +238,10 @@ void QDeclarativePropertyPrivate::initProperty(QObject *obj, const QString &name
             if (property->flags & QDeclarativePropertyCache::Data::IsFunction) 
                 return; // Not an object property 
 
-            if (ii == (path.count() - 2) && property->propType < (int)QVariant::UserType) {
+            if (ii == (path.count() - 2) && QDeclarativeValueTypeFactory::isValueType(property->propType)) {
                 // We're now at a value type property.  We can use a global valuetypes array as we 
                 // never actually use the objects, just look up their properties.
-                QObject *typeObject = qmlValueTypes()->valueTypes[property->propType];
+                QObject *typeObject = (*qmlValueTypes())[property->propType];
                 if (!typeObject) return; // Not a value type
 
                 int idx = typeObject->metaObject()->indexOfProperty(path.last().toUtf8().constData());
@@ -346,7 +346,7 @@ QDeclarativePropertyPrivate::propertyTypeCategory() const
         int type = propertyType();
         if (type == QVariant::Invalid)
             return QDeclarativeProperty::InvalidCategory;
-        else if ((uint)type < QVariant::UserType)
+        else if (QDeclarativeValueTypeFactory::isValueType((uint)type))
             return QDeclarativeProperty::Normal;
         else if (core.flags & QDeclarativePropertyCache::Data::IsQObjectDerived)
             return QDeclarativeProperty::Object;
diff --git a/src/declarative/qml/qdeclarativevaluetype.cpp b/src/declarative/qml/qdeclarativevaluetype.cpp
index 01fa214..34d3795 100644
--- a/src/declarative/qml/qdeclarativevaluetype.cpp
+++ b/src/declarative/qml/qdeclarativevaluetype.cpp
@@ -45,19 +45,50 @@
 
 QT_BEGIN_NAMESPACE
 
+#if (QT_VERSION < QT_VERSION_CHECK(4,7,0))
+Q_DECLARE_METATYPE(QEasingCurve);
+#endif
+
 QDeclarativeValueTypeFactory::QDeclarativeValueTypeFactory()
 {
     // ### Optimize
     for (unsigned int ii = 0; ii < (QVariant::UserType - 1); ++ii)
         valueTypes[ii] = valueType(ii);
+#if (QT_VERSION < QT_VERSION_CHECK(4,7,0))
+    easingType = qMetaTypeId<QEasingCurve>();
+    easingValueType = valueType(easingType);
+#endif
 }
 
 QDeclarativeValueTypeFactory::~QDeclarativeValueTypeFactory()
 {
     for (unsigned int ii = 0; ii < (QVariant::UserType - 1); ++ii)
         delete valueTypes[ii];
+#if (QT_VERSION < QT_VERSION_CHECK(4,7,0))
+    delete easingValueType;
+#endif
+}
+
+bool QDeclarativeValueTypeFactory::isValueType(int idx)
+{
+    if ((uint)idx < QVariant::UserType)
+        return true;
+#if (QT_VERSION < QT_VERSION_CHECK(4,7,0))
+    if (idx == qMetaTypeId<QEasingCurve>())
+        return true;
+#endif
+    return false;
 }
 
+QDeclarativeValueType *QDeclarativeValueTypeFactory::operator[](int idx) const
+{
+#if (QT_VERSION < QT_VERSION_CHECK(4,7,0))
+    if (idx == easingType) return easingValueType;
+#endif
+    return valueTypes[idx];
+}
+
+
 QDeclarativeValueType *QDeclarativeValueTypeFactory::valueType(int t)
 {
     switch (t) {
@@ -75,11 +106,17 @@ QDeclarativeValueType *QDeclarativeValueTypeFactory::valueType(int t)
         return new QDeclarativeRectFValueType;
     case QVariant::Vector3D:
         return new QDeclarativeVector3DValueType;
+#if (QT_VERSION >= QT_VERSION_CHECK(4,7,0))
     case QVariant::EasingCurve:
         return new QDeclarativeEasingValueType;
+#endif
     case QVariant::Font:
         return new QDeclarativeFontValueType;
     default:
+#if (QT_VERSION < QT_VERSION_CHECK(4,7,0))
+        if (t == qMetaTypeId<QEasingCurve>())
+            return new QDeclarativeEasingValueType;
+#endif
         return 0;
     }
 }
@@ -495,7 +532,11 @@ void QDeclarativeEasingValueType::write(QObject *obj, int idx, QDeclarativePrope
 
 QVariant QDeclarativeEasingValueType::value()
 {
+#if (QT_VERSION >= QT_VERSION_CHECK(4,7,0))
     return QVariant(easing);
+#else
+    return QVariant::fromValue<QEasingCurve>(easing);
+#endif
 }
 
 void QDeclarativeEasingValueType::setValue(QVariant value)
diff --git a/src/declarative/qml/qdeclarativevaluetype_p.h b/src/declarative/qml/qdeclarativevaluetype_p.h
index cb153be..e69f161 100644
--- a/src/declarative/qml/qdeclarativevaluetype_p.h
+++ b/src/declarative/qml/qdeclarativevaluetype_p.h
@@ -81,10 +81,17 @@ class Q_DECLARATIVE_EXPORT QDeclarativeValueTypeFactory
 public:
     QDeclarativeValueTypeFactory();
     ~QDeclarativeValueTypeFactory();
+    static bool isValueType(int);
     static QDeclarativeValueType *valueType(int);
 
+    QDeclarativeValueType *operator[](int idx) const;
+
+private:
     QDeclarativeValueType *valueTypes[QVariant::UserType - 1]; 
-    QDeclarativeValueType *operator[](int idx) const { return valueTypes[idx]; }
+#if (QT_VERSION < QT_VERSION_CHECK(4,7,0))
+    int easingType;
+    QDeclarativeValueType *easingValueType;
+#endif
 };
 
 class Q_AUTOTEST_EXPORT QDeclarativePointFValueType : public QDeclarativeValueType
diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp
index b14de19..f33d7c7 100644
--- a/src/declarative/util/qdeclarativeanimation.cpp
+++ b/src/declarative/util/qdeclarativeanimation.cpp
@@ -52,6 +52,7 @@
 #include <qdeclarativestringconverters_p.h>
 #include <qdeclarativeglobal_p.h>
 #include <qdeclarativemetatype_p.h>
+#include <qdeclarativevaluetype_p.h>
 #include <qdeclarativeproperty_p.h>
 
 #include <qvariant.h>
@@ -1710,12 +1711,13 @@ void QDeclarativePropertyAnimationPrivate::convertVariant(QVariant &variant, int
         break;
     }
     default:
-        if ((uint)type >= QVariant::UserType) {
+        if (QDeclarativeValueTypeFactory::isValueType((uint)type)) {
+            variant.convert((QVariant::Type)type);
+        } else {
             QDeclarativeMetaType::StringConverter converter = QDeclarativeMetaType::customStringConverter(type);
             if (converter)
                 variant = converter(variant.toString());
-        } else
-            variant.convert((QVariant::Type)type);
+        }
         break;
     }
 }
-- 
cgit v0.12


From c24280aef0962c4a45f9fa6c927b2df3a5f34245 Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Thu, 4 Mar 2010 14:57:43 +1000
Subject: Added QMediaPlayer::StreamPlayback flag to query/select backend
 capable of playing from QIODevice based stream.

---
 src/multimedia/base/qmediaserviceprovider.cpp      | 43 ++++++++++---
 src/multimedia/base/qmediaserviceprovider.h        |  3 +-
 src/multimedia/playback/qmediaplayer.cpp           | 18 +++++-
 src/multimedia/playback/qmediaplayer.h             |  3 +-
 .../tst_qmediaserviceprovider.cpp                  | 72 ++++++++++++++++++++++
 5 files changed, 125 insertions(+), 14 deletions(-)

diff --git a/src/multimedia/base/qmediaserviceprovider.cpp b/src/multimedia/base/qmediaserviceprovider.cpp
index d51d682..6e11079 100644
--- a/src/multimedia/base/qmediaserviceprovider.cpp
+++ b/src/multimedia/base/qmediaserviceprovider.cpp
@@ -102,6 +102,9 @@ public:
 
     \value RecordingSupport
             The service provides audio or video recording functions.
+
+    \value StreamPlayback
+            The service is capable of playing QIODevice based streams.
 */
 
 /*!
@@ -396,14 +399,25 @@ public:
             QMediaServiceSupportedFormatsInterface *iface =
                     qobject_cast<QMediaServiceSupportedFormatsInterface*>(obj);
 
-            //if low latency playback was asked, skip services known
-            //not to provide low latency playback
-            if (flags & QMediaPlayer::LowLatency) {
+
+            if (flags) {
                 QMediaServiceFeaturesInterface *iface =
                         qobject_cast<QMediaServiceFeaturesInterface*>(obj);
 
-                if (iface && !(iface->supportedFeatures(serviceType) & QMediaServiceProviderHint::LowLatencyPlayback))
-                    continue;
+                if (iface) {
+                    QMediaServiceProviderHint::Features features = iface->supportedFeatures(serviceType);
+
+                    //if low latency playback was asked, skip services known
+                    //not to provide low latency playback
+                    if ((flags & QMediaPlayer::LowLatency) &&
+                        !(features & QMediaServiceProviderHint::LowLatencyPlayback))
+                            continue;
+
+                    //the same for QIODevice based streams support
+                    if ((flags & QMediaPlayer::StreamPlayback) &&
+                        !(features & QMediaServiceProviderHint::StreamPlayback))
+                            continue;
+                }
             }
 
             if (iface)
@@ -434,14 +448,25 @@ public:
             QMediaServiceSupportedFormatsInterface *iface =
                     qobject_cast<QMediaServiceSupportedFormatsInterface*>(obj);
 
-            // If low latency playback was asked for, skip MIME types from services known
-            // not to provide low latency playback
+
             if (flags & QMediaPlayer::LowLatency) {
                 QMediaServiceFeaturesInterface *iface =
                         qobject_cast<QMediaServiceFeaturesInterface*>(obj);
 
-                if (iface && !(iface->supportedFeatures(serviceType) & QMediaServiceProviderHint::LowLatencyPlayback))
-                    continue;
+                if (iface) {
+                    QMediaServiceProviderHint::Features features = iface->supportedFeatures(serviceType);
+
+                    // If low latency playback was asked for, skip MIME types from services known
+                    // not to provide low latency playback
+                    if ((flags & QMediaPlayer::LowLatency) &&
+                        !(features & QMediaServiceProviderHint::LowLatencyPlayback))
+                        continue;
+
+                    //the same for QIODevice based streams support
+                    if ((flags & QMediaPlayer::StreamPlayback) &&
+                        !(features & QMediaServiceProviderHint::StreamPlayback))
+                            continue;
+                }
             }
 
             if (iface) {
diff --git a/src/multimedia/base/qmediaserviceprovider.h b/src/multimedia/base/qmediaserviceprovider.h
index 2ee0ae4..6e31493 100644
--- a/src/multimedia/base/qmediaserviceprovider.h
+++ b/src/multimedia/base/qmediaserviceprovider.h
@@ -64,7 +64,8 @@ public:
 
     enum Feature {
         LowLatencyPlayback = 0x01,
-        RecordingSupport = 0x02
+        RecordingSupport = 0x02,
+        StreamPlayback = 0x04
     };
     Q_DECLARE_FLAGS(Features, Feature)
 
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
index 27bff02..8056878 100644
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ b/src/multimedia/playback/qmediaplayer.cpp
@@ -243,10 +243,17 @@ void QMediaPlayerPrivate::_q_playlistDestroyed()
 
 static QMediaService *playerService(QMediaPlayer::Flags flags, QMediaServiceProvider *provider)
 {
-    if (flags && QMediaPlayer::LowLatency)
+    if (flags) {
+        QMediaServiceProviderHint::Features features = 0;
+        if (flags & QMediaPlayer::LowLatency)
+            features |= QMediaServiceProviderHint::LowLatencyPlayback;
+
+        if (flags & QMediaPlayer::StreamPlayback)
+            features |= QMediaServiceProviderHint::StreamPlayback;
+
         return provider->requestService(Q_MEDIASERVICE_MEDIAPLAYER,
-                                        QMediaServiceProviderHint(QMediaServiceProviderHint::LowLatencyPlayback));
-    else
+                                        QMediaServiceProviderHint(features));
+    } else
         return provider->requestService(Q_MEDIASERVICE_MEDIAPLAYER);
 }
 
@@ -945,6 +952,11 @@ QStringList QMediaPlayer::supportedMimeTypes(Flags flags)
             The player is expected to be used with simple audio formats,
             but playback should start without significant delay.
             Such playback service can be used for beeps, ringtones, etc.
+
+    \value StreamPlayback
+            The player is expected to play QIODevice based streams.
+            If passed to QMediaPlayer constructor, the service supporting
+            streams playback will be choosen.
 */
 
 QT_END_NAMESPACE
diff --git a/src/multimedia/playback/qmediaplayer.h b/src/multimedia/playback/qmediaplayer.h
index 1b761ce..129b244 100644
--- a/src/multimedia/playback/qmediaplayer.h
+++ b/src/multimedia/playback/qmediaplayer.h
@@ -99,7 +99,8 @@ public:
 
     enum Flag
     {
-        LowLatency = 0x01
+        LowLatency = 0x01,
+        StreamPlayback = 0x02
     };
     Q_DECLARE_FLAGS(Flags, Flag)
 
diff --git a/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp b/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp
index 9bca189..d839fe5 100644
--- a/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp
+++ b/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp
@@ -213,6 +213,57 @@ public:
     }
 };
 
+class MockServicePlugin4 : public QMediaServiceProviderPlugin,
+                            public QMediaServiceSupportedFormatsInterface,
+                            public QMediaServiceFeaturesInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(QMediaServiceSupportedFormatsInterface)
+    Q_INTERFACES(QMediaServiceFeaturesInterface)
+public:
+    QStringList keys() const
+    {
+        return QStringList() << QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER);
+    }
+
+    QMediaService* create(QString const& key)
+    {
+        if (keys().contains(key))
+            return new MockMediaService("MockServicePlugin4");
+        else
+            return 0;
+    }
+
+    void release(QMediaService *service)
+    {
+        delete service;
+    }
+
+    QtMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const
+    {
+        if (codecs.contains(QLatin1String("jpeg2000")))
+            return QtMultimedia::NotSupported;
+
+        if (supportedMimeTypes().contains(mimeType))
+            return QtMultimedia::ProbablySupported;
+
+        return QtMultimedia::MaybeSupported;
+    }
+
+    QStringList supportedMimeTypes() const
+    {
+        return QStringList() << "video/mp4" << "video/quicktime";
+    }
+
+    QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const
+    {
+        if (service == QByteArray(Q_MEDIASERVICE_MEDIAPLAYER))
+            return QMediaServiceProviderHint::StreamPlayback;
+        else
+            return 0;
+    }
+};
+
 
 
 class MockMediaServiceProvider : public QMediaServiceProvider
@@ -253,6 +304,7 @@ void tst_QMediaServiceProvider::initTestCase()
     plugins << new MockServicePlugin1;
     plugins << new MockServicePlugin2;
     plugins << new MockServicePlugin3;
+    plugins << new MockServicePlugin4;
 
     QMediaPluginLoader::setStaticPlugins(QLatin1String("/mediaservices"), plugins);
 }
@@ -312,12 +364,32 @@ void tst_QMediaServiceProvider::testHasSupport()
     QCOMPARE(QMediaPlayer::hasSupport("audio/ogg"), QtMultimedia::ProbablySupported);
     QCOMPARE(QMediaPlayer::hasSupport("audio/wav"), QtMultimedia::ProbablySupported);
 
+    //test low latency flag support
+    QCOMPARE(QMediaPlayer::hasSupport("audio/wav", QStringList(), QMediaPlayer::LowLatency),
+             QtMultimedia::ProbablySupported);
+    //plugin1 probably supports audio/ogg, it checked because it doesn't provide features iface
+    QCOMPARE(QMediaPlayer::hasSupport("audio/ogg", QStringList(), QMediaPlayer::LowLatency),
+             QtMultimedia::ProbablySupported);
+    //Plugin4 is not checked here, sine it's known not support low latency
+    QCOMPARE(QMediaPlayer::hasSupport("video/quicktime", QStringList(), QMediaPlayer::LowLatency),
+             QtMultimedia::MaybeSupported);
+
+    //test streaming flag support
+    QCOMPARE(QMediaPlayer::hasSupport("video/quicktime", QStringList(), QMediaPlayer::StreamPlayback),
+             QtMultimedia::ProbablySupported);
+    //Plugin2 is not checked here, sine it's known not support streaming
+    QCOMPARE(QMediaPlayer::hasSupport("audio/wav", QStringList(), QMediaPlayer::StreamPlayback),
+             QtMultimedia::MaybeSupported);
+
     //ensure the correct media player plugin is choosen for mime type
     QMediaPlayer simplePlayer(0, QMediaPlayer::LowLatency);
     QCOMPARE(simplePlayer.service()->objectName(), QLatin1String("MockServicePlugin2"));
 
     QMediaPlayer mediaPlayer;
     QVERIFY(mediaPlayer.service()->objectName() != QLatin1String("MockServicePlugin2"));
+
+    QMediaPlayer streamPlayer(0, QMediaPlayer::StreamPlayback);
+    QCOMPARE(streamPlayer.service()->objectName(), QLatin1String("MockServicePlugin4"));
 }
 
 void tst_QMediaServiceProvider::testSupportedMimeTypes()
-- 
cgit v0.12


From e86dc3cbc40824353688db52d9933af26a30aaa0 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Thu, 4 Mar 2010 15:19:09 +1000
Subject: QDeclarativeContext::contextProperty() should also access ids

QT-2800
---
 src/declarative/qml/qdeclarativecontext.cpp          |  5 ++++-
 .../qdeclarativecontext/tst_qdeclarativecontext.cpp  | 20 ++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/declarative/qml/qdeclarativecontext.cpp b/src/declarative/qml/qdeclarativecontext.cpp
index 35e7a77..f70e143 100644
--- a/src/declarative/qml/qdeclarativecontext.cpp
+++ b/src/declarative/qml/qdeclarativecontext.cpp
@@ -484,7 +484,10 @@ QVariant QDeclarativeContext::contextProperty(const QString &name) const
         if (!value.isValid() && parentContext())
             value = parentContext()->contextProperty(name);
     } else {
-        value = d->propertyValues[idx];
+        if (idx >= d->propertyValues.count())
+            value = QVariant::fromValue(d->idValues[idx - d->propertyValues.count()].data());
+        else
+            value = d->propertyValues[idx];
     }
 
     return value;
diff --git a/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp b/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp
index 5f03989..f0117f5 100644
--- a/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp
+++ b/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp
@@ -60,6 +60,7 @@ private slots:
     void setContextProperty();
     void addDefaultObject();
     void destruction();
+    void idAsContextProperty();
 
 private:
     QDeclarativeEngine engine;
@@ -429,6 +430,25 @@ void tst_qdeclarativecontext::destruction()
     QCOMPARE(ctxt, expr.context());
 }
 
+void tst_qdeclarativecontext::idAsContextProperty()
+{
+    QDeclarativeComponent component(&engine);
+    component.setData("import Qt 4.6; QtObject { property var a; a: QtObject { id: myObject } }", QUrl());
+
+    QObject *obj = component.create();
+    QVERIFY(obj);
+
+    QVariant a = obj->property("a");
+    QVERIFY(a.userType() == QMetaType::QObjectStar);
+
+    QVariant ctxt = qmlContext(obj)->contextProperty("myObject");
+    QVERIFY(ctxt.userType() == QMetaType::QObjectStar);
+
+    QVERIFY(a == ctxt);
+
+    delete obj;
+}
+
 QTEST_MAIN(tst_qdeclarativecontext)
 
 #include "tst_qdeclarativecontext.moc"
-- 
cgit v0.12


From 0559b8d2af9f1f9277ff3bedd9a33cca7e255abb Mon Sep 17 00:00:00 2001
From: Michael Brasser <michael.brasser@nokia.com>
Date: Thu, 4 Mar 2010 13:54:23 +1000
Subject: Signal handler requires exactly one value.

Don't crash on invalid "PropertyAnimation on onClicked"
---
 src/declarative/qml/qdeclarativecompiler.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index b07a85a..7a3dde9 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -1342,7 +1342,7 @@ bool QDeclarativeCompiler::buildSignal(QDeclarativeParser::Property *prop, QDecl
 
     }  else {
 
-        if (prop->value || prop->values.count() > 1)
+        if (prop->value || prop->values.count() != 1)
             COMPILE_EXCEPTION(prop, QCoreApplication::translate("QDeclarativeCompiler","Incorrectly specified signal"));
 
         prop->index = sigIdx;
-- 
cgit v0.12


From 78254634c87f8e1b9c79841d87c530d3af8c9734 Mon Sep 17 00:00:00 2001
From: Michael Brasser <michael.brasser@nokia.com>
Date: Thu, 4 Mar 2010 14:57:40 +1000
Subject: Add formatting functions to QML's global Qt object.

The plan is for these to replace DateTimeFormatter.
---
 doc/src/declarative/globalobject.qdoc              | 76 ++++++++++++++++++++++
 src/declarative/qml/qdeclarativeengine.cpp         | 65 ++++++++++++++++++
 src/declarative/qml/qdeclarativeengine_p.h         |  4 ++
 .../declarative/qdeclarativeqt/data/formatting.qml | 19 ++++++
 .../qdeclarativeqt/tst_qdeclarativeqt.cpp          | 29 +++++++++
 5 files changed, 193 insertions(+)
 create mode 100644 tests/auto/declarative/qdeclarativeqt/data/formatting.qml

diff --git a/doc/src/declarative/globalobject.qdoc b/doc/src/declarative/globalobject.qdoc
index c718a6d..a8a07d2 100644
--- a/doc/src/declarative/globalobject.qdoc
+++ b/doc/src/declarative/globalobject.qdoc
@@ -87,6 +87,82 @@ This function returns a Point with the specified \c x and \c y coordinates.
 This function returns as Size with the specified \c width and \c height.
 \section3 Qt.vector3d(real x, real y, real z)
 This function returns a Vector3D with the specified \c x, \c y and \c z.
+
+\section2 Formatters
+The Qt object contains several functions for formatting dates and times.
+
+\section3 Qt.formatDate(datetime date, variant format)
+This function returns the string representation of \c date, formatted according to \c format.
+\section3 Qt.formatTime(datetime time, variant format)
+This function returns the string representation of \c time, formatted according to \c format.
+\section3 Qt.formatDateTime(datetime dateTime, variant format)
+This function returns the string representation of \c dateTime, formatted according to \c format.
+
+\c format for the above formatting functions can be specified as follows.
+
+    These expressions may be used for the date:
+
+    \table
+    \header \i Expression \i Output
+    \row \i d \i the day as number without a leading zero (1 to 31)
+    \row \i dd \i the day as number with a leading zero (01 to 31)
+    \row \i ddd
+            \i the abbreviated localized day name (e.g. 'Mon' to 'Sun').
+            Uses QDate::shortDayName().
+    \row \i dddd
+            \i the long localized day name (e.g. 'Monday' to 'Qt::Sunday').
+            Uses QDate::longDayName().
+    \row \i M \i the month as number without a leading zero (1-12)
+    \row \i MM \i the month as number with a leading zero (01-12)
+    \row \i MMM
+            \i the abbreviated localized month name (e.g. 'Jan' to 'Dec').
+            Uses QDate::shortMonthName().
+    \row \i MMMM
+            \i the long localized month name (e.g. 'January' to 'December').
+            Uses QDate::longMonthName().
+    \row \i yy \i the year as two digit number (00-99)
+    \row \i yyyy \i the year as four digit number
+    \endtable
+
+    These expressions may be used for the time:
+
+    \table
+    \header \i Expression \i Output
+    \row \i h
+         \i the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)
+    \row \i hh
+         \i the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)
+    \row \i m \i the minute without a leading zero (0 to 59)
+    \row \i mm \i the minute with a leading zero (00 to 59)
+    \row \i s \i the second without a leading zero (0 to 59)
+    \row \i ss \i the second with a leading zero (00 to 59)
+    \row \i z \i the milliseconds without leading zeroes (0 to 999)
+    \row \i zzz \i the milliseconds with leading zeroes (000 to 999)
+    \row \i AP
+            \i use AM/PM display. \e AP will be replaced by either "AM" or "PM".
+    \row \i ap
+            \i use am/pm display. \e ap will be replaced by either "am" or "pm".
+    \endtable
+
+    All other input characters will be ignored. Any sequence of characters that
+    are enclosed in singlequotes will be treated as text and not be used as an
+    expression. Two consecutive singlequotes ("''") are replaced by a singlequote
+    in the output.
+
+    Example format strings (assumed that the date and time is 21 May 2001
+    14:13:09):
+
+    \table
+    \header \i Format       \i Result
+    \row \i dd.MM.yyyy      \i 21.05.2001
+    \row \i ddd MMMM d yy   \i Tue May 21 01
+    \row \i hh:mm:ss.zzz    \i 14:13:09.042
+    \row \i h:m:s ap        \i 2:13:9 pm
+    \endtable
+
+If no format is specified the locale's short format is used. Alternatively, you can specify
+\c Qt.DefaultLocaleLongDate to get the locale's long format.
+
 \section2 Functions
 The Qt object also contains the following miscellaneous functions which expose Qt functionality for use in QML.
 
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index bd67b0b..20bbf86 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -236,6 +236,11 @@ QDeclarativeScriptEngine::QDeclarativeScriptEngine(QDeclarativeEnginePrivate *pr
         qtObject.setProperty(QLatin1String("tint"), newFunction(QDeclarativeEnginePrivate::tint, 2));
     }
 
+    //date/time formatting
+    qtObject.setProperty(QLatin1String("formatDate"),newFunction(QDeclarativeEnginePrivate::formatDate, 2));
+    qtObject.setProperty(QLatin1String("formatTime"),newFunction(QDeclarativeEnginePrivate::formatTime, 2));
+    qtObject.setProperty(QLatin1String("formatDateTime"),newFunction(QDeclarativeEnginePrivate::formatDateTime, 2));
+
     //misc methods
     qtObject.setProperty(QLatin1String("closestAngle"), newFunction(QDeclarativeEnginePrivate::closestAngle, 2));
     qtObject.setProperty(QLatin1String("playSound"), newFunction(QDeclarativeEnginePrivate::playSound, 1));
@@ -936,6 +941,66 @@ QScriptValue QDeclarativeEnginePrivate::vector(QScriptContext *ctxt, QScriptEngi
     return engine->newVariant(qVariantFromValue(QVector3D(x, y, z)));
 }
 
+QScriptValue QDeclarativeEnginePrivate::formatDate(QScriptContext*ctxt, QScriptEngine*engine)
+{
+    int argCount = ctxt->argumentCount();
+    if(argCount == 0 || argCount > 2)
+        return engine->nullValue();
+
+    QDate date = ctxt->argument(0).toDateTime().date();
+    Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate;
+    if (argCount == 2) {
+        if (ctxt->argument(1).isString()) {
+            QString format = ctxt->argument(1).toString();
+            return engine->newVariant(qVariantFromValue(date.toString(format)));
+        } else if (ctxt->argument(1).isNumber()) {
+            enumFormat = Qt::DateFormat(ctxt->argument(1).toInteger());
+        } else
+           return engine->nullValue();
+    }
+    return engine->newVariant(qVariantFromValue(date.toString(enumFormat)));
+}
+
+QScriptValue QDeclarativeEnginePrivate::formatTime(QScriptContext*ctxt, QScriptEngine*engine)
+{
+    int argCount = ctxt->argumentCount();
+    if(argCount == 0 || argCount > 2)
+        return engine->nullValue();
+
+    QTime date = ctxt->argument(0).toDateTime().time();
+    Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate;
+    if (argCount == 2) {
+        if (ctxt->argument(1).isString()) {
+            QString format = ctxt->argument(1).toString();
+            return engine->newVariant(qVariantFromValue(date.toString(format)));
+        } else if (ctxt->argument(1).isNumber()) {
+            enumFormat = Qt::DateFormat(ctxt->argument(1).toInteger());
+        } else
+           return engine->nullValue();
+    }
+    return engine->newVariant(qVariantFromValue(date.toString(enumFormat)));
+}
+
+QScriptValue QDeclarativeEnginePrivate::formatDateTime(QScriptContext*ctxt, QScriptEngine*engine)
+{
+    int argCount = ctxt->argumentCount();
+    if(argCount == 0 || argCount > 2)
+        return engine->nullValue();
+
+    QDateTime date = ctxt->argument(0).toDateTime();
+    Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate;
+    if (argCount == 2) {
+        if (ctxt->argument(1).isString()) {
+            QString format = ctxt->argument(1).toString();
+            return engine->newVariant(qVariantFromValue(date.toString(format)));
+        } else if (ctxt->argument(1).isNumber()) {
+            enumFormat = Qt::DateFormat(ctxt->argument(1).toInteger());
+        } else
+           return engine->nullValue();
+    }
+    return engine->newVariant(qVariantFromValue(date.toString(enumFormat)));
+}
+
 QScriptValue QDeclarativeEnginePrivate::rgba(QScriptContext *ctxt, QScriptEngine *engine)
 {
     int argCount = ctxt->argumentCount();
diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h
index d3eb583..a9ba73a 100644
--- a/src/declarative/qml/qdeclarativeengine_p.h
+++ b/src/declarative/qml/qdeclarativeengine_p.h
@@ -327,6 +327,10 @@ public:
     static QScriptValue consoleLog(QScriptContext*, QScriptEngine*);
     static QScriptValue quit(QScriptContext*, QScriptEngine*);
 
+    static QScriptValue formatDate(QScriptContext*, QScriptEngine*);
+    static QScriptValue formatTime(QScriptContext*, QScriptEngine*);
+    static QScriptValue formatDateTime(QScriptContext*, QScriptEngine*);
+
     static QScriptEngine *getScriptEngine(QDeclarativeEngine *e) { return &e->d_func()->scriptEngine; }
     static QDeclarativeEngine *getEngine(QScriptEngine *e) { return static_cast<QDeclarativeScriptEngine*>(e)->p->q_func(); }
     static QDeclarativeEnginePrivate *get(QDeclarativeEngine *e) { return e->d_func(); }
diff --git a/tests/auto/declarative/qdeclarativeqt/data/formatting.qml b/tests/auto/declarative/qdeclarativeqt/data/formatting.qml
new file mode 100644
index 0000000..e62749a
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeqt/data/formatting.qml
@@ -0,0 +1,19 @@
+import Qt 4.6
+
+QtObject {
+    property date date1: "2008-12-24"
+    property string test1: Qt.formatDate(date1)
+    property string test2: Qt.formatDate(date1, Qt.DefaultLocaleLongDate)
+    property string test3: Qt.formatDate(date1, "ddd MMMM d yy")
+
+    property var time1: new Date(0,0,0,14,15,38,200)
+    property string test4: Qt.formatTime(time1)
+    property string test5: Qt.formatTime(time1, Qt.DefaultLocaleLongDate)
+    property string test6: Qt.formatTime(time1, "H:m:s a")
+    property string test7: Qt.formatTime(time1, "hh:mm:ss.zzz")
+
+    property var dateTime1: new Date(1978,2,4,9,13,54)
+    property string test8: Qt.formatDateTime(dateTime1)
+    property string test9: Qt.formatDateTime(dateTime1, Qt.DefaultLocaleLongDate)
+    property string test10: Qt.formatDateTime(dateTime1, "M/d/yy H:m:s a")
+}
diff --git a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
index 9ec6872..484cbd4 100644
--- a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
+++ b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
@@ -73,6 +73,7 @@ private slots:
     void createComponent();
     void createQmlObject();
     void consoleLog();
+    void formatting();
 
 private:
     QDeclarativeEngine engine;
@@ -364,6 +365,34 @@ void tst_qdeclarativeqt::consoleLog()
     delete object;
 }
 
+void tst_qdeclarativeqt::formatting()
+{
+    QDeclarativeComponent component(&engine, TEST_FILE("formatting.qml"));
+    QObject *object = component.create();
+    QVERIFY(object != 0);
+
+    QDate date1(2008,12,24);
+    QCOMPARE(object->property("date1").toDate(), date1);
+    QCOMPARE(object->property("test1").toString(), date1.toString(Qt::DefaultLocaleShortDate));
+    QCOMPARE(object->property("test2").toString(), date1.toString(Qt::DefaultLocaleLongDate));
+    QCOMPARE(object->property("test3").toString(), date1.toString("ddd MMMM d yy"));
+
+    QTime time1(14,15,38,200);
+    QCOMPARE(object->property("time1").toTime(), time1);
+    QCOMPARE(object->property("test4").toString(), time1.toString(Qt::DefaultLocaleShortDate));
+    QCOMPARE(object->property("test5").toString(), time1.toString(Qt::DefaultLocaleLongDate));
+    QCOMPARE(object->property("test6").toString(), time1.toString("H:m:s a"));
+    QCOMPARE(object->property("test7").toString(), time1.toString("hh:mm:ss.zzz"));
+
+    QDateTime dateTime1(QDate(1978,03,04),QTime(9,13,54));
+    QCOMPARE(object->property("dateTime1").toDateTime(),dateTime1);
+    QCOMPARE(object->property("test8").toString(), dateTime1.toString(Qt::DefaultLocaleShortDate));
+    QCOMPARE(object->property("test9").toString(), dateTime1.toString(Qt::DefaultLocaleLongDate));
+    QCOMPARE(object->property("test10").toString(), dateTime1.toString("M/d/yy H:m:s a"));
+
+    delete object;
+}
+
 QTEST_MAIN(tst_qdeclarativeqt)
 
 #include "tst_qdeclarativeqt.moc"
-- 
cgit v0.12


From ce5b682b481e2da6fe12e2c57c4780edbfb2fb54 Mon Sep 17 00:00:00 2001
From: Michael Brasser <michael.brasser@nokia.com>
Date: Thu, 4 Mar 2010 15:19:45 +1000
Subject: Remove Qt.playSound()

Use SoundEffect instead.
---
 doc/src/declarative/globalobject.qdoc              |  3 ---
 examples/declarative/tvtennis/tvtennis.qml         | 12 +++++++----
 src/declarative/QmlChanges.txt                     |  1 +
 src/declarative/qml/qdeclarativeengine.cpp         | 25 ----------------------
 src/declarative/qml/qdeclarativeengine_p.h         |  1 -
 .../qdeclarativeqt/tst_qdeclarativeqt.cpp          |  7 ------
 6 files changed, 9 insertions(+), 40 deletions(-)

diff --git a/doc/src/declarative/globalobject.qdoc b/doc/src/declarative/globalobject.qdoc
index a8a07d2..4b1c7d3 100644
--- a/doc/src/declarative/globalobject.qdoc
+++ b/doc/src/declarative/globalobject.qdoc
@@ -195,9 +195,6 @@ while the following would rotate myItem clockwise from 350 degrees to 370 degree
 NumberAnimation { target: myItem; property: "rotation"; from: 350; to: Qt.closetAngle(350, 10) }
 \endqml
 
-\section3 Qt.playSound(url soundLocation)
-This function plays the audio file located at \c soundLocation. Only .wav files are supported.
-
 \section3 Qt.openUrlExternally(url target)
 This function attempts to open the specified \c target url in an external application, based on the user's desktop preferences. It will return true if it succeeds, and false otherwise.
 
diff --git a/examples/declarative/tvtennis/tvtennis.qml b/examples/declarative/tvtennis/tvtennis.qml
index 1585c7b..6022a15 100644
--- a/examples/declarative/tvtennis/tvtennis.qml
+++ b/examples/declarative/tvtennis/tvtennis.qml
@@ -1,4 +1,5 @@
 import Qt 4.6
+import Qt.multimedia 4.7
 
 Rectangle {
     id: page
@@ -15,14 +16,17 @@ Rectangle {
         color: "Lime"
         x: 20; width: 20; height: 20; z: 1
 
+        SoundEffect { id: paddle; source: "paddle.wav" }
+        SoundEffect { id: wall; source: "click.wav" }
+
         // Move the ball to the right and back to the left repeatedly
         SequentialAnimation on x {
             repeat: true
             NumberAnimation { to: page.width - 40; duration: 2000 }
-            ScriptAction { script: Qt.playSound('paddle.wav') }
+            ScriptAction { script: paddle.play() }
             PropertyAction { target: ball; property: "direction"; value: "left" }
             NumberAnimation { to: 20; duration: 2000 }
-            ScriptAction { script: Qt.playSound('paddle.wav') }
+            ScriptAction { script: paddle.play() }
             PropertyAction { target: ball; property: "direction"; value: "right" }
         }
 
@@ -32,10 +36,10 @@ Rectangle {
         // Detect the ball hitting the top or bottom of the view and bounce it
         onYChanged: {
             if (y <= 0) {
-                Qt.playSound('click.wav');
+                wall.play();
                 targetY = page.height - 20;
             } else if (y >= page.height - 20) {
-                Qt.playSound('click.wav');
+                wall.play();
                 targetY = 0;
             }
         }
diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt
index 4951cb3..6e77abf 100644
--- a/src/declarative/QmlChanges.txt
+++ b/src/declarative/QmlChanges.txt
@@ -6,6 +6,7 @@ Flickable: renamed viewportHeight -> contentHeight
 Flickable: renamed viewportX -> contentX
 Flickable: renamed viewportY -> contentY
 Removed Flickable.reportedVelocitySmoothing
+Removed Qt.playSound (replaced by SoundEffect element)
 Renamed MouseRegion -> MouseArea
 Connection: syntax and rename:
     Connection { sender: a; signal: foo(); script: xxx }
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index 20bbf86..1711cf1 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -243,7 +243,6 @@ QDeclarativeScriptEngine::QDeclarativeScriptEngine(QDeclarativeEnginePrivate *pr
 
     //misc methods
     qtObject.setProperty(QLatin1String("closestAngle"), newFunction(QDeclarativeEnginePrivate::closestAngle, 2));
-    qtObject.setProperty(QLatin1String("playSound"), newFunction(QDeclarativeEnginePrivate::playSound, 1));
     qtObject.setProperty(QLatin1String("openUrlExternally"),newFunction(QDeclarativeEnginePrivate::desktopOpenUrl, 1));
     qtObject.setProperty(QLatin1String("md5"),newFunction(QDeclarativeEnginePrivate::md5, 1));
     qtObject.setProperty(QLatin1String("btoa"),newFunction(QDeclarativeEnginePrivate::btoa, 1));
@@ -1105,30 +1104,6 @@ QScriptValue QDeclarativeEnginePrivate::darker(QScriptContext *ctxt, QScriptEngi
     return qScriptValueFromValue(engine, qVariantFromValue(color));
 }
 
-QScriptValue QDeclarativeEnginePrivate::playSound(QScriptContext *ctxt, QScriptEngine *engine)
-{
-    if (ctxt->argumentCount() != 1)
-        return engine->undefinedValue();
-
-    QUrl url(ctxt->argument(0).toString());
-
-    QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(engine);
-    if (url.isRelative()) {
-        QDeclarativeContext *context = enginePriv->getContext(ctxt);
-        if (!context)
-            return engine->undefinedValue();
-
-        url = context->resolvedUrl(url);
-    }
-
-    if (url.scheme() == QLatin1String("file")) {
-
-        QSound::play(url.toLocalFile());
-
-    }
-    return engine->undefinedValue();
-}
-
 QScriptValue QDeclarativeEnginePrivate::desktopOpenUrl(QScriptContext *ctxt, QScriptEngine *e)
 {
     if(ctxt->argumentCount() < 1)
diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h
index a9ba73a..459a325 100644
--- a/src/declarative/qml/qdeclarativeengine_p.h
+++ b/src/declarative/qml/qdeclarativeengine_p.h
@@ -319,7 +319,6 @@ public:
     static QScriptValue tint(QScriptContext*, QScriptEngine*);
 
     static QScriptValue closestAngle(QScriptContext*, QScriptEngine*);
-    static QScriptValue playSound(QScriptContext*, QScriptEngine*);
     static QScriptValue desktopOpenUrl(QScriptContext*, QScriptEngine*);
     static QScriptValue md5(QScriptContext*, QScriptEngine*);
     static QScriptValue btoa(QScriptContext*, QScriptEngine*);
diff --git a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
index 484cbd4..90afd4e 100644
--- a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
+++ b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
@@ -67,7 +67,6 @@ private slots:
     void darker();
     void tint();
     void closestAngle();
-    void playSound();
     void openUrlExternally();
     void md5();
     void createComponent();
@@ -280,12 +279,6 @@ void tst_qdeclarativeqt::closestAngle()
     delete object;
 }
 
-void tst_qdeclarativeqt::playSound()
-{
-    QEXPECT_FAIL("", "How do we test this?", Abort);
-    QVERIFY(false);
-}
-
 void tst_qdeclarativeqt::openUrlExternally()
 {
     QEXPECT_FAIL("", "How do we test this?", Abort);
-- 
cgit v0.12


From 84709f178dde24d4926f0222b6ce0ab692eeba67 Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Thu, 4 Mar 2010 15:29:43 +1000
Subject: Fix ListView contentHeight calculation.

Task-number: QT-2630
---
 src/declarative/graphicsitems/qdeclarativelistview.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 32627da..18d3661 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -223,7 +223,7 @@ public:
         if (!visibleItems.isEmpty()) {
             pos = (*visibleItems.constBegin())->position();
             if (visibleIndex > 0)
-                pos -= visibleIndex * (averageSize + spacing) - spacing;
+                pos -= visibleIndex * (averageSize + spacing);
         }
         return pos;
     }
@@ -2414,7 +2414,8 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count)
         int i = d->visibleItems.count() - 1;
         while (i > 0 && d->visibleItems.at(i)->index == -1)
             --i;
-        if (d->visibleItems.at(i)->index + 1 == modelIndex) {
+        if (d->visibleItems.at(i)->index + 1 == modelIndex
+            && d->visibleItems.at(i)->endPosition() < d->buffer+d->position()+d->size()-1) {
             // Special case of appending an item to the model.
             modelIndex = d->visibleIndex + d->visibleItems.count();
         } else {
-- 
cgit v0.12


From 5599ddd113fe1385e7a6aff708e12af419b8de87 Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Thu, 4 Mar 2010 15:41:00 +1000
Subject: Don't mess with highlight size if highlightFollowsCurrentItem is
 false.

Task-number: QT-2630
---
 src/declarative/graphicsitems/qdeclarativelistview.cpp | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 18d3661..cd8d143 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -799,10 +799,13 @@ void QDeclarativeListViewPrivate::createHighlight()
         if (item) {
             item->setParent(q->viewport());
             highlight = new FxListItem(item, q);
-            if (orient == QDeclarativeListView::Vertical)
-                highlight->item->setHeight(currentItem->item->height());
-            else
-                highlight->item->setWidth(currentItem->item->width());
+            if (currentItem && autoHighlight) {
+                if (orient == QDeclarativeListView::Vertical) {
+                    highlight->item->setHeight(currentItem->item->height());
+                } else {
+                    highlight->item->setWidth(currentItem->item->width());
+                }
+            }
             const QLatin1String posProp(orient == QDeclarativeListView::Vertical ? "y" : "x");
             highlightPosAnimator = new QDeclarativeEaseFollow(q);
             highlightPosAnimator->setTarget(QDeclarativeProperty(highlight->item, posProp));
-- 
cgit v0.12


From 57d68b06c15f8426c25e357f97b9154056969e0f Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Thu, 4 Mar 2010 16:04:15 +1000
Subject: Improve grouped property error messages

QT-2579
---
 src/declarative/qml/qdeclarativecompiler.cpp              | 15 ++++++++++++---
 src/declarative/qml/qdeclarativeparser.cpp                |  4 ++--
 src/declarative/qml/qdeclarativeparser_p.h                |  7 ++++++-
 src/declarative/qml/qdeclarativescriptparser.cpp          |  4 ++--
 .../qdeclarativelanguage/data/defaultGrouped.errors.txt   |  2 +-
 .../data/invalidGroupedProperty.10.errors.txt             |  1 +
 .../data/invalidGroupedProperty.10.qml                    |  7 +++++++
 .../data/invalidGroupedProperty.8.errors.txt              |  1 +
 .../data/invalidGroupedProperty.8.qml                     |  6 ++++++
 .../data/invalidGroupedProperty.9.errors.txt              |  1 +
 .../data/invalidGroupedProperty.9.qml                     |  6 ++++++
 .../qdeclarativelanguage/tst_qdeclarativelanguage.cpp     |  3 +++
 12 files changed, 48 insertions(+), 9 deletions(-)
 create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.10.errors.txt
 create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.10.qml
 create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.8.errors.txt
 create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.8.qml
 create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.9.errors.txt
 create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.9.qml

diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index 7a3dde9..32c746f 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -1789,13 +1789,19 @@ bool QDeclarativeCompiler::buildGroupedProperty(QDeclarativeParser::Property *pr
     Q_ASSERT(prop->type != 0);
     Q_ASSERT(prop->index != -1);
 
-    if (prop->values.count())
-        COMPILE_EXCEPTION(prop->values.first(), QCoreApplication::translate("QDeclarativeCompiler", "Invalid value in grouped property"));
-
     if (QDeclarativeValueTypeFactory::isValueType(prop->type)) {
         QDeclarativeEnginePrivate *ep =
             static_cast<QDeclarativeEnginePrivate *>(QObjectPrivate::get(engine));
         if (prop->type >= 0 /* QVariant == -1 */ && ep->valueTypes[prop->type]) {
+
+            if (prop->values.count()) {
+                if (prop->values.at(0)->location < prop->value->location) {
+                    COMPILE_EXCEPTION(prop->value, QCoreApplication::translate("QDeclarativeCompiler", "Property has already been assigned a value"));
+                } else {
+                    COMPILE_EXCEPTION(prop->values.at(0), QCoreApplication::translate("QDeclarativeCompiler", "Property has already been assigned a value"));
+                }
+            }
+
             COMPILE_CHECK(buildValueTypeProperty(ep->valueTypes[prop->type],
                                                  prop->value, obj, ctxt.incr()));
             obj->addValueTypeProperty(prop);
@@ -1810,6 +1816,9 @@ bool QDeclarativeCompiler::buildGroupedProperty(QDeclarativeParser::Property *pr
         if (!prop->value->metatype)
             COMPILE_EXCEPTION(prop, QCoreApplication::translate("QDeclarativeCompiler","Invalid grouped property access"));
 
+        if (prop->values.count()) 
+            COMPILE_EXCEPTION(prop->values.at(0), QCoreApplication::translate("QDeclarativeCompiler", "Cannot assign a value directly to a grouped property"));
+
         obj->addGroupedProperty(prop);
 
         COMPILE_CHECK(buildSubObject(prop->value, ctxt.incr()));
diff --git a/src/declarative/qml/qdeclarativeparser.cpp b/src/declarative/qml/qdeclarativeparser.cpp
index 0e3d856..b0599ad 100644
--- a/src/declarative/qml/qdeclarativeparser.cpp
+++ b/src/declarative/qml/qdeclarativeparser.cpp
@@ -226,9 +226,9 @@ QDeclarativeParser::Property::~Property()
     if (value) value->release(); 
 }
 
-Object *QDeclarativeParser::Property::getValue()
+Object *QDeclarativeParser::Property::getValue(const LocationSpan &l)
 {
-    if (!value) value = new Object;
+    if (!value) { value = new Object; value->location = l; }
     return value;
 }
 
diff --git a/src/declarative/qml/qdeclarativeparser_p.h b/src/declarative/qml/qdeclarativeparser_p.h
index d0d7de1..5bf4b68 100644
--- a/src/declarative/qml/qdeclarativeparser_p.h
+++ b/src/declarative/qml/qdeclarativeparser_p.h
@@ -104,6 +104,11 @@ namespace QDeclarativeParser
         Location start;
         Location end;
         LocationRange range;
+
+        bool operator<(LocationSpan &o) const {
+            return (start.line < o.start.line) ||
+                   (start.line == o.start.line && start.column < o.start.column);
+        }
     };
 
     class Property;
@@ -318,7 +323,7 @@ namespace QDeclarativeParser
         // The Object to which this property is attached
         Object *parent;
 
-        Object *getValue();
+        Object *getValue(const LocationSpan &);
         void addValue(Value *v);
         void addOnValue(Value *v);
 
diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp
index a4b3668..fe516c5 100644
--- a/src/declarative/qml/qdeclarativescriptparser.cpp
+++ b/src/declarative/qml/qdeclarativescriptparser.cpp
@@ -85,8 +85,8 @@ class ProcessAST: protected AST::Visitor
         {
             const State &state = top();
             if (state.property) {
-                State s(state.property->getValue(),
-                        state.property->getValue()->getProperty(name.toUtf8()));
+                State s(state.property->getValue(location),
+                        state.property->getValue(location)->getProperty(name.toUtf8()));
                 s.property->location = location;
                 push(s);
             } else {
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/defaultGrouped.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/defaultGrouped.errors.txt
index 945d51b..32055f6 100644
--- a/tests/auto/declarative/qdeclarativelanguage/data/defaultGrouped.errors.txt
+++ b/tests/auto/declarative/qdeclarativelanguage/data/defaultGrouped.errors.txt
@@ -1 +1 @@
-7:9:Invalid value in grouped property
+7:9:Cannot assign a value directly to a grouped property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.10.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.10.errors.txt
new file mode 100644
index 0000000..1fcb1b6
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.10.errors.txt
@@ -0,0 +1 @@
+4:14:Cannot assign a value directly to a grouped property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.10.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.10.qml
new file mode 100644
index 0000000..41aa3e2
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.10.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+    grouped: "10x10"
+    grouped.value: 10
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.8.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.8.errors.txt
new file mode 100644
index 0000000..fa0da21
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.8.errors.txt
@@ -0,0 +1 @@
+5:19:Property has already been assigned a value
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.8.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.8.qml
new file mode 100644
index 0000000..56fca9b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.8.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+    pointProperty: "10x10"
+    pointProperty.x: 10
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.9.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.9.errors.txt
new file mode 100644
index 0000000..6d837a7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.9.errors.txt
@@ -0,0 +1 @@
+5:20:Property has already been assigned a value
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.9.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.9.qml
new file mode 100644
index 0000000..982ab26
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidGroupedProperty.9.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+    pointProperty.x: 10
+    pointProperty: "10x10"
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 5d480fa..28daf29 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -255,6 +255,9 @@ void tst_qdeclarativelanguage::errors_data()
     QTest::newRow("invalidGroupedProperty.5") << "invalidGroupedProperty.5.qml" << "invalidGroupedProperty.5.errors.txt" << false;
     QTest::newRow("invalidGroupedProperty.6") << "invalidGroupedProperty.6.qml" << "invalidGroupedProperty.6.errors.txt" << false;
     QTest::newRow("invalidGroupedProperty.7") << "invalidGroupedProperty.7.qml" << "invalidGroupedProperty.7.errors.txt" << true;
+    QTest::newRow("invalidGroupedProperty.8") << "invalidGroupedProperty.8.qml" << "invalidGroupedProperty.8.errors.txt" << false;
+    QTest::newRow("invalidGroupedProperty.9") << "invalidGroupedProperty.9.qml" << "invalidGroupedProperty.9.errors.txt" << false;
+    QTest::newRow("invalidGroupedProperty.10") << "invalidGroupedProperty.10.qml" << "invalidGroupedProperty.10.errors.txt" << false;
 
     QTest::newRow("importNamespaceConflict") << "importNamespaceConflict.qml" << "importNamespaceConflict.errors.txt" << false;
     QTest::newRow("importVersionMissing (builtin)") << "importVersionMissingBuiltIn.qml" << "importVersionMissingBuiltIn.errors.txt" << false;
-- 
cgit v0.12


From c329db551237906cc659f3276c679d0e573edff2 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Thu, 4 Mar 2010 16:31:06 +1000
Subject: Fix grammar stringifying "on" as "readonly"

QTBUG-8676
---
 src/declarative/qml/parser/qdeclarativejs.g               |  2 +-
 src/declarative/qml/parser/qdeclarativejsgrammar.cpp      |  2 +-
 src/declarative/qml/parser/qdeclarativejsgrammar_p.h      |  4 ++--
 src/declarative/qml/parser/qdeclarativejsparser.cpp       |  2 +-
 .../qdeclarativelanguage/data/customOnProperty.qml        |  7 +++++++
 .../qdeclarativelanguage/tst_qdeclarativelanguage.cpp     | 15 +++++++++++++++
 6 files changed, 27 insertions(+), 5 deletions(-)
 create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/customOnProperty.qml

diff --git a/src/declarative/qml/parser/qdeclarativejs.g b/src/declarative/qml/parser/qdeclarativejs.g
index 7cf81b2..493ad25 100644
--- a/src/declarative/qml/parser/qdeclarativejs.g
+++ b/src/declarative/qml/parser/qdeclarativejs.g
@@ -1020,7 +1020,7 @@ case $rule_number: {
 JsIdentifier: T_ON ;
 /.
 case $rule_number: {
-    QString s = QLatin1String(QDeclarativeJSGrammar::spell[T_READONLY]);
+    QString s = QLatin1String(QDeclarativeJSGrammar::spell[T_ON]);
     sym(1).sval = driver->intern(s.constData(), s.length());
     break;
 }
diff --git a/src/declarative/qml/parser/qdeclarativejsgrammar.cpp b/src/declarative/qml/parser/qdeclarativejsgrammar.cpp
index 0677bc5..89493ff 100644
--- a/src/declarative/qml/parser/qdeclarativejsgrammar.cpp
+++ b/src/declarative/qml/parser/qdeclarativejsgrammar.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the QtCore module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/declarative/qml/parser/qdeclarativejsgrammar_p.h b/src/declarative/qml/parser/qdeclarativejsgrammar_p.h
index 2b2e3d1..32bb12b 100644
--- a/src/declarative/qml/parser/qdeclarativejsgrammar_p.h
+++ b/src/declarative/qml/parser/qdeclarativejsgrammar_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the QtCore module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE
 class QDeclarativeJSGrammar
 {
 public:
-  enum {
+  enum VariousConstants {
     EOF_SYMBOL = 0,
     REDUCE_HERE = 100,
     SHIFT_THERE = 99,
diff --git a/src/declarative/qml/parser/qdeclarativejsparser.cpp b/src/declarative/qml/parser/qdeclarativejsparser.cpp
index fd9e690..c86e047 100644
--- a/src/declarative/qml/parser/qdeclarativejsparser.cpp
+++ b/src/declarative/qml/parser/qdeclarativejsparser.cpp
@@ -516,7 +516,7 @@ case 66: {
 }
 
 case 67: {
-    QString s = QLatin1String(QDeclarativeJSGrammar::spell[T_READONLY]);
+    QString s = QLatin1String(QDeclarativeJSGrammar::spell[T_ON]);
     sym(1).sval = driver->intern(s.constData(), s.length());
     break;
 }
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/customOnProperty.qml b/tests/auto/declarative/qdeclarativelanguage/data/customOnProperty.qml
new file mode 100644
index 0000000..7cd6a83
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/customOnProperty.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+QtObject {
+    property int on
+
+    Component.onCompleted: on = 10
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 28daf29..a339a6d 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -128,6 +128,8 @@ private slots:
 
     void qmlAttachedPropertiesObjectMethod();
 
+    void customOnProperty();
+
     // regression tests for crashes
     void crash1();
     void crash2();
@@ -1397,6 +1399,19 @@ void tst_qdeclarativelanguage::crash2()
     QDeclarativeComponent component(&engine, TEST_FILE("crash2.qml"));
 }
 
+// QTBUG-8676
+void tst_qdeclarativelanguage::customOnProperty()
+{
+    QDeclarativeComponent component(&engine, TEST_FILE("customOnProperty.qml"));
+
+    VERIFY_ERRORS(0);
+    QObject *object = component.create();
+    QVERIFY(object != 0);
+
+    QCOMPARE(object->property("on").toInt(), 10);
+
+    delete object;
+}
 
 void tst_qdeclarativelanguage::initTestCase()
 {
-- 
cgit v0.12


From ff40702d547088266a09adb2d1b5d9a270334d21 Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Thu, 4 Mar 2010 16:54:38 +1000
Subject: Move the multimedia files to the correct place.

---
 src/imports/multimedia/qdeclarativeaudio.cpp       | 327 +++++++
 src/imports/multimedia/qdeclarativeaudio_p.h       | 173 ++++
 src/imports/multimedia/qdeclarativemediabase.cpp   | 413 +++++++++
 src/imports/multimedia/qdeclarativemediabase_p.h   | 168 ++++
 src/imports/multimedia/qdeclarativevideo.cpp       | 945 +++++++++++++++++++++
 src/imports/multimedia/qdeclarativevideo_p.h       | 204 +++++
 .../multimedia/qmetadatacontrolmetaobject.cpp      | 362 ++++++++
 .../multimedia/qmetadatacontrolmetaobject_p.h      |  92 ++
 .../multimedia/qdeclarativeaudio.cpp               | 327 -------
 .../multimedia/qdeclarativeaudio_p.h               | 173 ----
 .../multimedia/qdeclarativemediabase.cpp           | 413 ---------
 .../multimedia/qdeclarativemediabase_p.h           | 168 ----
 .../multimedia/qdeclarativevideo.cpp               | 945 ---------------------
 .../multimedia/qdeclarativevideo_p.h               | 204 -----
 .../multimedia/qmetadatacontrolmetaobject.cpp      | 362 --------
 .../multimedia/qmetadatacontrolmetaobject_p.h      |  92 --
 16 files changed, 2684 insertions(+), 2684 deletions(-)
 create mode 100644 src/imports/multimedia/qdeclarativeaudio.cpp
 create mode 100644 src/imports/multimedia/qdeclarativeaudio_p.h
 create mode 100644 src/imports/multimedia/qdeclarativemediabase.cpp
 create mode 100644 src/imports/multimedia/qdeclarativemediabase_p.h
 create mode 100644 src/imports/multimedia/qdeclarativevideo.cpp
 create mode 100644 src/imports/multimedia/qdeclarativevideo_p.h
 create mode 100644 src/imports/multimedia/qmetadatacontrolmetaobject.cpp
 create mode 100644 src/imports/multimedia/qmetadatacontrolmetaobject_p.h
 delete mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio.cpp
 delete mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h
 delete mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp
 delete mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h
 delete mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo.cpp
 delete mode 100644 src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h
 delete mode 100644 src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp
 delete mode 100644 src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h

diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp
new file mode 100644
index 0000000..df2888c
--- /dev/null
+++ b/src/imports/multimedia/qdeclarativeaudio.cpp
@@ -0,0 +1,327 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarativeaudio_p.h"
+
+#include <QtMultimedia/qmediaplayercontrol.h>
+
+QT_BEGIN_NAMESPACE
+
+
+/*!
+    \qmlclass Audio QDeclarativeAudio
+    \since 4.7
+    \brief The Audio element allows you to add audio playback to a scene.
+
+    \qml
+    Audio { source: "audio/song.mp3" }
+    \endqml
+
+    \sa Video
+*/
+
+/*!
+    \internal
+    \class QDeclarativeAudio
+    \brief The QDeclarativeAudio class provides an audio item that you can add to a QDeclarativeView.
+*/
+
+void QDeclarativeAudio::_q_error(int errorCode, const QString &errorString)
+{
+    m_error = QMediaPlayer::Error(errorCode);
+    m_errorString = errorString;
+
+    emit error(Error(errorCode), errorString);
+    emit errorChanged();
+}
+
+
+QDeclarativeAudio::QDeclarativeAudio(QObject *parent)
+    : QObject(parent)
+{
+    setObject(this);
+}
+
+QDeclarativeAudio::~QDeclarativeAudio()
+{
+    shutdown();
+}
+
+/*!
+    \qmlmethod Audio::play()
+
+    Starts playback of the media.
+
+    Sets the \l playing property to true, and the \l paused property to false.
+*/
+
+void QDeclarativeAudio::play()
+{    
+    m_playerControl->play();
+
+    if (m_paused) {
+        m_paused = false;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlmethod Audio::pause()
+
+    Pauses playback of the media.
+
+    Sets the \l playing and \l paused properties to true.
+*/
+
+void QDeclarativeAudio::pause()
+{
+    m_playerControl->pause();
+
+    if (!m_paused && m_state == QMediaPlayer::PausedState) {
+        m_paused = true;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlmethod Audio::stop()
+
+    Stops playback of the media.
+
+    Sets the \l playing and \l paused properties to false.
+*/
+
+void QDeclarativeAudio::stop()
+{
+    m_playerControl->stop();
+
+    if (m_paused) {
+        m_paused = false;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlproperty url Audio::source
+
+    This property holds the source URL of the media.
+*/
+
+/*!
+    \qmlproperty bool Audio::playing
+
+    This property holds whether the media is playing.
+
+    Defaults to false, and can be set to true to start playback.
+*/
+
+/*!
+    \qmlproperty bool Audio::paused
+
+    This property holds whether the media is paused.
+
+    Defaults to false, and can be set to true to pause playback.
+*/
+
+/*!
+    \qmlsignal Audio::onStarted()
+
+    This handler is called when playback is started.
+*/
+
+/*!
+    \qmlsignal Audio::onResumed()
+
+    This handler is called when playback is resumed from the paused state.
+*/
+
+/*!
+    \qmlsignal Audio::onPaused()
+
+    This handler is called when playback is paused.
+*/
+
+/*!
+    \qmlsignal Audio::onStopped()
+
+    This handler is called when playback is stopped.
+*/
+
+/*!
+    \qmlproperty enum Audio::status
+
+    This property holds the status of media loading. It can be one of:
+
+    \list
+    \o NoMedia - no media has been set.
+    \o Loading - the media is currently being loaded.
+    \o Loaded - the media has been loaded.
+    \o Buffering - the media is buffering data.
+    \o Stalled - playback has been interrupted while the media is buffering data.
+    \o Buffered - the media has buffered data.
+    \o EndOfMedia - the media has played to the end.
+    \o InvalidMedia - the media cannot be played.
+    \o UnknownStatus - the status of the media is unknown.
+    \endlist
+*/
+
+QDeclarativeAudio::Status QDeclarativeAudio::status() const
+{
+    return Status(m_status);
+}
+
+/*!
+    \qmlsignal Audio::onLoaded()
+
+    This handler is called when the media source has been loaded.
+*/
+
+/*!
+    \qmlsignal Audio::onBuffering()
+
+    This handler is called when the media  starts buffering.
+*/
+
+/*!
+    \qmlsignal Audio::onStalled()
+
+    This handler is called when playback has stalled while the media buffers.
+*/
+
+/*!
+    \qmlsignal Audio::onBuffered()
+
+    This handler is called when the media has finished buffering.
+*/
+
+/*!
+    \qmlsignal Audio::onEndOfMedia()
+
+    This handler is called when playback stops because end of the media has been reached.
+*/
+/*!
+    \qmlproperty int Audio::duration
+
+    This property holds the duration of the media in milliseconds.
+
+    If the media doesn't have a fixed duration (a live stream for example) this will be 0.
+*/
+
+/*!
+    \qmlproperty int Audio::position
+
+    This property holds the current playback position in milliseconds.
+
+    If the \l seekable property is true, this property can be set to seek to a new position.
+*/
+
+/*!
+    \qmlproperty qreal Audio::volume
+
+    This property holds the volume of the audio output, from 0.0 (silent) to 1.0 (maximum volume).
+*/
+
+/*!
+    \qmlproperty bool Audio::muted
+
+    This property holds whether the audio output is muted.
+*/
+
+/*!
+    \qmlproperty qreal Audio::bufferProgress
+
+    This property holds how much of the data buffer is currently filled, from 0.0 (empty) to 1.0
+    (full).
+*/
+
+/*!
+    \qmlproperty bool Audio::seekable
+
+    This property holds whether position of the audio can be changed.
+
+    If true; setting a \l position value will cause playback to seek to the new position.
+*/
+
+/*!
+    \qmlproperty qreal Audio::playbackRate
+
+    This property holds the rate at which audio is played at as a multiple of the normal rate.
+*/
+
+/*!
+    \qmlproperty enum Audio::error
+
+    This property holds the error state of the audio.  It can be one of:
+
+    \list
+    \o NoError - there is no current error.
+    \o ResourceError - the audio cannot be played due to a problem allocating resources.
+    \o FormatError - the audio format is not supported.
+    \o NetworkError - the audio cannot be played due to network issues.
+    \o AccessDenied - the audio cannot be played due to insufficient permissions.
+    \o ServiceMissing -  the audio cannot be played because the media service could not be
+    instantiated.
+    \endlist
+*/
+
+QDeclarativeAudio::Error QDeclarativeAudio::error() const
+{
+    return Error(m_error);
+}
+
+/*!
+    \qmlproperty string Audio::errorString
+
+    This property holds a string describing the current error condition in more detail.
+*/
+
+/*!
+    \qmlsignal Audio::onError(error, errorString)
+
+    This handler is called when an \l {Error}{error} has occurred.  The errorString parameter
+    may contain more detailed information about the error.
+*/
+
+QT_END_NAMESPACE
+
+#include "moc_qdeclarativeaudio_p.cpp"
+
+
diff --git a/src/imports/multimedia/qdeclarativeaudio_p.h b/src/imports/multimedia/qdeclarativeaudio_p.h
new file mode 100644
index 0000000..9881dbc
--- /dev/null
+++ b/src/imports/multimedia/qdeclarativeaudio_p.h
@@ -0,0 +1,173 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVEAUDIO_P_H
+#define QDECLARATIVEAUDIO_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qdeclarativemediabase_p.h"
+
+#include <QtCore/qbasictimer.h>
+#include <QtDeclarative/qdeclarativeitem.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QTimerEvent;
+
+class QDeclarativeAudio : public QObject, public QDeclarativeMediaBase, public QDeclarativeParserStatus
+{
+    Q_OBJECT
+    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
+    Q_PROPERTY(bool playing READ isPlaying WRITE setPlaying NOTIFY playingChanged)
+    Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
+    Q_PROPERTY(Status status READ status NOTIFY statusChanged)
+    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
+    Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
+    Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged)
+    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
+    Q_PROPERTY(int bufferProgress READ bufferProgress NOTIFY bufferProgressChanged)
+    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
+    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
+    Q_PROPERTY(Error error READ error NOTIFY errorChanged)
+    Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
+    Q_ENUMS(Status)
+    Q_ENUMS(Error)
+    Q_INTERFACES(QDeclarativeParserStatus)
+public:
+    enum Status
+    {
+        UnknownStatus = QMediaPlayer::UnknownMediaStatus,
+        NoMedia       = QMediaPlayer::NoMedia,
+        Loading       = QMediaPlayer::LoadingMedia,
+        Loaded        = QMediaPlayer::LoadedMedia,
+        Stalled       = QMediaPlayer::StalledMedia,
+        Buffering     = QMediaPlayer::BufferingMedia,
+        Buffered      = QMediaPlayer::BufferedMedia,
+        EndOfMedia    = QMediaPlayer::EndOfMedia,
+        InvalidMedia  = QMediaPlayer::InvalidMedia
+    };
+
+    enum Error
+    {
+        NoError        = QMediaPlayer::NoError,
+        ResourceError  = QMediaPlayer::ResourceError,
+        FormatError    = QMediaPlayer::FormatError,
+        NetworkError   = QMediaPlayer::NetworkError,
+        AccessDenied   = QMediaPlayer::AccessDeniedError,
+        ServiceMissing = QMediaPlayer::ServiceMissingError
+    };
+
+    QDeclarativeAudio(QObject *parent = 0);
+    ~QDeclarativeAudio();
+
+    Status status() const;
+    Error error() const;
+
+public Q_SLOTS:
+    void play();
+    void pause();
+    void stop();
+
+Q_SIGNALS:
+    void sourceChanged();
+
+    void playingChanged();
+    void pausedChanged();
+
+    void started();
+    void resumed();
+    void paused();
+    void stopped();
+
+    void statusChanged();
+
+    void loaded();
+    void buffering();
+    void stalled();
+    void buffered();
+    void endOfMedia();
+
+    void durationChanged();
+    void positionChanged();
+
+    void volumeChanged();
+    void mutedChanged();
+
+    void bufferProgressChanged();
+
+    void seekableChanged();
+    void playbackRateChanged();
+
+    void errorChanged();
+    void error(QDeclarativeAudio::Error error, const QString &errorString);
+
+private Q_SLOTS:
+    void _q_error(int, const QString &);
+
+private:
+    Q_DISABLE_COPY(QDeclarativeAudio)
+    Q_PRIVATE_SLOT(mediaBase(), void _q_stateChanged(QMediaPlayer::State))
+    Q_PRIVATE_SLOT(mediaBase(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
+    Q_PRIVATE_SLOT(mediaBase(), void _q_metaDataChanged())
+
+    inline QDeclarativeMediaBase *mediaBase() { return this; }
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeAudio))
+
+QT_END_HEADER
+
+#endif
diff --git a/src/imports/multimedia/qdeclarativemediabase.cpp b/src/imports/multimedia/qdeclarativemediabase.cpp
new file mode 100644
index 0000000..8e87e44
--- /dev/null
+++ b/src/imports/multimedia/qdeclarativemediabase.cpp
@@ -0,0 +1,413 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarativemediabase_p.h"
+
+#include <QtCore/qcoreevent.h>
+#include <QtCore/qurl.h>
+
+#include <QtMultimedia/qmediaplayercontrol.h>
+#include <QtMultimedia/qmediaservice.h>
+#include <QtMultimedia/qmediaserviceprovider.h>
+#include <QtMultimedia/qmetadatacontrol.h>
+#include "qmetadatacontrolmetaobject_p.h"
+
+
+
+QT_BEGIN_NAMESPACE
+
+
+class QDeclarativeMediaBaseObject : public QMediaObject
+{
+public:
+    QDeclarativeMediaBaseObject(QMediaService *service)
+        : QMediaObject(0, service)
+    {
+    }
+};
+
+class QDeclarativeMediaBasePlayerControl : public QMediaPlayerControl
+{
+public:
+    QDeclarativeMediaBasePlayerControl(QObject *parent)
+        : QMediaPlayerControl(parent)
+    {
+    }
+
+    QMediaPlayer::State state() const { return QMediaPlayer::StoppedState; }
+    QMediaPlayer::MediaStatus mediaStatus() const { return QMediaPlayer::NoMedia; }
+
+    qint64 duration() const { return 0; }
+    qint64 position() const { return 0; }
+    void setPosition(qint64) {}
+    int volume() const { return 0; }
+    void setVolume(int) {}
+    bool isMuted() const { return false; }
+    void setMuted(bool) {}
+    int bufferStatus() const { return 0; }
+    bool isAudioAvailable() const { return false; }
+    bool isVideoAvailable() const { return false; }
+    bool isSeekable() const { return false; }
+    QMediaTimeRange availablePlaybackRanges() const { return QMediaTimeRange(); }
+    qreal playbackRate() const { return 1; }
+    void setPlaybackRate(qreal) {}
+    QMediaContent media() const { return QMediaContent(); }
+    const QIODevice *mediaStream() const { return 0; }
+    void setMedia(const QMediaContent &, QIODevice *) {}
+
+    void play() {}
+    void pause() {}
+    void stop() {}
+};
+
+class QDeclarativeMediaBaseAnimation : public QObject
+{
+public:
+    QDeclarativeMediaBaseAnimation(QDeclarativeMediaBase *media)
+        : m_media(media)
+    {
+    }
+
+    void start() { if (!m_timer.isActive()) m_timer.start(500, this); }
+    void stop() { m_timer.stop(); }
+
+protected:
+    void timerEvent(QTimerEvent *event)
+    {
+        if (event->timerId() == m_timer.timerId()) {
+            event->accept();
+
+            if (m_media->m_state == QMediaPlayer::PlayingState)
+                emit m_media->positionChanged();
+            if (m_media->m_status == QMediaPlayer::BufferingMedia || QMediaPlayer::StalledMedia)
+                emit m_media->bufferProgressChanged();
+        } else {
+            QObject::timerEvent(event);
+        }
+    }
+
+private:
+    QDeclarativeMediaBase *m_media;
+    QBasicTimer m_timer;
+};
+
+void QDeclarativeMediaBase::_q_stateChanged(QMediaPlayer::State state)
+{
+    if (state != m_state) {
+        QMediaPlayer::State oldState = m_state;
+
+        m_state = state;
+
+        if (state == QMediaPlayer::StoppedState) {
+            emit stopped();
+            emit playingChanged();
+        } else if (oldState == QMediaPlayer::StoppedState) {
+            emit started();
+            emit playingChanged();
+        } else if (oldState  == QMediaPlayer::PausedState) {
+            m_paused = false;
+
+            emit resumed();
+            emit pausedChanged();
+        }
+
+        if (state == m_state && state == QMediaPlayer::PausedState) {
+            bool wasPaused = m_paused;
+
+            m_paused = true;
+
+            emit paused();
+
+            if (!wasPaused)
+                emit pausedChanged();
+        }
+
+        if (m_state == QMediaPlayer::PlayingState
+                || m_status == QMediaPlayer::BufferingMedia
+                || m_status == QMediaPlayer::StalledMedia) {
+            m_animation->start();
+        } else {
+            m_animation->stop();
+        }
+    }
+}
+
+void QDeclarativeMediaBase::_q_mediaStatusChanged(QMediaPlayer::MediaStatus status)
+{
+    if (status != m_status) {
+        m_status = status;
+
+        switch (status) {
+        case QMediaPlayer::LoadedMedia:
+            emit loaded();
+            break;
+        case QMediaPlayer::BufferingMedia:
+            emit buffering();
+            break;
+        case QMediaPlayer::BufferedMedia:
+            emit buffered();
+            break;
+        case QMediaPlayer::StalledMedia:
+            emit stalled();
+            break;
+        case QMediaPlayer::EndOfMedia:
+            emit endOfMedia();
+            break;
+        default:
+            break;
+        }
+
+        emit statusChanged();
+
+        if (m_state == QMediaPlayer::PlayingState
+                || m_status == QMediaPlayer::BufferingMedia
+                || m_status == QMediaPlayer::StalledMedia) {
+            m_animation->start();
+        } else {
+            m_animation->stop();
+        }
+    }
+}
+
+void QDeclarativeMediaBase::_q_metaDataChanged()
+{
+    m_metaObject->metaDataChanged();
+}
+
+QDeclarativeMediaBase::QDeclarativeMediaBase()
+    : m_mediaService(0)
+    , m_playerControl(0)
+    , m_mediaObject(0)
+    , m_mediaProvider(0)
+    , m_metaDataControl(0)
+    , m_metaObject(0)
+    , m_animation(0)
+    , m_state(QMediaPlayer::StoppedState)
+    , m_status(QMediaPlayer::NoMedia)
+    , m_error(QMediaPlayer::NoError)
+    , m_paused(false)
+{
+}
+
+QDeclarativeMediaBase::~QDeclarativeMediaBase()
+{
+}
+
+void QDeclarativeMediaBase::shutdown()
+{
+    delete m_metaObject;
+    delete m_mediaObject;
+
+    if (m_mediaProvider)
+        m_mediaProvider->releaseService(m_mediaService);
+
+    delete m_animation;
+
+}
+
+void QDeclarativeMediaBase::setObject(QObject *object)
+{
+    if ((m_mediaProvider = QMediaServiceProvider::defaultServiceProvider())) {
+        if ((m_mediaService = m_mediaProvider->requestService(Q_MEDIASERVICE_MEDIAPLAYER))) {
+            m_playerControl = qobject_cast<QMediaPlayerControl *>(
+                    m_mediaService->control(QMediaPlayerControl_iid));
+            m_metaDataControl = qobject_cast<QMetaDataControl *>(
+                    m_mediaService->control(QMetaDataControl_iid));
+            m_mediaObject = new QDeclarativeMediaBaseObject(m_mediaService);
+        }
+    }
+
+    if (m_playerControl) {
+        QObject::connect(m_playerControl, SIGNAL(stateChanged(QMediaPlayer::State)),
+                object, SLOT(_q_stateChanged(QMediaPlayer::State)));
+        QObject::connect(m_playerControl, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
+                object, SLOT(_q_mediaStatusChanged(QMediaPlayer::MediaStatus)));
+        QObject::connect(m_playerControl, SIGNAL(mediaChanged(QMediaContent)),
+                object, SIGNAL(sourceChanged()));
+        QObject::connect(m_playerControl, SIGNAL(durationChanged(qint64)),
+                object, SIGNAL(durationChanged()));
+        QObject::connect(m_playerControl, SIGNAL(positionChanged(qint64)),
+                object, SIGNAL(positionChanged()));
+        QObject::connect(m_playerControl, SIGNAL(volumeChanged(int)),
+                object, SIGNAL(volumeChanged()));
+        QObject::connect(m_playerControl, SIGNAL(mutedChanged(bool)),
+                object, SIGNAL(mutedChanged()));
+        QObject::connect(m_playerControl, SIGNAL(bufferStatusChanged(int)),
+                object, SIGNAL(bufferProgressChanged()));
+        QObject::connect(m_playerControl, SIGNAL(seekableChanged(bool)),
+                object, SIGNAL(seekableChanged()));
+        QObject::connect(m_playerControl, SIGNAL(playbackRateChanged(qreal)),
+                object, SIGNAL(playbackRateChanged()));
+        QObject::connect(m_playerControl, SIGNAL(error(int,QString)),
+                object, SLOT(_q_error(int,QString)));
+
+        m_animation = new QDeclarativeMediaBaseAnimation(this);
+    } else {
+        m_error = QMediaPlayer::ServiceMissingError;
+
+        m_playerControl = new QDeclarativeMediaBasePlayerControl(object);
+    }
+
+    if (m_metaDataControl) {
+        m_metaObject = new QMetaDataControlMetaObject(m_metaDataControl, object);
+
+        QObject::connect(m_metaDataControl, SIGNAL(metaDataChanged()),
+                object, SLOT(_q_metaDataChanged()));
+    }
+}
+
+QUrl QDeclarativeMediaBase::source() const
+{
+    return m_playerControl->media().canonicalUrl();
+}
+
+void QDeclarativeMediaBase::setSource(const QUrl &url)
+{
+    if (m_error != QMediaPlayer::ServiceMissingError && m_error != QMediaPlayer::NoError) {
+        m_error = QMediaPlayer::NoError;
+        m_errorString = QString();
+
+        emit errorChanged();
+    }
+
+    m_playerControl->setMedia(QMediaContent(url), 0);
+}
+
+bool QDeclarativeMediaBase::isPlaying() const
+{
+    return m_state != QMediaPlayer::StoppedState;
+}
+
+void QDeclarativeMediaBase::setPlaying(bool playing)
+{
+    if (playing && m_state == QMediaPlayer::StoppedState) {
+        if (m_paused)
+            m_playerControl->pause();
+        else
+            m_playerControl->play();
+    } else if (!playing) {
+        m_playerControl->stop();
+    }
+}
+
+bool QDeclarativeMediaBase::isPaused() const
+{
+    return m_paused;
+}
+
+void QDeclarativeMediaBase::setPaused(bool paused)
+{
+    if (m_paused != paused) {
+        if (paused && m_state == QMediaPlayer::PlayingState) {
+            m_playerControl->pause();
+        } else if (!paused && m_state == QMediaPlayer::PausedState) {
+            m_playerControl->play();
+        } else {
+            m_paused = paused;
+
+            emit pausedChanged();
+        }
+    }
+}
+
+int QDeclarativeMediaBase::duration() const
+{
+    return m_playerControl->duration();
+}
+
+int QDeclarativeMediaBase::position() const
+{
+    return m_playerControl->position();
+
+}
+
+void QDeclarativeMediaBase::setPosition(int position)
+{
+    m_playerControl->setPosition(position);
+}
+
+qreal QDeclarativeMediaBase::volume() const
+{
+    return qreal(m_playerControl->volume()) / 100;
+}
+
+void QDeclarativeMediaBase::setVolume(qreal volume)
+{
+    m_playerControl->setVolume(qRound(volume * 100));
+}
+
+bool QDeclarativeMediaBase::isMuted() const
+{
+    return m_playerControl->isMuted();
+}
+
+void QDeclarativeMediaBase::setMuted(bool muted)
+{
+    m_playerControl->setMuted(muted);
+}
+
+qreal QDeclarativeMediaBase::bufferProgress() const
+{
+    return qreal(m_playerControl->bufferStatus()) / 100;
+}
+
+bool QDeclarativeMediaBase::isSeekable() const
+{
+    return m_playerControl->isSeekable();
+}
+
+qreal QDeclarativeMediaBase::playbackRate() const
+{
+    return m_playerControl->playbackRate();
+}
+
+void QDeclarativeMediaBase::setPlaybackRate(qreal rate)
+{
+    m_playerControl->setPlaybackRate(rate);
+}
+
+QString QDeclarativeMediaBase::errorString() const
+{
+    return m_errorString;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/imports/multimedia/qdeclarativemediabase_p.h b/src/imports/multimedia/qdeclarativemediabase_p.h
new file mode 100644
index 0000000..b40e84e
--- /dev/null
+++ b/src/imports/multimedia/qdeclarativemediabase_p.h
@@ -0,0 +1,168 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVEMEDIABASE_P_H
+#define QDECLARATIVEMEDIABASE_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qbasictimer.h>
+#include <QtMultimedia/qmediaplayer.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QMediaPlayerControl;
+class QMediaService;
+class QMediaServiceProvider;
+class QMetaDataControl;
+class QMetaDataControlMetaObject;
+class QDeclarativeMediaBaseAnimation;
+
+class QDeclarativeMediaBase
+{
+public:
+    QDeclarativeMediaBase();
+    virtual ~QDeclarativeMediaBase();
+
+    QUrl source() const;
+    void setSource(const QUrl &url);
+
+    bool isPlaying() const;
+    void setPlaying(bool playing);
+
+    bool isPaused() const;
+    void setPaused(bool paused);
+
+    int duration() const;
+
+    int position() const;
+    void setPosition(int position);
+
+    qreal volume() const;
+    void setVolume(qreal volume);
+
+    bool isMuted() const;
+    void setMuted(bool muted);
+
+    qreal bufferProgress() const;
+
+    bool isSeekable() const;
+
+    qreal playbackRate() const;
+    void setPlaybackRate(qreal rate);
+
+    QString errorString() const;
+
+    void _q_stateChanged(QMediaPlayer::State state);
+    void _q_mediaStatusChanged(QMediaPlayer::MediaStatus status);
+
+    void _q_metaDataChanged();
+
+protected:
+    void shutdown();
+
+    void setObject(QObject *object);
+
+    virtual void sourceChanged() = 0;
+
+    virtual void playingChanged() = 0;
+    virtual void pausedChanged() = 0;
+
+    virtual void started() = 0;
+    virtual void resumed() = 0;
+    virtual void paused() = 0;
+    virtual void stopped() = 0;
+
+    virtual void statusChanged() = 0;
+
+    virtual void loaded() = 0;
+    virtual void buffering() = 0;
+    virtual void stalled() = 0;
+    virtual void buffered() = 0;
+    virtual void endOfMedia() = 0;
+
+    virtual void durationChanged() = 0;
+    virtual void positionChanged() = 0;
+
+    virtual void volumeChanged() = 0;
+    virtual void mutedChanged() = 0;
+
+    virtual void bufferProgressChanged() = 0;
+
+    virtual void seekableChanged() = 0;
+    virtual void playbackRateChanged() = 0;
+
+    virtual void errorChanged() = 0;
+
+    QMediaService *m_mediaService;
+    QMediaPlayerControl *m_playerControl;
+
+    QMediaObject *m_mediaObject;
+    QMediaServiceProvider *m_mediaProvider;
+    QMetaDataControl *m_metaDataControl;
+    QMetaDataControlMetaObject *m_metaObject;
+    QDeclarativeMediaBaseAnimation *m_animation;
+
+    QMediaPlayer::State m_state;
+    QMediaPlayer::MediaStatus m_status;
+    QMediaPlayer::Error m_error;
+    bool m_paused;
+    QString m_errorString;
+
+    friend class QDeclarativeMediaBaseAnimation;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/imports/multimedia/qdeclarativevideo.cpp b/src/imports/multimedia/qdeclarativevideo.cpp
new file mode 100644
index 0000000..064f242
--- /dev/null
+++ b/src/imports/multimedia/qdeclarativevideo.cpp
@@ -0,0 +1,945 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarativevideo_p.h"
+
+#include <QtMultimedia/qmediaplayercontrol.h>
+#include <QtMultimedia/qmediaservice.h>
+#include <QtMultimedia/private/qpaintervideosurface_p.h>
+#include <QtMultimedia/qvideooutputcontrol.h>
+#include <QtMultimedia/qvideorenderercontrol.h>
+
+
+QT_BEGIN_NAMESPACE
+
+
+void QDeclarativeVideo::_q_nativeSizeChanged(const QSizeF &size)
+{
+    setImplicitWidth(size.width());
+    setImplicitHeight(size.height());
+}
+
+void QDeclarativeVideo::_q_error(int errorCode, const QString &errorString)
+{
+    m_error = QMediaPlayer::Error(errorCode);
+    m_errorString = errorString;
+
+    emit error(Error(errorCode), errorString);
+    emit errorChanged();
+}
+
+
+/*!
+    \qmlclass Video QDeclarativeVideo
+    \since 4.7
+    \brief The Video element allows you to add videos to a scene.
+    \inherits Item
+
+    \qml
+    Video { source: "video/movie.mpg" }
+    \endqml
+
+    The video item supports untransformed, stretched, and uniformly scaled video presentation.
+    For a description of stretched uniformly scaled presentation, see the \l fillMode property
+    description.
+
+    The video item is only visible when the \l hasVideo property is true and the video is playing.
+
+    \sa Audio
+*/
+
+/*!
+    \internal
+    \class QDeclarativeVideo
+    \brief The QDeclarativeVideo class provides a video item that you can add to a QDeclarativeView.
+*/
+
+QDeclarativeVideo::QDeclarativeVideo(QDeclarativeItem *parent)
+    : QDeclarativeItem(parent)
+    , m_graphicsItem(0)
+
+{
+    m_graphicsItem = new QGraphicsVideoItem(this);
+    connect(m_graphicsItem, SIGNAL(nativeSizeChanged(QSizeF)),
+            this, SLOT(_q_nativeSizeChanged(QSizeF)));
+
+    setObject(this);
+
+    if (m_mediaService) {
+        connect(m_playerControl, SIGNAL(audioAvailableChanged(bool)),
+                this, SIGNAL(hasAudioChanged()));
+        connect(m_playerControl, SIGNAL(videoAvailableChanged(bool)),
+                this, SIGNAL(hasVideoChanged()));
+
+        m_graphicsItem->setMediaObject(m_mediaObject);
+    }
+}
+
+QDeclarativeVideo::~QDeclarativeVideo()
+{
+    shutdown();
+
+    delete m_graphicsItem;
+}
+
+/*!
+    \qmlproperty url Video::source
+
+    This property holds the source URL of the media.
+*/
+
+/*!
+    \qmlproperty bool Video::playing
+
+    This property holds whether the media is playing.
+
+    Defaults to false, and can be set to true to start playback.
+*/
+
+/*!
+    \qmlproperty bool Video::paused
+
+    This property holds whether the media is paused.
+
+    Defaults to false, and can be set to true to pause playback.
+*/
+
+/*!
+    \qmlsignal Video::onStarted()
+
+    This handler is called when playback is started.
+*/
+
+/*!
+    \qmlsignal Video::onResumed()
+
+    This handler is called when playback is resumed from the paused state.
+*/
+
+/*!
+    \qmlsignal Video::onPaused()
+
+    This handler is called when playback is paused.
+*/
+
+/*!
+    \qmlsignal Video::onStopped()
+
+    This handler is called when playback is stopped.
+*/
+
+/*!
+    \qmlproperty enum Video::status
+
+    This property holds the status of media loading. It can be one of:
+
+    \list
+    \o NoMedia - no media has been set.
+    \o Loading - the media is currently being loaded.
+    \o Loaded - the media has been loaded.
+    \o Buffering - the media is buffering data.
+    \o Stalled - playback has been interrupted while the media is buffering data.
+    \o Buffered - the media has buffered data.
+    \o EndOfMedia - the media has played to the end.
+    \o InvalidMedia - the media cannot be played.
+    \o UnknownStatus - the status of the media is cannot be determined.
+    \endlist
+*/
+
+QDeclarativeVideo::Status QDeclarativeVideo::status() const
+{
+    return Status(m_status);
+}
+
+/*!
+    \qmlsignal Video::onLoaded()
+
+    This handler is called when the media source has been loaded.
+*/
+
+/*!
+    \qmlsignal Video::onBuffering()
+
+    This handler is called when the media starts buffering.
+*/
+
+/*!
+    \qmlsignal Video::onStalled()
+
+    This handler is called when playback has stalled while the media buffers.
+*/
+
+/*!
+    \qmlsignal Video::onBuffered()
+
+    This handler is called when the media has finished buffering.
+*/
+
+/*!
+    \qmlsignal Video::onEndOfMedia()
+
+    This handler is called when playback stops because end of the media has been reached.
+*/
+
+/*!
+    \qmlproperty int Video::duration
+
+    This property holds the duration of the media in milliseconds.
+
+    If the media doesn't have a fixed duration (a live stream for example) this will be 0.
+*/
+
+/*!
+    \qmlproperty int Video::position
+
+    This property holds the current playback position in milliseconds.
+*/
+
+/*!
+    \qmlproperty qreal Video::volume
+
+    This property holds the volume of the audio output, from 0.0 (silent) to 1.0 (maximum volume).
+*/
+
+/*!
+    \qmlproperty bool Video::muted
+
+    This property holds whether the audio output is muted.
+*/
+
+/*!
+    \qmlproperty bool Video::hasAudio
+
+    This property holds whether the media contains audio.
+*/
+
+bool QDeclarativeVideo::hasAudio() const
+{
+    return m_playerControl->isAudioAvailable();
+}
+
+/*!
+    \qmlproperty bool Video::hasVideo
+
+    This property holds whether the media contains video.
+*/
+
+bool QDeclarativeVideo::hasVideo() const
+{
+    return m_playerControl->isVideoAvailable();
+}
+
+/*!
+    \qmlproperty qreal Video::bufferProgress
+
+    This property holds how much of the data buffer is currently filled, from 0.0 (empty) to 1.0
+    (full).
+*/
+
+/*!
+    \qmlproperty bool Video::seekable
+
+    This property holds whether position of the video can be changed.
+*/
+
+/*!
+    \qmlproperty qreal Video::playbackRate
+
+    This property holds the rate at which video is played at as a multiple of the normal rate.
+*/
+
+/*!
+    \qmlproperty enum Video::error
+
+    This property holds the error state of the video.  It can be one of:
+
+    \list
+    \o NoError - there is no current error.
+    \o ResourceError - the video cannot be played due to a problem allocating resources.
+    \o FormatError - the video format is not supported.
+    \o NetworkError - the video cannot be played due to network issues.
+    \o AccessDenied - the video cannot be played due to insufficient permissions.
+    \o ServiceMissing -  the video cannot be played because the media service could not be
+    instantiated.
+    \endlist
+*/
+
+
+QDeclarativeVideo::Error QDeclarativeVideo::error() const
+{
+    return Error(m_error);
+}
+
+/*!
+    \qmlproperty string Video::errorString
+
+    This property holds a string describing the current error condition in more detail.
+*/
+
+/*!
+    \qmlsignal Video::onError(error, errorString)
+
+    This handler is called when an \l {Error}{error} has occurred.  The errorString parameter
+    may contain more detailed information about the error.
+*/
+
+/*!
+    \qmlproperty enum Video::fillMode
+
+    Set this property to define how the video is scaled to fit the target area.
+
+    \list
+    \o Stretch - the video is scaled to fit.
+    \o PreserveAspectFit - the video is scaled uniformly to fit without cropping
+    \o PreserveAspectCrop - the video is scaled uniformly to fill, cropping if necessary
+    \endlist
+
+    The default fill mode is PreserveAspectFit.
+*/
+
+QDeclarativeVideo::FillMode QDeclarativeVideo::fillMode() const
+{
+    return FillMode(m_graphicsItem->aspectRatioMode());
+}
+
+void QDeclarativeVideo::setFillMode(FillMode mode)
+{
+    m_graphicsItem->setAspectRatioMode(Qt::AspectRatioMode(mode));
+}
+
+/*!
+    \qmlmethod Video::play()
+
+    Starts playback of the media.
+
+    Sets the \l playing property to true, and the \l paused property to false.
+*/
+
+void QDeclarativeVideo::play()
+{
+    m_playerControl->play();
+
+    if (m_paused) {
+        m_paused = false;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlmethod Video::pause()
+
+    Pauses playback of the media.
+
+    Sets the \l playing and \l paused properties to true.
+*/
+
+void QDeclarativeVideo::pause()
+{
+    m_playerControl->pause();
+
+    if (!m_paused && m_state == QMediaPlayer::PausedState) {
+        m_paused = true;
+        emit pausedChanged();
+    }
+}
+
+/*!
+    \qmlmethod Video::stop()
+
+    Stops playback of the media.
+
+    Sets the \l playing and \l paused properties to false.
+*/
+
+void QDeclarativeVideo::stop()
+{
+    m_playerControl->stop();
+
+    if (m_paused) {
+        m_paused = false;
+        emit pausedChanged();
+    }
+}
+
+void QDeclarativeVideo::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *)
+{
+}
+
+void QDeclarativeVideo::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+    m_graphicsItem->setSize(newGeometry.size());
+
+    QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
+}
+
+QT_END_NAMESPACE
+
+// ***************************************
+// Documentation for meta-data properties.
+// ***************************************
+
+/*!
+    \qmlproperty variant Video::title
+
+    This property holds the tile of the media.
+
+    \sa {QtMultimedia::Title}
+*/
+
+/*!
+    \qmlproperty variant Video::subTitle
+
+    This property holds the sub-title of the media.
+
+    \sa {QtMultimedia::SubTitle}
+*/
+
+/*!
+    \qmlproperty variant Video::author
+
+    This property holds the author of the media.
+
+    \sa {QtMultimedia::Author}
+*/
+
+/*!
+    \qmlproperty variant Video::comment
+
+    This property holds a user comment about the media.
+
+    \sa {QtMultimedia::Comment}
+*/
+
+/*!
+    \qmlproperty variant Video::description
+
+    This property holds a description of the media.
+
+    \sa {QtMultimedia::Description}
+*/
+
+/*!
+    \qmlproperty variant Video::category
+
+    This property holds the category of the media
+
+    \sa {QtMultimedia::Category}
+*/
+
+/*!
+    \qmlproperty variant Video::genre
+
+    This property holds the genre of the media.
+
+    \sa {QtMultimedia::Genre}
+*/
+
+/*!
+    \qmlproperty variant Video::year
+
+    This property holds the year of release of the media.
+
+    \sa {QtMultimedia::Year}
+*/
+
+/*!
+    \qmlproperty variant Video::date
+
+    This property holds the date of the media.
+
+    \sa {QtMultimedia::Date}
+*/
+
+/*!
+    \qmlproperty variant Video::userRating
+
+    This property holds a user rating of the media in the range of 0 to 100.
+
+    \sa {QtMultimedia::UserRating}
+*/
+
+/*!
+    \qmlproperty variant Video::keywords
+
+    This property holds a list of keywords describing the media.
+
+    \sa {QtMultimedia::Keywords}
+*/
+
+/*!
+    \qmlproperty variant Video::language
+
+    This property holds the language of the media, as an ISO 639-2 code.
+
+    \sa {QtMultimedia::Language}
+*/
+
+/*!
+    \qmlproperty variant Video::publisher
+
+    This property holds the publisher of the media.
+
+    \sa {QtMultimedia::Publisher}
+*/
+
+/*!
+    \qmlproperty variant Video::copyright
+
+    This property holds the media's copyright notice.
+
+    \sa {QtMultimedia::Copyright}
+*/
+
+/*!
+    \qmlproperty variant Video::parentalRating
+
+    This property holds the parental rating of the media.
+
+    \sa {QtMultimedia::ParentalRating}
+*/
+
+/*!
+    \qmlproperty variant Video::ratingOrganisation
+
+    This property holds the name of the rating organisation responsible for the
+    parental rating of the media.
+
+    \sa {QtMultimedia::RatingOrganisation}
+*/
+
+/*!
+    \qmlproperty variant Video::size
+
+    This property property holds the size of the media in bytes.
+
+    \sa {QtMultimedia::Size}
+*/
+
+/*!
+    \qmlproperty variant Video::mediaType
+
+    This property holds the type of the media.
+
+    \sa {QtMultimedia::MediaType}
+*/
+
+/*!
+    \qmlproperty variant Video::audioBitRate
+
+    This property holds the bit rate of the media's audio stream ni bits per
+    second.
+
+    \sa {QtMultimedia::AudioBitRate}
+*/
+
+/*!
+    \qmlproperty variant Video::audioCodec
+
+    This property holds the encoding of the media audio stream.
+
+    \sa {QtMultimedia::AudioCodec}
+*/
+
+/*!
+    \qmlproperty variant Video::averageLevel
+
+    This property holds the average volume level of the media.
+
+    \sa {QtMultimedia::AverageLevel}
+*/
+
+/*!
+    \qmlproperty variant Video::channelCount
+
+    This property holds the number of channels in the media's audio stream.
+
+    \sa {QtMultimedia::ChannelCount}
+*/
+
+/*!
+    \qmlproperty variant Video::peakValue
+
+    This property holds the peak volume of media's audio stream.
+
+    \sa {QtMultimedia::PeakValue}
+*/
+
+/*!
+    \qmlproperty variant Video::sampleRate
+
+    This property holds the sample rate of the media's audio stream in hertz.
+
+    \sa {QtMultimedia::SampleRate}
+*/
+
+/*!
+    \qmlproperty variant Video::albumTitle
+
+    This property holds the title of the album the media belongs to.
+
+    \sa {QtMultimedia::AlbumTitle}
+*/
+
+/*!
+    \qmlproperty variant Video::albumArtist
+
+    This property holds the name of the principal artist of the album the media
+    belongs to.
+
+    \sa {QtMultimedia::AlbumArtist}
+*/
+
+/*!
+    \qmlproperty variant Video::contributingArtist
+
+    This property holds the names of artists contributing to the media.
+
+    \sa {QtMultimedia::ContributingArtist}
+*/
+
+/*!
+    \qmlproperty variant Video::composer
+
+    This property holds the composer of the media.
+
+    \sa {QtMultimedia::Composer}
+*/
+
+/*!
+    \qmlproperty variant Video::conductor
+
+    This property holds the conductor of the media.
+
+    \sa {QtMultimedia::Conductor}
+*/
+
+/*!
+    \qmlproperty variant Video::lyrics
+
+    This property holds the lyrics to the media.
+
+    \sa {QtMultimedia::Lyrics}
+*/
+
+/*!
+    \qmlproperty variant Video::mood
+
+    This property holds the mood of the media.
+
+    \sa {QtMultimedia::Mood}
+*/
+
+/*!
+    \qmlproperty variant Video::trackNumber
+
+    This property holds the track number of the media.
+
+    \sa {QtMultimedia::TrackNumber}
+*/
+
+/*!
+    \qmlproperty variant Video::trackCount
+
+    This property holds the number of track on the album containing the media.
+
+    \sa {QtMultimedia::TrackNumber}
+*/
+
+/*!
+    \qmlproperty variant Video::coverArtUrlSmall
+
+    This property holds the URL of a small cover art image.
+
+    \sa {QtMultimedia::CoverArtUrlSmall}
+*/
+
+/*!
+    \qmlproperty variant Video::coverArtUrlLarge
+
+    This property holds the URL of a large cover art image.
+
+    \sa {QtMultimedia::CoverArtUrlLarge}
+*/
+
+/*!
+    \qmlproperty variant Video::resolution
+
+    This property holds the dimension of an image or video.
+
+    \sa {QtMultimedia::Resolution}
+*/
+
+/*!
+    \qmlproperty variant Video::pixelAspectRatio
+
+    This property holds the pixel aspect ratio of an image or video.
+
+    \sa {QtMultimedia::PixelAspectRatio}
+*/
+
+/*!
+    \qmlproperty variant Video::videoFrameRate
+
+    This property holds the frame rate of the media's video stream.
+
+    \sa {QtMultimedia::VideoFrameRate}
+*/
+
+/*!
+    \qmlproperty variant Video::videoBitRate
+
+    This property holds the bit rate of the media's video stream in bits per
+    second.
+
+    \sa {QtMultimedia::VideoBitRate}
+*/
+
+/*!
+    \qmlproperty variant Video::videoCodec
+
+    This property holds the encoding of the media's video stream.
+
+    \sa {QtMultimedia::VideoCodec}
+*/
+
+/*!
+    \qmlproperty variant Video::posterUrl
+
+    This property holds the URL of a poster image.
+
+    \sa {QtMultimedia::PosterUrl}
+*/
+
+/*!
+    \qmlproperty variant Video::chapterNumber
+
+    This property holds the chapter number of the media.
+
+    \sa {QtMultimedia::ChapterNumber}
+*/
+
+/*!
+    \qmlproperty variant Video::director
+
+    This property holds the director of the media.
+
+    \sa {QtMultimedia::Director}
+*/
+
+/*!
+    \qmlproperty variant Video::leadPerformer
+
+    This property holds the lead performer in the media.
+
+    \sa {QtMultimedia::LeadPerformer}
+*/
+
+/*!
+    \qmlproperty variant Video::writer
+
+    This property holds the writer of the media.
+
+    \sa {QtMultimedia::Writer}
+*/
+
+// The remaining properties are related to photos, and are technically
+// available but will certainly never have values.
+#ifndef Q_QDOC
+
+/*!
+    \qmlproperty variant Video::cameraManufacturer
+
+    \sa {QtMultimedia::CameraManufacturer}
+*/
+
+/*!
+    \qmlproperty variant Video::cameraModel
+
+    \sa {QtMultimedia::CameraModel}
+*/
+
+/*!
+    \qmlproperty variant Video::event
+
+    \sa {QtMultimedia::Event}
+*/
+
+/*!
+    \qmlproperty variant Video::subject
+
+    \sa {QtMultimedia::Subject}
+*/
+
+/*!
+    \qmlproperty variant Video::orientation
+
+    \sa {QtMultimedia::Orientation}
+*/
+
+/*!
+    \qmlproperty variant Video::exposureTime
+
+    \sa {QtMultimedia::ExposureTime}
+*/
+
+/*!
+    \qmlproperty variant Video::fNumber
+
+    \sa {QtMultimedia::FNumber}
+*/
+
+/*!
+    \qmlproperty variant Video::exposureProgram
+
+    \sa {QtMultimedia::ExposureProgram}
+*/
+
+/*!
+    \qmlproperty variant Video::isoSpeedRatings
+
+    \sa {QtMultimedia::ISOSpeedRatings}
+*/
+
+/*!
+    \qmlproperty variant Video::exposureBiasValue
+
+    \sa {QtMultimedia::ExposureBiasValue}
+*/
+
+/*!
+    \qmlproperty variant Video::dateTimeDigitized
+
+    \sa {QtMultimedia::DateTimeDigitized}
+*/
+
+/*!
+    \qmlproperty variant Video::subjectDistance
+
+    \sa {QtMultimedia::SubjectDistance}
+*/
+
+/*!
+    \qmlproperty variant Video::meteringMode
+
+    \sa {QtMultimedia::MeteringMode}
+*/
+
+/*!
+    \qmlproperty variant Video::lightSource
+
+    \sa {QtMultimedia::LightSource}
+*/
+
+/*!
+    \qmlproperty variant Video::flash
+
+    \sa {QtMultimedia::Flash}
+*/
+
+/*!
+    \qmlproperty variant Video::focalLength
+
+    \sa {QtMultimedia::FocalLength}
+*/
+
+/*!
+    \qmlproperty variant Video::exposureMode
+
+    \sa {QtMultimedia::ExposureMode}
+*/
+
+/*!
+    \qmlproperty variant Video::whiteBalance
+
+    \sa {QtMultimedia::WhiteBalance}
+*/
+
+/*!
+    \qmlproperty variant Video::DigitalZoomRatio
+
+    \sa {QtMultimedia::DigitalZoomRatio}
+*/
+
+/*!
+    \qmlproperty variant Video::focalLengthIn35mmFilm
+
+    \sa {QtMultimedia::FocalLengthIn35mmFile}
+*/
+
+/*!
+    \qmlproperty variant Video::sceneCaptureType
+
+    \sa {QtMultimedia::SceneCaptureType}
+*/
+
+/*!
+    \qmlproperty variant Video::gainControl
+
+    \sa {QtMultimedia::GainControl}
+*/
+
+/*!
+    \qmlproperty variant Video::contrast
+
+    \sa {QtMultimedia::contrast}
+*/
+
+/*!
+    \qmlproperty variant Video::saturation
+
+    \sa {QtMultimedia::Saturation}
+*/
+
+/*!
+    \qmlproperty variant Video::sharpness
+
+    \sa {QtMultimedia::Sharpness}
+*/
+
+/*!
+    \qmlproperty variant Video::deviceSettingDescription
+
+    \sa {QtMultimedia::DeviceSettingDescription}
+*/
+
+#endif
+
+#include "moc_qdeclarativevideo_p.cpp"
diff --git a/src/imports/multimedia/qdeclarativevideo_p.h b/src/imports/multimedia/qdeclarativevideo_p.h
new file mode 100644
index 0000000..fb13519
--- /dev/null
+++ b/src/imports/multimedia/qdeclarativevideo_p.h
@@ -0,0 +1,204 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVEVIDEO_H
+#define QDECLARATIVEVIDEO_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qdeclarativemediabase_p.h"
+
+#include <QtMultimedia/qgraphicsvideoitem.h>
+
+#include <QtCore/qbasictimer.h>
+#include <QtDeclarative/qdeclarativeitem.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QTimerEvent;
+class QVideoSurfaceFormat;
+
+
+class QDeclarativeVideo : public QDeclarativeItem, public QDeclarativeMediaBase
+{
+    Q_OBJECT
+    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
+    Q_PROPERTY(bool playing READ isPlaying WRITE setPlaying NOTIFY playingChanged)
+    Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
+    Q_PROPERTY(Status status READ status NOTIFY statusChanged)
+    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
+    Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
+    Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged)
+    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
+    Q_PROPERTY(bool hasAudio READ hasAudio NOTIFY hasAudioChanged)
+    Q_PROPERTY(bool hasVideo READ hasVideo NOTIFY hasVideoChanged)
+    Q_PROPERTY(int bufferProgress READ bufferProgress NOTIFY bufferProgressChanged)
+    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
+    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
+    Q_PROPERTY(Error error READ error NOTIFY errorChanged)
+    Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
+    Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode)
+    Q_ENUMS(FillMode)
+    Q_ENUMS(Status)
+    Q_ENUMS(Error)
+public:
+    enum FillMode
+    {
+        Stretch            = Qt::IgnoreAspectRatio,
+        PreserveAspectFit  = Qt::KeepAspectRatio,
+        PreserveAspectCrop = Qt::KeepAspectRatioByExpanding
+    };
+
+    enum Status
+    {
+        UnknownStatus = QMediaPlayer::UnknownMediaStatus,
+        NoMedia       = QMediaPlayer::NoMedia,
+        Loading       = QMediaPlayer::LoadingMedia,
+        Loaded        = QMediaPlayer::LoadedMedia,
+        Stalled       = QMediaPlayer::StalledMedia,
+        Buffering     = QMediaPlayer::BufferingMedia,
+        Buffered      = QMediaPlayer::BufferedMedia,
+        EndOfMedia    = QMediaPlayer::EndOfMedia,
+        InvalidMedia  = QMediaPlayer::InvalidMedia
+    };
+
+    enum Error
+    {
+        NoError        = QMediaPlayer::NoError,
+        ResourceError  = QMediaPlayer::ResourceError,
+        FormatError    = QMediaPlayer::FormatError,
+        NetworkError   = QMediaPlayer::NetworkError,
+        AccessDenied   = QMediaPlayer::AccessDeniedError,
+        ServiceMissing = QMediaPlayer::ServiceMissingError
+    };
+
+    QDeclarativeVideo(QDeclarativeItem *parent = 0);
+    ~QDeclarativeVideo();
+
+    bool hasAudio() const;
+    bool hasVideo() const;
+
+    FillMode fillMode() const;
+    void setFillMode(FillMode mode);
+
+    Status status() const;
+    Error error() const;
+
+    void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+
+public Q_SLOTS:
+    void play();
+    void pause();
+    void stop();
+
+Q_SIGNALS:
+    void sourceChanged();
+
+    void playingChanged();
+    void pausedChanged();
+
+    void started();
+    void resumed();
+    void paused();
+    void stopped();
+
+    void statusChanged();
+
+    void loaded();
+    void buffering();
+    void stalled();
+    void buffered();
+    void endOfMedia();
+
+    void durationChanged();
+    void positionChanged();
+
+    void volumeChanged();
+    void mutedChanged();
+    void hasAudioChanged();
+    void hasVideoChanged();
+
+    void bufferProgressChanged();
+
+    void seekableChanged();
+    void playbackRateChanged();
+
+    void errorChanged();
+    void error(QDeclarativeVideo::Error error, const QString &errorString);
+
+protected:
+    void geometryChanged(const QRectF &geometry, const QRectF &);
+
+private Q_SLOTS:
+    void _q_nativeSizeChanged(const QSizeF &size);
+    void _q_error(int, const QString &);
+
+private:
+    Q_DISABLE_COPY(QDeclarativeVideo)
+
+    QGraphicsVideoItem *m_graphicsItem;
+
+    Q_PRIVATE_SLOT(mediaBase(), void _q_stateChanged(QMediaPlayer::State))
+    Q_PRIVATE_SLOT(mediaBase(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
+    Q_PRIVATE_SLOT(mediaBase(), void _q_metaDataChanged())
+
+    inline QDeclarativeMediaBase *mediaBase() { return this; }
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeVideo))
+
+QT_END_HEADER
+
+#endif
diff --git a/src/imports/multimedia/qmetadatacontrolmetaobject.cpp b/src/imports/multimedia/qmetadatacontrolmetaobject.cpp
new file mode 100644
index 0000000..e90cbd6
--- /dev/null
+++ b/src/imports/multimedia/qmetadatacontrolmetaobject.cpp
@@ -0,0 +1,362 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qmetadatacontrolmetaobject_p.h"
+#include <QtMultimedia/qmetadatacontrol.h>
+
+
+QT_BEGIN_NAMESPACE
+
+// copied from qmetaobject.cpp
+// do not touch without touching the moc as well
+enum PropertyFlags  {
+    Invalid = 0x00000000,
+    Readable = 0x00000001,
+    Writable = 0x00000002,
+    Resettable = 0x00000004,
+    EnumOrFlag = 0x00000008,
+    StdCppSet = 0x00000100,
+//    Override = 0x00000200,
+    Designable = 0x00001000,
+    ResolveDesignable = 0x00002000,
+    Scriptable = 0x00004000,
+    ResolveScriptable = 0x00008000,
+    Stored = 0x00010000,
+    ResolveStored = 0x00020000,
+    Editable = 0x00040000,
+    ResolveEditable = 0x00080000,
+    User = 0x00100000,
+    ResolveUser = 0x00200000,
+    Notify = 0x00400000,
+    Dynamic = 0x00800000
+};
+
+enum MethodFlags  {
+    AccessPrivate = 0x00,
+    AccessProtected = 0x01,
+    AccessPublic = 0x02,
+    AccessMask = 0x03, //mask
+
+    MethodMethod = 0x00,
+    MethodSignal = 0x04,
+    MethodSlot = 0x08,
+    MethodConstructor = 0x0c,
+    MethodTypeMask = 0x0c,
+
+    MethodCompatibility = 0x10,
+    MethodCloned = 0x20,
+    MethodScriptable = 0x40
+};
+
+struct QMetaObjectPrivate
+{
+    int revision;
+    int className;
+    int classInfoCount, classInfoData;
+    int methodCount, methodData;
+    int propertyCount, propertyData;
+    int enumeratorCount, enumeratorData;
+    int constructorCount, constructorData;
+    int flags;
+};
+
+static inline const QMetaObjectPrivate *priv(const uint* m_data)
+{ return reinterpret_cast<const QMetaObjectPrivate*>(m_data); }
+// end of copied lines from qmetaobject.cpp
+
+namespace
+{
+    struct MetaDataKey
+    {
+        QtMultimedia::MetaData key;
+        const char *name;
+    };
+
+    const MetaDataKey qt_metaDataKeys[] =
+    {
+        { QtMultimedia::Title, "title" },
+        { QtMultimedia::SubTitle, "subTitle" },
+        { QtMultimedia::Author, "author" },
+        { QtMultimedia::Comment, "comment" },
+        { QtMultimedia::Description, "description" },
+        { QtMultimedia::Category, "category" },
+        { QtMultimedia::Genre, "genre" },
+        { QtMultimedia::Year, "year" },
+        { QtMultimedia::Date, "date" },
+        { QtMultimedia::UserRating, "userRating" },
+        { QtMultimedia::Keywords, "keywords" },
+        { QtMultimedia::Language, "language" },
+        { QtMultimedia::Publisher, "publisher" },
+        { QtMultimedia::Copyright, "copyright" },
+        { QtMultimedia::ParentalRating, "parentalRating" },
+        { QtMultimedia::RatingOrganisation, "ratingOrganisation" },
+
+        // Media
+        { QtMultimedia::Size, "size" },
+        { QtMultimedia::MediaType, "mediaType" },
+//        { QtMultimedia::Duration, "duration" },
+
+        // Audio
+        { QtMultimedia::AudioBitRate, "audioBitRate" },
+        { QtMultimedia::AudioCodec, "audioCodec" },
+        { QtMultimedia::AverageLevel, "averageLevel" },
+        { QtMultimedia::ChannelCount, "channelCount" },
+        { QtMultimedia::PeakValue, "peakValue" },
+        { QtMultimedia::SampleRate, "sampleRate" },
+
+        // Music
+        { QtMultimedia::AlbumTitle, "albumTitle" },
+        { QtMultimedia::AlbumArtist, "albumArtist" },
+        { QtMultimedia::ContributingArtist, "contributingArtist" },
+        { QtMultimedia::Composer, "composer" },
+        { QtMultimedia::Conductor, "conductor" },
+        { QtMultimedia::Lyrics, "lyrics" },
+        { QtMultimedia::Mood, "mood" },
+        { QtMultimedia::TrackNumber, "trackNumber" },
+        { QtMultimedia::TrackCount, "trackCount" },
+
+        { QtMultimedia::CoverArtUrlSmall, "coverArtUrlSmall" },
+        { QtMultimedia::CoverArtUrlLarge, "coverArtUrlLarge" },
+
+        // Image/Video
+        { QtMultimedia::Resolution, "resolution" },
+        { QtMultimedia::PixelAspectRatio, "pixelAspectRatio" },
+
+        // Video
+        { QtMultimedia::VideoFrameRate, "videoFrameRate" },
+        { QtMultimedia::VideoBitRate, "videoBitRate" },
+        { QtMultimedia::VideoCodec, "videoCodec" },
+
+        { QtMultimedia::PosterUrl, "posterUrl" },
+
+        // Movie
+        { QtMultimedia::ChapterNumber, "chapterNumber" },
+        { QtMultimedia::Director, "director" },
+        { QtMultimedia::LeadPerformer, "leadPerformer" },
+        { QtMultimedia::Writer, "writer" },
+
+        // Photos
+        { QtMultimedia::CameraManufacturer, "cameraManufacturer" },
+        { QtMultimedia::CameraModel, "cameraModel" },
+        { QtMultimedia::Event, "event" },
+        { QtMultimedia::Subject, "subject" },
+        { QtMultimedia::Orientation, "orientation" },
+        { QtMultimedia::ExposureTime, "exposureTime" },
+        { QtMultimedia::FNumber, "fNumber" },
+        { QtMultimedia::ExposureProgram, "exposureProgram" },
+        { QtMultimedia::ISOSpeedRatings, "isoSpeedRatings" },
+        { QtMultimedia::ExposureBiasValue, "exposureBiasValue" },
+        { QtMultimedia::DateTimeOriginal, "dateTimeOriginal" },
+        { QtMultimedia::DateTimeDigitized, "dateTimeDigitized" },
+        { QtMultimedia::SubjectDistance, "subjectDistance" },
+        { QtMultimedia::MeteringMode, "meteringMode" },
+        { QtMultimedia::LightSource, "lightSource" },
+        { QtMultimedia::Flash, "flash" },
+        { QtMultimedia::FocalLength, "focalLength" },
+        { QtMultimedia::ExposureMode, "exposureMode" },
+        { QtMultimedia::WhiteBalance, "whiteBalance" },
+        { QtMultimedia::DigitalZoomRatio, "digitalZoomRatio" },
+        { QtMultimedia::FocalLengthIn35mmFilm, "focalLengthIn35mmFilm" },
+        { QtMultimedia::SceneCaptureType, "sceneCaptureType" },
+        { QtMultimedia::GainControl, "gainControl" },
+        { QtMultimedia::Contrast, "contrast" },
+        { QtMultimedia::Saturation, "saturation" },
+        { QtMultimedia::Sharpness, "sharpness" },
+        { QtMultimedia::DeviceSettingDescription, "deviceSettingDescription" }
+    };
+
+    class QMetaDataControlObject : public QObject
+    {
+    public:
+        inline QObjectData *data() { return d_ptr.data(); }
+    };
+}
+
+QMetaDataControlMetaObject::QMetaDataControlMetaObject(QMetaDataControl *control, QObject *object)
+    : m_control(control)
+    , m_object(object)
+    , m_string(0)
+    , m_data(0)
+    , m_propertyOffset(0)
+    , m_signalOffset(0)
+{
+    const QMetaObject *superClass = m_object->metaObject();
+
+    const int propertyCount =  sizeof(qt_metaDataKeys) / sizeof(MetaDataKey);
+    const int dataSize = sizeof(uint)
+            * (13                   // QMetaObjectPrivate members.
+            + 5                     // 5 members per signal.
+            + 4 * propertyCount     // 3 members per property + 1 notify signal per property.
+            + 1);                   // Terminating value.
+
+    m_data = reinterpret_cast<uint *>(qMalloc(dataSize));
+
+    QMetaObjectPrivate *pMeta = reinterpret_cast<QMetaObjectPrivate *>(m_data);
+
+    pMeta->revision = 3;
+    pMeta->className = 0;
+    pMeta->classInfoCount = 0;
+    pMeta->classInfoData = 0;
+    pMeta->methodCount = 1;
+    pMeta->methodData = 13;
+    pMeta->propertyCount = propertyCount;
+    pMeta->propertyData = 18;
+    pMeta->enumeratorCount = 0;
+    pMeta->enumeratorData = 0;
+    pMeta->constructorCount = 0;
+    pMeta->constructorData = 0;
+    pMeta->flags = 0x01;    // Dynamic meta object flag.
+
+    const int classNameSize = qstrlen(superClass->className()) + 1;
+
+    int stringIndex = classNameSize + 1;
+
+    // __metaDataChanged() signal.
+    static const char *changeSignal = "__metaDataChanged()";
+    const int changeSignalSize = qstrlen(changeSignal) + 1;
+
+    m_data[13] = stringIndex;                             // Signature.
+    m_data[14] = classNameSize;                           // Parameters.
+    m_data[15] = classNameSize;                           // Type.
+    m_data[16] = classNameSize;                           // Tag.
+    m_data[17] = MethodSignal | AccessProtected;          // Flags.
+
+    stringIndex += changeSignalSize;
+
+    const char *qvariantName = "QVariant";
+    const int qvariantSize = qstrlen(qvariantName) + 1;
+    const int qvariantIndex = stringIndex;
+
+    stringIndex += qvariantSize;
+
+    // Properties.
+    for (int i = 0; i < propertyCount; ++i) {       
+        m_data[18 + 3 * i] = stringIndex;                                       // Name.
+        m_data[19 + 3 * i] = qvariantIndex;                                     // Type.
+        m_data[20 + 3 * i] 
+                = Readable | Writable | Notify | Dynamic | (0xffffffff << 24);  // Flags.
+        m_data[18 + propertyCount * 3 + i] = 0;                                 // Notify signal.
+
+        stringIndex += qstrlen(qt_metaDataKeys[i].name) + 1;
+    }
+
+    // Terminating value.
+    m_data[18 + propertyCount * 4] = 0;
+
+    // Build string.
+    m_string = reinterpret_cast<char *>(qMalloc(stringIndex + 1));
+
+    // Class name.
+    qMemCopy(m_string, superClass->className(), classNameSize);
+
+    stringIndex = classNameSize;
+
+    // Null m_string.
+    m_string[stringIndex] = '\0';
+    stringIndex += 1;
+
+    // __metaDataChanged() signal.
+    qMemCopy(m_string + stringIndex, changeSignal, changeSignalSize);
+    stringIndex += changeSignalSize;
+
+    qMemCopy(m_string + stringIndex, qvariantName, qvariantSize);
+    stringIndex += qvariantSize;
+
+    // Properties.
+    for (int i = 0; i < propertyCount; ++i) {
+        const int propertyNameSize = qstrlen(qt_metaDataKeys[i].name) + 1;
+
+        qMemCopy(m_string + stringIndex, qt_metaDataKeys[i].name, propertyNameSize);
+        stringIndex += propertyNameSize;
+    }
+
+    // Terminating character.
+    m_string[stringIndex] = '\0';
+
+    d.superdata = superClass;
+    d.stringdata = m_string;
+    d.data = m_data;
+    d.extradata = 0;
+
+    static_cast<QMetaDataControlObject *>(m_object)->data()->metaObject = this;
+
+    m_propertyOffset = propertyOffset();
+    m_signalOffset = methodOffset();
+}
+
+QMetaDataControlMetaObject::~QMetaDataControlMetaObject()
+{
+    static_cast<QMetaDataControlObject *>(m_object)->data()->metaObject = 0;
+
+    qFree(m_data);
+    qFree(m_string);
+}
+
+int QMetaDataControlMetaObject::metaCall(QMetaObject::Call c, int id, void **a)
+{
+    if (c == QMetaObject::ReadProperty && id >= m_propertyOffset) {
+        int propId = id - m_propertyOffset;
+
+        *reinterpret_cast<QVariant *>(a[0]) = m_control->metaData(qt_metaDataKeys[propId].key);
+
+        return -1;
+    } else if (c == QMetaObject::WriteProperty && id >= m_propertyOffset) {
+        int propId = id - m_propertyOffset;
+
+        m_control->setMetaData(qt_metaDataKeys[propId].key, *reinterpret_cast<QVariant *>(a[0]));
+
+        return -1;
+    } else {
+        return m_object->qt_metacall(c, id, a);
+    }
+}
+
+int QMetaDataControlMetaObject::createProperty(const char *, const char *)
+{
+    return -1;
+}
+
+void QMetaDataControlMetaObject::metaDataChanged()
+{
+    activate(m_object, m_signalOffset, 0);
+}
+
+QT_END_NAMESPACE
diff --git a/src/imports/multimedia/qmetadatacontrolmetaobject_p.h b/src/imports/multimedia/qmetadatacontrolmetaobject_p.h
new file mode 100644
index 0000000..c381f2d
--- /dev/null
+++ b/src/imports/multimedia/qmetadatacontrolmetaobject_p.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMETADATACONTROLMETAOBJECT_P_H
+#define QMETADATACONTROLMETAOJBECT_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qmetaobject.h>
+#include <QtMultimedia/qtmedianamespace.h>
+
+#include <QtCore/private/qobject_p.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QMetaDataControl;
+
+class QMetaDataControlMetaObject : public QAbstractDynamicMetaObject
+{
+public:
+    QMetaDataControlMetaObject(QMetaDataControl *control, QObject *object);
+    ~QMetaDataControlMetaObject();
+
+    int metaCall(QMetaObject::Call call, int _id, void **arguments);
+    int createProperty(const char *, const char *);
+
+    void metaDataChanged();
+
+private:
+    QMetaDataControl *m_control;
+    QObject *m_object;
+    char *m_string;
+    uint *m_data;
+
+    int m_propertyOffset;
+    int m_signalOffset;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio.cpp b/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio.cpp
deleted file mode 100644
index df2888c..0000000
--- a/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativeaudio_p.h"
-
-#include <QtMultimedia/qmediaplayercontrol.h>
-
-QT_BEGIN_NAMESPACE
-
-
-/*!
-    \qmlclass Audio QDeclarativeAudio
-    \since 4.7
-    \brief The Audio element allows you to add audio playback to a scene.
-
-    \qml
-    Audio { source: "audio/song.mp3" }
-    \endqml
-
-    \sa Video
-*/
-
-/*!
-    \internal
-    \class QDeclarativeAudio
-    \brief The QDeclarativeAudio class provides an audio item that you can add to a QDeclarativeView.
-*/
-
-void QDeclarativeAudio::_q_error(int errorCode, const QString &errorString)
-{
-    m_error = QMediaPlayer::Error(errorCode);
-    m_errorString = errorString;
-
-    emit error(Error(errorCode), errorString);
-    emit errorChanged();
-}
-
-
-QDeclarativeAudio::QDeclarativeAudio(QObject *parent)
-    : QObject(parent)
-{
-    setObject(this);
-}
-
-QDeclarativeAudio::~QDeclarativeAudio()
-{
-    shutdown();
-}
-
-/*!
-    \qmlmethod Audio::play()
-
-    Starts playback of the media.
-
-    Sets the \l playing property to true, and the \l paused property to false.
-*/
-
-void QDeclarativeAudio::play()
-{    
-    m_playerControl->play();
-
-    if (m_paused) {
-        m_paused = false;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlmethod Audio::pause()
-
-    Pauses playback of the media.
-
-    Sets the \l playing and \l paused properties to true.
-*/
-
-void QDeclarativeAudio::pause()
-{
-    m_playerControl->pause();
-
-    if (!m_paused && m_state == QMediaPlayer::PausedState) {
-        m_paused = true;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlmethod Audio::stop()
-
-    Stops playback of the media.
-
-    Sets the \l playing and \l paused properties to false.
-*/
-
-void QDeclarativeAudio::stop()
-{
-    m_playerControl->stop();
-
-    if (m_paused) {
-        m_paused = false;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlproperty url Audio::source
-
-    This property holds the source URL of the media.
-*/
-
-/*!
-    \qmlproperty bool Audio::playing
-
-    This property holds whether the media is playing.
-
-    Defaults to false, and can be set to true to start playback.
-*/
-
-/*!
-    \qmlproperty bool Audio::paused
-
-    This property holds whether the media is paused.
-
-    Defaults to false, and can be set to true to pause playback.
-*/
-
-/*!
-    \qmlsignal Audio::onStarted()
-
-    This handler is called when playback is started.
-*/
-
-/*!
-    \qmlsignal Audio::onResumed()
-
-    This handler is called when playback is resumed from the paused state.
-*/
-
-/*!
-    \qmlsignal Audio::onPaused()
-
-    This handler is called when playback is paused.
-*/
-
-/*!
-    \qmlsignal Audio::onStopped()
-
-    This handler is called when playback is stopped.
-*/
-
-/*!
-    \qmlproperty enum Audio::status
-
-    This property holds the status of media loading. It can be one of:
-
-    \list
-    \o NoMedia - no media has been set.
-    \o Loading - the media is currently being loaded.
-    \o Loaded - the media has been loaded.
-    \o Buffering - the media is buffering data.
-    \o Stalled - playback has been interrupted while the media is buffering data.
-    \o Buffered - the media has buffered data.
-    \o EndOfMedia - the media has played to the end.
-    \o InvalidMedia - the media cannot be played.
-    \o UnknownStatus - the status of the media is unknown.
-    \endlist
-*/
-
-QDeclarativeAudio::Status QDeclarativeAudio::status() const
-{
-    return Status(m_status);
-}
-
-/*!
-    \qmlsignal Audio::onLoaded()
-
-    This handler is called when the media source has been loaded.
-*/
-
-/*!
-    \qmlsignal Audio::onBuffering()
-
-    This handler is called when the media  starts buffering.
-*/
-
-/*!
-    \qmlsignal Audio::onStalled()
-
-    This handler is called when playback has stalled while the media buffers.
-*/
-
-/*!
-    \qmlsignal Audio::onBuffered()
-
-    This handler is called when the media has finished buffering.
-*/
-
-/*!
-    \qmlsignal Audio::onEndOfMedia()
-
-    This handler is called when playback stops because end of the media has been reached.
-*/
-/*!
-    \qmlproperty int Audio::duration
-
-    This property holds the duration of the media in milliseconds.
-
-    If the media doesn't have a fixed duration (a live stream for example) this will be 0.
-*/
-
-/*!
-    \qmlproperty int Audio::position
-
-    This property holds the current playback position in milliseconds.
-
-    If the \l seekable property is true, this property can be set to seek to a new position.
-*/
-
-/*!
-    \qmlproperty qreal Audio::volume
-
-    This property holds the volume of the audio output, from 0.0 (silent) to 1.0 (maximum volume).
-*/
-
-/*!
-    \qmlproperty bool Audio::muted
-
-    This property holds whether the audio output is muted.
-*/
-
-/*!
-    \qmlproperty qreal Audio::bufferProgress
-
-    This property holds how much of the data buffer is currently filled, from 0.0 (empty) to 1.0
-    (full).
-*/
-
-/*!
-    \qmlproperty bool Audio::seekable
-
-    This property holds whether position of the audio can be changed.
-
-    If true; setting a \l position value will cause playback to seek to the new position.
-*/
-
-/*!
-    \qmlproperty qreal Audio::playbackRate
-
-    This property holds the rate at which audio is played at as a multiple of the normal rate.
-*/
-
-/*!
-    \qmlproperty enum Audio::error
-
-    This property holds the error state of the audio.  It can be one of:
-
-    \list
-    \o NoError - there is no current error.
-    \o ResourceError - the audio cannot be played due to a problem allocating resources.
-    \o FormatError - the audio format is not supported.
-    \o NetworkError - the audio cannot be played due to network issues.
-    \o AccessDenied - the audio cannot be played due to insufficient permissions.
-    \o ServiceMissing -  the audio cannot be played because the media service could not be
-    instantiated.
-    \endlist
-*/
-
-QDeclarativeAudio::Error QDeclarativeAudio::error() const
-{
-    return Error(m_error);
-}
-
-/*!
-    \qmlproperty string Audio::errorString
-
-    This property holds a string describing the current error condition in more detail.
-*/
-
-/*!
-    \qmlsignal Audio::onError(error, errorString)
-
-    This handler is called when an \l {Error}{error} has occurred.  The errorString parameter
-    may contain more detailed information about the error.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qdeclarativeaudio_p.cpp"
-
-
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h b/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h
deleted file mode 100644
index 9881dbc..0000000
--- a/src/plugins/qdeclarativemodules/multimedia/qdeclarativeaudio_p.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEAUDIO_P_H
-#define QDECLARATIVEAUDIO_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qdeclarativemediabase_p.h"
-
-#include <QtCore/qbasictimer.h>
-#include <QtDeclarative/qdeclarativeitem.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QTimerEvent;
-
-class QDeclarativeAudio : public QObject, public QDeclarativeMediaBase, public QDeclarativeParserStatus
-{
-    Q_OBJECT
-    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
-    Q_PROPERTY(bool playing READ isPlaying WRITE setPlaying NOTIFY playingChanged)
-    Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
-    Q_PROPERTY(Status status READ status NOTIFY statusChanged)
-    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
-    Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
-    Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged)
-    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
-    Q_PROPERTY(int bufferProgress READ bufferProgress NOTIFY bufferProgressChanged)
-    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
-    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
-    Q_PROPERTY(Error error READ error NOTIFY errorChanged)
-    Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
-    Q_ENUMS(Status)
-    Q_ENUMS(Error)
-    Q_INTERFACES(QDeclarativeParserStatus)
-public:
-    enum Status
-    {
-        UnknownStatus = QMediaPlayer::UnknownMediaStatus,
-        NoMedia       = QMediaPlayer::NoMedia,
-        Loading       = QMediaPlayer::LoadingMedia,
-        Loaded        = QMediaPlayer::LoadedMedia,
-        Stalled       = QMediaPlayer::StalledMedia,
-        Buffering     = QMediaPlayer::BufferingMedia,
-        Buffered      = QMediaPlayer::BufferedMedia,
-        EndOfMedia    = QMediaPlayer::EndOfMedia,
-        InvalidMedia  = QMediaPlayer::InvalidMedia
-    };
-
-    enum Error
-    {
-        NoError        = QMediaPlayer::NoError,
-        ResourceError  = QMediaPlayer::ResourceError,
-        FormatError    = QMediaPlayer::FormatError,
-        NetworkError   = QMediaPlayer::NetworkError,
-        AccessDenied   = QMediaPlayer::AccessDeniedError,
-        ServiceMissing = QMediaPlayer::ServiceMissingError
-    };
-
-    QDeclarativeAudio(QObject *parent = 0);
-    ~QDeclarativeAudio();
-
-    Status status() const;
-    Error error() const;
-
-public Q_SLOTS:
-    void play();
-    void pause();
-    void stop();
-
-Q_SIGNALS:
-    void sourceChanged();
-
-    void playingChanged();
-    void pausedChanged();
-
-    void started();
-    void resumed();
-    void paused();
-    void stopped();
-
-    void statusChanged();
-
-    void loaded();
-    void buffering();
-    void stalled();
-    void buffered();
-    void endOfMedia();
-
-    void durationChanged();
-    void positionChanged();
-
-    void volumeChanged();
-    void mutedChanged();
-
-    void bufferProgressChanged();
-
-    void seekableChanged();
-    void playbackRateChanged();
-
-    void errorChanged();
-    void error(QDeclarativeAudio::Error error, const QString &errorString);
-
-private Q_SLOTS:
-    void _q_error(int, const QString &);
-
-private:
-    Q_DISABLE_COPY(QDeclarativeAudio)
-    Q_PRIVATE_SLOT(mediaBase(), void _q_stateChanged(QMediaPlayer::State))
-    Q_PRIVATE_SLOT(mediaBase(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
-    Q_PRIVATE_SLOT(mediaBase(), void _q_metaDataChanged())
-
-    inline QDeclarativeMediaBase *mediaBase() { return this; }
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeAudio))
-
-QT_END_HEADER
-
-#endif
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp b/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp
deleted file mode 100644
index 8e87e44..0000000
--- a/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase.cpp
+++ /dev/null
@@ -1,413 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativemediabase_p.h"
-
-#include <QtCore/qcoreevent.h>
-#include <QtCore/qurl.h>
-
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediaserviceprovider.h>
-#include <QtMultimedia/qmetadatacontrol.h>
-#include "qmetadatacontrolmetaobject_p.h"
-
-
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarativeMediaBaseObject : public QMediaObject
-{
-public:
-    QDeclarativeMediaBaseObject(QMediaService *service)
-        : QMediaObject(0, service)
-    {
-    }
-};
-
-class QDeclarativeMediaBasePlayerControl : public QMediaPlayerControl
-{
-public:
-    QDeclarativeMediaBasePlayerControl(QObject *parent)
-        : QMediaPlayerControl(parent)
-    {
-    }
-
-    QMediaPlayer::State state() const { return QMediaPlayer::StoppedState; }
-    QMediaPlayer::MediaStatus mediaStatus() const { return QMediaPlayer::NoMedia; }
-
-    qint64 duration() const { return 0; }
-    qint64 position() const { return 0; }
-    void setPosition(qint64) {}
-    int volume() const { return 0; }
-    void setVolume(int) {}
-    bool isMuted() const { return false; }
-    void setMuted(bool) {}
-    int bufferStatus() const { return 0; }
-    bool isAudioAvailable() const { return false; }
-    bool isVideoAvailable() const { return false; }
-    bool isSeekable() const { return false; }
-    QMediaTimeRange availablePlaybackRanges() const { return QMediaTimeRange(); }
-    qreal playbackRate() const { return 1; }
-    void setPlaybackRate(qreal) {}
-    QMediaContent media() const { return QMediaContent(); }
-    const QIODevice *mediaStream() const { return 0; }
-    void setMedia(const QMediaContent &, QIODevice *) {}
-
-    void play() {}
-    void pause() {}
-    void stop() {}
-};
-
-class QDeclarativeMediaBaseAnimation : public QObject
-{
-public:
-    QDeclarativeMediaBaseAnimation(QDeclarativeMediaBase *media)
-        : m_media(media)
-    {
-    }
-
-    void start() { if (!m_timer.isActive()) m_timer.start(500, this); }
-    void stop() { m_timer.stop(); }
-
-protected:
-    void timerEvent(QTimerEvent *event)
-    {
-        if (event->timerId() == m_timer.timerId()) {
-            event->accept();
-
-            if (m_media->m_state == QMediaPlayer::PlayingState)
-                emit m_media->positionChanged();
-            if (m_media->m_status == QMediaPlayer::BufferingMedia || QMediaPlayer::StalledMedia)
-                emit m_media->bufferProgressChanged();
-        } else {
-            QObject::timerEvent(event);
-        }
-    }
-
-private:
-    QDeclarativeMediaBase *m_media;
-    QBasicTimer m_timer;
-};
-
-void QDeclarativeMediaBase::_q_stateChanged(QMediaPlayer::State state)
-{
-    if (state != m_state) {
-        QMediaPlayer::State oldState = m_state;
-
-        m_state = state;
-
-        if (state == QMediaPlayer::StoppedState) {
-            emit stopped();
-            emit playingChanged();
-        } else if (oldState == QMediaPlayer::StoppedState) {
-            emit started();
-            emit playingChanged();
-        } else if (oldState  == QMediaPlayer::PausedState) {
-            m_paused = false;
-
-            emit resumed();
-            emit pausedChanged();
-        }
-
-        if (state == m_state && state == QMediaPlayer::PausedState) {
-            bool wasPaused = m_paused;
-
-            m_paused = true;
-
-            emit paused();
-
-            if (!wasPaused)
-                emit pausedChanged();
-        }
-
-        if (m_state == QMediaPlayer::PlayingState
-                || m_status == QMediaPlayer::BufferingMedia
-                || m_status == QMediaPlayer::StalledMedia) {
-            m_animation->start();
-        } else {
-            m_animation->stop();
-        }
-    }
-}
-
-void QDeclarativeMediaBase::_q_mediaStatusChanged(QMediaPlayer::MediaStatus status)
-{
-    if (status != m_status) {
-        m_status = status;
-
-        switch (status) {
-        case QMediaPlayer::LoadedMedia:
-            emit loaded();
-            break;
-        case QMediaPlayer::BufferingMedia:
-            emit buffering();
-            break;
-        case QMediaPlayer::BufferedMedia:
-            emit buffered();
-            break;
-        case QMediaPlayer::StalledMedia:
-            emit stalled();
-            break;
-        case QMediaPlayer::EndOfMedia:
-            emit endOfMedia();
-            break;
-        default:
-            break;
-        }
-
-        emit statusChanged();
-
-        if (m_state == QMediaPlayer::PlayingState
-                || m_status == QMediaPlayer::BufferingMedia
-                || m_status == QMediaPlayer::StalledMedia) {
-            m_animation->start();
-        } else {
-            m_animation->stop();
-        }
-    }
-}
-
-void QDeclarativeMediaBase::_q_metaDataChanged()
-{
-    m_metaObject->metaDataChanged();
-}
-
-QDeclarativeMediaBase::QDeclarativeMediaBase()
-    : m_mediaService(0)
-    , m_playerControl(0)
-    , m_mediaObject(0)
-    , m_mediaProvider(0)
-    , m_metaDataControl(0)
-    , m_metaObject(0)
-    , m_animation(0)
-    , m_state(QMediaPlayer::StoppedState)
-    , m_status(QMediaPlayer::NoMedia)
-    , m_error(QMediaPlayer::NoError)
-    , m_paused(false)
-{
-}
-
-QDeclarativeMediaBase::~QDeclarativeMediaBase()
-{
-}
-
-void QDeclarativeMediaBase::shutdown()
-{
-    delete m_metaObject;
-    delete m_mediaObject;
-
-    if (m_mediaProvider)
-        m_mediaProvider->releaseService(m_mediaService);
-
-    delete m_animation;
-
-}
-
-void QDeclarativeMediaBase::setObject(QObject *object)
-{
-    if ((m_mediaProvider = QMediaServiceProvider::defaultServiceProvider())) {
-        if ((m_mediaService = m_mediaProvider->requestService(Q_MEDIASERVICE_MEDIAPLAYER))) {
-            m_playerControl = qobject_cast<QMediaPlayerControl *>(
-                    m_mediaService->control(QMediaPlayerControl_iid));
-            m_metaDataControl = qobject_cast<QMetaDataControl *>(
-                    m_mediaService->control(QMetaDataControl_iid));
-            m_mediaObject = new QDeclarativeMediaBaseObject(m_mediaService);
-        }
-    }
-
-    if (m_playerControl) {
-        QObject::connect(m_playerControl, SIGNAL(stateChanged(QMediaPlayer::State)),
-                object, SLOT(_q_stateChanged(QMediaPlayer::State)));
-        QObject::connect(m_playerControl, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
-                object, SLOT(_q_mediaStatusChanged(QMediaPlayer::MediaStatus)));
-        QObject::connect(m_playerControl, SIGNAL(mediaChanged(QMediaContent)),
-                object, SIGNAL(sourceChanged()));
-        QObject::connect(m_playerControl, SIGNAL(durationChanged(qint64)),
-                object, SIGNAL(durationChanged()));
-        QObject::connect(m_playerControl, SIGNAL(positionChanged(qint64)),
-                object, SIGNAL(positionChanged()));
-        QObject::connect(m_playerControl, SIGNAL(volumeChanged(int)),
-                object, SIGNAL(volumeChanged()));
-        QObject::connect(m_playerControl, SIGNAL(mutedChanged(bool)),
-                object, SIGNAL(mutedChanged()));
-        QObject::connect(m_playerControl, SIGNAL(bufferStatusChanged(int)),
-                object, SIGNAL(bufferProgressChanged()));
-        QObject::connect(m_playerControl, SIGNAL(seekableChanged(bool)),
-                object, SIGNAL(seekableChanged()));
-        QObject::connect(m_playerControl, SIGNAL(playbackRateChanged(qreal)),
-                object, SIGNAL(playbackRateChanged()));
-        QObject::connect(m_playerControl, SIGNAL(error(int,QString)),
-                object, SLOT(_q_error(int,QString)));
-
-        m_animation = new QDeclarativeMediaBaseAnimation(this);
-    } else {
-        m_error = QMediaPlayer::ServiceMissingError;
-
-        m_playerControl = new QDeclarativeMediaBasePlayerControl(object);
-    }
-
-    if (m_metaDataControl) {
-        m_metaObject = new QMetaDataControlMetaObject(m_metaDataControl, object);
-
-        QObject::connect(m_metaDataControl, SIGNAL(metaDataChanged()),
-                object, SLOT(_q_metaDataChanged()));
-    }
-}
-
-QUrl QDeclarativeMediaBase::source() const
-{
-    return m_playerControl->media().canonicalUrl();
-}
-
-void QDeclarativeMediaBase::setSource(const QUrl &url)
-{
-    if (m_error != QMediaPlayer::ServiceMissingError && m_error != QMediaPlayer::NoError) {
-        m_error = QMediaPlayer::NoError;
-        m_errorString = QString();
-
-        emit errorChanged();
-    }
-
-    m_playerControl->setMedia(QMediaContent(url), 0);
-}
-
-bool QDeclarativeMediaBase::isPlaying() const
-{
-    return m_state != QMediaPlayer::StoppedState;
-}
-
-void QDeclarativeMediaBase::setPlaying(bool playing)
-{
-    if (playing && m_state == QMediaPlayer::StoppedState) {
-        if (m_paused)
-            m_playerControl->pause();
-        else
-            m_playerControl->play();
-    } else if (!playing) {
-        m_playerControl->stop();
-    }
-}
-
-bool QDeclarativeMediaBase::isPaused() const
-{
-    return m_paused;
-}
-
-void QDeclarativeMediaBase::setPaused(bool paused)
-{
-    if (m_paused != paused) {
-        if (paused && m_state == QMediaPlayer::PlayingState) {
-            m_playerControl->pause();
-        } else if (!paused && m_state == QMediaPlayer::PausedState) {
-            m_playerControl->play();
-        } else {
-            m_paused = paused;
-
-            emit pausedChanged();
-        }
-    }
-}
-
-int QDeclarativeMediaBase::duration() const
-{
-    return m_playerControl->duration();
-}
-
-int QDeclarativeMediaBase::position() const
-{
-    return m_playerControl->position();
-
-}
-
-void QDeclarativeMediaBase::setPosition(int position)
-{
-    m_playerControl->setPosition(position);
-}
-
-qreal QDeclarativeMediaBase::volume() const
-{
-    return qreal(m_playerControl->volume()) / 100;
-}
-
-void QDeclarativeMediaBase::setVolume(qreal volume)
-{
-    m_playerControl->setVolume(qRound(volume * 100));
-}
-
-bool QDeclarativeMediaBase::isMuted() const
-{
-    return m_playerControl->isMuted();
-}
-
-void QDeclarativeMediaBase::setMuted(bool muted)
-{
-    m_playerControl->setMuted(muted);
-}
-
-qreal QDeclarativeMediaBase::bufferProgress() const
-{
-    return qreal(m_playerControl->bufferStatus()) / 100;
-}
-
-bool QDeclarativeMediaBase::isSeekable() const
-{
-    return m_playerControl->isSeekable();
-}
-
-qreal QDeclarativeMediaBase::playbackRate() const
-{
-    return m_playerControl->playbackRate();
-}
-
-void QDeclarativeMediaBase::setPlaybackRate(qreal rate)
-{
-    m_playerControl->setPlaybackRate(rate);
-}
-
-QString QDeclarativeMediaBase::errorString() const
-{
-    return m_errorString;
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h b/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h
deleted file mode 100644
index b40e84e..0000000
--- a/src/plugins/qdeclarativemodules/multimedia/qdeclarativemediabase_p.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEMEDIABASE_P_H
-#define QDECLARATIVEMEDIABASE_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qbasictimer.h>
-#include <QtMultimedia/qmediaplayer.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMediaPlayerControl;
-class QMediaService;
-class QMediaServiceProvider;
-class QMetaDataControl;
-class QMetaDataControlMetaObject;
-class QDeclarativeMediaBaseAnimation;
-
-class QDeclarativeMediaBase
-{
-public:
-    QDeclarativeMediaBase();
-    virtual ~QDeclarativeMediaBase();
-
-    QUrl source() const;
-    void setSource(const QUrl &url);
-
-    bool isPlaying() const;
-    void setPlaying(bool playing);
-
-    bool isPaused() const;
-    void setPaused(bool paused);
-
-    int duration() const;
-
-    int position() const;
-    void setPosition(int position);
-
-    qreal volume() const;
-    void setVolume(qreal volume);
-
-    bool isMuted() const;
-    void setMuted(bool muted);
-
-    qreal bufferProgress() const;
-
-    bool isSeekable() const;
-
-    qreal playbackRate() const;
-    void setPlaybackRate(qreal rate);
-
-    QString errorString() const;
-
-    void _q_stateChanged(QMediaPlayer::State state);
-    void _q_mediaStatusChanged(QMediaPlayer::MediaStatus status);
-
-    void _q_metaDataChanged();
-
-protected:
-    void shutdown();
-
-    void setObject(QObject *object);
-
-    virtual void sourceChanged() = 0;
-
-    virtual void playingChanged() = 0;
-    virtual void pausedChanged() = 0;
-
-    virtual void started() = 0;
-    virtual void resumed() = 0;
-    virtual void paused() = 0;
-    virtual void stopped() = 0;
-
-    virtual void statusChanged() = 0;
-
-    virtual void loaded() = 0;
-    virtual void buffering() = 0;
-    virtual void stalled() = 0;
-    virtual void buffered() = 0;
-    virtual void endOfMedia() = 0;
-
-    virtual void durationChanged() = 0;
-    virtual void positionChanged() = 0;
-
-    virtual void volumeChanged() = 0;
-    virtual void mutedChanged() = 0;
-
-    virtual void bufferProgressChanged() = 0;
-
-    virtual void seekableChanged() = 0;
-    virtual void playbackRateChanged() = 0;
-
-    virtual void errorChanged() = 0;
-
-    QMediaService *m_mediaService;
-    QMediaPlayerControl *m_playerControl;
-
-    QMediaObject *m_mediaObject;
-    QMediaServiceProvider *m_mediaProvider;
-    QMetaDataControl *m_metaDataControl;
-    QMetaDataControlMetaObject *m_metaObject;
-    QDeclarativeMediaBaseAnimation *m_animation;
-
-    QMediaPlayer::State m_state;
-    QMediaPlayer::MediaStatus m_status;
-    QMediaPlayer::Error m_error;
-    bool m_paused;
-    QString m_errorString;
-
-    friend class QDeclarativeMediaBaseAnimation;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo.cpp b/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo.cpp
deleted file mode 100644
index 064f242..0000000
--- a/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo.cpp
+++ /dev/null
@@ -1,945 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativevideo_p.h"
-
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/private/qpaintervideosurface_p.h>
-#include <QtMultimedia/qvideooutputcontrol.h>
-#include <QtMultimedia/qvideorenderercontrol.h>
-
-
-QT_BEGIN_NAMESPACE
-
-
-void QDeclarativeVideo::_q_nativeSizeChanged(const QSizeF &size)
-{
-    setImplicitWidth(size.width());
-    setImplicitHeight(size.height());
-}
-
-void QDeclarativeVideo::_q_error(int errorCode, const QString &errorString)
-{
-    m_error = QMediaPlayer::Error(errorCode);
-    m_errorString = errorString;
-
-    emit error(Error(errorCode), errorString);
-    emit errorChanged();
-}
-
-
-/*!
-    \qmlclass Video QDeclarativeVideo
-    \since 4.7
-    \brief The Video element allows you to add videos to a scene.
-    \inherits Item
-
-    \qml
-    Video { source: "video/movie.mpg" }
-    \endqml
-
-    The video item supports untransformed, stretched, and uniformly scaled video presentation.
-    For a description of stretched uniformly scaled presentation, see the \l fillMode property
-    description.
-
-    The video item is only visible when the \l hasVideo property is true and the video is playing.
-
-    \sa Audio
-*/
-
-/*!
-    \internal
-    \class QDeclarativeVideo
-    \brief The QDeclarativeVideo class provides a video item that you can add to a QDeclarativeView.
-*/
-
-QDeclarativeVideo::QDeclarativeVideo(QDeclarativeItem *parent)
-    : QDeclarativeItem(parent)
-    , m_graphicsItem(0)
-
-{
-    m_graphicsItem = new QGraphicsVideoItem(this);
-    connect(m_graphicsItem, SIGNAL(nativeSizeChanged(QSizeF)),
-            this, SLOT(_q_nativeSizeChanged(QSizeF)));
-
-    setObject(this);
-
-    if (m_mediaService) {
-        connect(m_playerControl, SIGNAL(audioAvailableChanged(bool)),
-                this, SIGNAL(hasAudioChanged()));
-        connect(m_playerControl, SIGNAL(videoAvailableChanged(bool)),
-                this, SIGNAL(hasVideoChanged()));
-
-        m_graphicsItem->setMediaObject(m_mediaObject);
-    }
-}
-
-QDeclarativeVideo::~QDeclarativeVideo()
-{
-    shutdown();
-
-    delete m_graphicsItem;
-}
-
-/*!
-    \qmlproperty url Video::source
-
-    This property holds the source URL of the media.
-*/
-
-/*!
-    \qmlproperty bool Video::playing
-
-    This property holds whether the media is playing.
-
-    Defaults to false, and can be set to true to start playback.
-*/
-
-/*!
-    \qmlproperty bool Video::paused
-
-    This property holds whether the media is paused.
-
-    Defaults to false, and can be set to true to pause playback.
-*/
-
-/*!
-    \qmlsignal Video::onStarted()
-
-    This handler is called when playback is started.
-*/
-
-/*!
-    \qmlsignal Video::onResumed()
-
-    This handler is called when playback is resumed from the paused state.
-*/
-
-/*!
-    \qmlsignal Video::onPaused()
-
-    This handler is called when playback is paused.
-*/
-
-/*!
-    \qmlsignal Video::onStopped()
-
-    This handler is called when playback is stopped.
-*/
-
-/*!
-    \qmlproperty enum Video::status
-
-    This property holds the status of media loading. It can be one of:
-
-    \list
-    \o NoMedia - no media has been set.
-    \o Loading - the media is currently being loaded.
-    \o Loaded - the media has been loaded.
-    \o Buffering - the media is buffering data.
-    \o Stalled - playback has been interrupted while the media is buffering data.
-    \o Buffered - the media has buffered data.
-    \o EndOfMedia - the media has played to the end.
-    \o InvalidMedia - the media cannot be played.
-    \o UnknownStatus - the status of the media is cannot be determined.
-    \endlist
-*/
-
-QDeclarativeVideo::Status QDeclarativeVideo::status() const
-{
-    return Status(m_status);
-}
-
-/*!
-    \qmlsignal Video::onLoaded()
-
-    This handler is called when the media source has been loaded.
-*/
-
-/*!
-    \qmlsignal Video::onBuffering()
-
-    This handler is called when the media starts buffering.
-*/
-
-/*!
-    \qmlsignal Video::onStalled()
-
-    This handler is called when playback has stalled while the media buffers.
-*/
-
-/*!
-    \qmlsignal Video::onBuffered()
-
-    This handler is called when the media has finished buffering.
-*/
-
-/*!
-    \qmlsignal Video::onEndOfMedia()
-
-    This handler is called when playback stops because end of the media has been reached.
-*/
-
-/*!
-    \qmlproperty int Video::duration
-
-    This property holds the duration of the media in milliseconds.
-
-    If the media doesn't have a fixed duration (a live stream for example) this will be 0.
-*/
-
-/*!
-    \qmlproperty int Video::position
-
-    This property holds the current playback position in milliseconds.
-*/
-
-/*!
-    \qmlproperty qreal Video::volume
-
-    This property holds the volume of the audio output, from 0.0 (silent) to 1.0 (maximum volume).
-*/
-
-/*!
-    \qmlproperty bool Video::muted
-
-    This property holds whether the audio output is muted.
-*/
-
-/*!
-    \qmlproperty bool Video::hasAudio
-
-    This property holds whether the media contains audio.
-*/
-
-bool QDeclarativeVideo::hasAudio() const
-{
-    return m_playerControl->isAudioAvailable();
-}
-
-/*!
-    \qmlproperty bool Video::hasVideo
-
-    This property holds whether the media contains video.
-*/
-
-bool QDeclarativeVideo::hasVideo() const
-{
-    return m_playerControl->isVideoAvailable();
-}
-
-/*!
-    \qmlproperty qreal Video::bufferProgress
-
-    This property holds how much of the data buffer is currently filled, from 0.0 (empty) to 1.0
-    (full).
-*/
-
-/*!
-    \qmlproperty bool Video::seekable
-
-    This property holds whether position of the video can be changed.
-*/
-
-/*!
-    \qmlproperty qreal Video::playbackRate
-
-    This property holds the rate at which video is played at as a multiple of the normal rate.
-*/
-
-/*!
-    \qmlproperty enum Video::error
-
-    This property holds the error state of the video.  It can be one of:
-
-    \list
-    \o NoError - there is no current error.
-    \o ResourceError - the video cannot be played due to a problem allocating resources.
-    \o FormatError - the video format is not supported.
-    \o NetworkError - the video cannot be played due to network issues.
-    \o AccessDenied - the video cannot be played due to insufficient permissions.
-    \o ServiceMissing -  the video cannot be played because the media service could not be
-    instantiated.
-    \endlist
-*/
-
-
-QDeclarativeVideo::Error QDeclarativeVideo::error() const
-{
-    return Error(m_error);
-}
-
-/*!
-    \qmlproperty string Video::errorString
-
-    This property holds a string describing the current error condition in more detail.
-*/
-
-/*!
-    \qmlsignal Video::onError(error, errorString)
-
-    This handler is called when an \l {Error}{error} has occurred.  The errorString parameter
-    may contain more detailed information about the error.
-*/
-
-/*!
-    \qmlproperty enum Video::fillMode
-
-    Set this property to define how the video is scaled to fit the target area.
-
-    \list
-    \o Stretch - the video is scaled to fit.
-    \o PreserveAspectFit - the video is scaled uniformly to fit without cropping
-    \o PreserveAspectCrop - the video is scaled uniformly to fill, cropping if necessary
-    \endlist
-
-    The default fill mode is PreserveAspectFit.
-*/
-
-QDeclarativeVideo::FillMode QDeclarativeVideo::fillMode() const
-{
-    return FillMode(m_graphicsItem->aspectRatioMode());
-}
-
-void QDeclarativeVideo::setFillMode(FillMode mode)
-{
-    m_graphicsItem->setAspectRatioMode(Qt::AspectRatioMode(mode));
-}
-
-/*!
-    \qmlmethod Video::play()
-
-    Starts playback of the media.
-
-    Sets the \l playing property to true, and the \l paused property to false.
-*/
-
-void QDeclarativeVideo::play()
-{
-    m_playerControl->play();
-
-    if (m_paused) {
-        m_paused = false;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlmethod Video::pause()
-
-    Pauses playback of the media.
-
-    Sets the \l playing and \l paused properties to true.
-*/
-
-void QDeclarativeVideo::pause()
-{
-    m_playerControl->pause();
-
-    if (!m_paused && m_state == QMediaPlayer::PausedState) {
-        m_paused = true;
-        emit pausedChanged();
-    }
-}
-
-/*!
-    \qmlmethod Video::stop()
-
-    Stops playback of the media.
-
-    Sets the \l playing and \l paused properties to false.
-*/
-
-void QDeclarativeVideo::stop()
-{
-    m_playerControl->stop();
-
-    if (m_paused) {
-        m_paused = false;
-        emit pausedChanged();
-    }
-}
-
-void QDeclarativeVideo::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *)
-{
-}
-
-void QDeclarativeVideo::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
-    m_graphicsItem->setSize(newGeometry.size());
-
-    QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-}
-
-QT_END_NAMESPACE
-
-// ***************************************
-// Documentation for meta-data properties.
-// ***************************************
-
-/*!
-    \qmlproperty variant Video::title
-
-    This property holds the tile of the media.
-
-    \sa {QtMultimedia::Title}
-*/
-
-/*!
-    \qmlproperty variant Video::subTitle
-
-    This property holds the sub-title of the media.
-
-    \sa {QtMultimedia::SubTitle}
-*/
-
-/*!
-    \qmlproperty variant Video::author
-
-    This property holds the author of the media.
-
-    \sa {QtMultimedia::Author}
-*/
-
-/*!
-    \qmlproperty variant Video::comment
-
-    This property holds a user comment about the media.
-
-    \sa {QtMultimedia::Comment}
-*/
-
-/*!
-    \qmlproperty variant Video::description
-
-    This property holds a description of the media.
-
-    \sa {QtMultimedia::Description}
-*/
-
-/*!
-    \qmlproperty variant Video::category
-
-    This property holds the category of the media
-
-    \sa {QtMultimedia::Category}
-*/
-
-/*!
-    \qmlproperty variant Video::genre
-
-    This property holds the genre of the media.
-
-    \sa {QtMultimedia::Genre}
-*/
-
-/*!
-    \qmlproperty variant Video::year
-
-    This property holds the year of release of the media.
-
-    \sa {QtMultimedia::Year}
-*/
-
-/*!
-    \qmlproperty variant Video::date
-
-    This property holds the date of the media.
-
-    \sa {QtMultimedia::Date}
-*/
-
-/*!
-    \qmlproperty variant Video::userRating
-
-    This property holds a user rating of the media in the range of 0 to 100.
-
-    \sa {QtMultimedia::UserRating}
-*/
-
-/*!
-    \qmlproperty variant Video::keywords
-
-    This property holds a list of keywords describing the media.
-
-    \sa {QtMultimedia::Keywords}
-*/
-
-/*!
-    \qmlproperty variant Video::language
-
-    This property holds the language of the media, as an ISO 639-2 code.
-
-    \sa {QtMultimedia::Language}
-*/
-
-/*!
-    \qmlproperty variant Video::publisher
-
-    This property holds the publisher of the media.
-
-    \sa {QtMultimedia::Publisher}
-*/
-
-/*!
-    \qmlproperty variant Video::copyright
-
-    This property holds the media's copyright notice.
-
-    \sa {QtMultimedia::Copyright}
-*/
-
-/*!
-    \qmlproperty variant Video::parentalRating
-
-    This property holds the parental rating of the media.
-
-    \sa {QtMultimedia::ParentalRating}
-*/
-
-/*!
-    \qmlproperty variant Video::ratingOrganisation
-
-    This property holds the name of the rating organisation responsible for the
-    parental rating of the media.
-
-    \sa {QtMultimedia::RatingOrganisation}
-*/
-
-/*!
-    \qmlproperty variant Video::size
-
-    This property property holds the size of the media in bytes.
-
-    \sa {QtMultimedia::Size}
-*/
-
-/*!
-    \qmlproperty variant Video::mediaType
-
-    This property holds the type of the media.
-
-    \sa {QtMultimedia::MediaType}
-*/
-
-/*!
-    \qmlproperty variant Video::audioBitRate
-
-    This property holds the bit rate of the media's audio stream ni bits per
-    second.
-
-    \sa {QtMultimedia::AudioBitRate}
-*/
-
-/*!
-    \qmlproperty variant Video::audioCodec
-
-    This property holds the encoding of the media audio stream.
-
-    \sa {QtMultimedia::AudioCodec}
-*/
-
-/*!
-    \qmlproperty variant Video::averageLevel
-
-    This property holds the average volume level of the media.
-
-    \sa {QtMultimedia::AverageLevel}
-*/
-
-/*!
-    \qmlproperty variant Video::channelCount
-
-    This property holds the number of channels in the media's audio stream.
-
-    \sa {QtMultimedia::ChannelCount}
-*/
-
-/*!
-    \qmlproperty variant Video::peakValue
-
-    This property holds the peak volume of media's audio stream.
-
-    \sa {QtMultimedia::PeakValue}
-*/
-
-/*!
-    \qmlproperty variant Video::sampleRate
-
-    This property holds the sample rate of the media's audio stream in hertz.
-
-    \sa {QtMultimedia::SampleRate}
-*/
-
-/*!
-    \qmlproperty variant Video::albumTitle
-
-    This property holds the title of the album the media belongs to.
-
-    \sa {QtMultimedia::AlbumTitle}
-*/
-
-/*!
-    \qmlproperty variant Video::albumArtist
-
-    This property holds the name of the principal artist of the album the media
-    belongs to.
-
-    \sa {QtMultimedia::AlbumArtist}
-*/
-
-/*!
-    \qmlproperty variant Video::contributingArtist
-
-    This property holds the names of artists contributing to the media.
-
-    \sa {QtMultimedia::ContributingArtist}
-*/
-
-/*!
-    \qmlproperty variant Video::composer
-
-    This property holds the composer of the media.
-
-    \sa {QtMultimedia::Composer}
-*/
-
-/*!
-    \qmlproperty variant Video::conductor
-
-    This property holds the conductor of the media.
-
-    \sa {QtMultimedia::Conductor}
-*/
-
-/*!
-    \qmlproperty variant Video::lyrics
-
-    This property holds the lyrics to the media.
-
-    \sa {QtMultimedia::Lyrics}
-*/
-
-/*!
-    \qmlproperty variant Video::mood
-
-    This property holds the mood of the media.
-
-    \sa {QtMultimedia::Mood}
-*/
-
-/*!
-    \qmlproperty variant Video::trackNumber
-
-    This property holds the track number of the media.
-
-    \sa {QtMultimedia::TrackNumber}
-*/
-
-/*!
-    \qmlproperty variant Video::trackCount
-
-    This property holds the number of track on the album containing the media.
-
-    \sa {QtMultimedia::TrackNumber}
-*/
-
-/*!
-    \qmlproperty variant Video::coverArtUrlSmall
-
-    This property holds the URL of a small cover art image.
-
-    \sa {QtMultimedia::CoverArtUrlSmall}
-*/
-
-/*!
-    \qmlproperty variant Video::coverArtUrlLarge
-
-    This property holds the URL of a large cover art image.
-
-    \sa {QtMultimedia::CoverArtUrlLarge}
-*/
-
-/*!
-    \qmlproperty variant Video::resolution
-
-    This property holds the dimension of an image or video.
-
-    \sa {QtMultimedia::Resolution}
-*/
-
-/*!
-    \qmlproperty variant Video::pixelAspectRatio
-
-    This property holds the pixel aspect ratio of an image or video.
-
-    \sa {QtMultimedia::PixelAspectRatio}
-*/
-
-/*!
-    \qmlproperty variant Video::videoFrameRate
-
-    This property holds the frame rate of the media's video stream.
-
-    \sa {QtMultimedia::VideoFrameRate}
-*/
-
-/*!
-    \qmlproperty variant Video::videoBitRate
-
-    This property holds the bit rate of the media's video stream in bits per
-    second.
-
-    \sa {QtMultimedia::VideoBitRate}
-*/
-
-/*!
-    \qmlproperty variant Video::videoCodec
-
-    This property holds the encoding of the media's video stream.
-
-    \sa {QtMultimedia::VideoCodec}
-*/
-
-/*!
-    \qmlproperty variant Video::posterUrl
-
-    This property holds the URL of a poster image.
-
-    \sa {QtMultimedia::PosterUrl}
-*/
-
-/*!
-    \qmlproperty variant Video::chapterNumber
-
-    This property holds the chapter number of the media.
-
-    \sa {QtMultimedia::ChapterNumber}
-*/
-
-/*!
-    \qmlproperty variant Video::director
-
-    This property holds the director of the media.
-
-    \sa {QtMultimedia::Director}
-*/
-
-/*!
-    \qmlproperty variant Video::leadPerformer
-
-    This property holds the lead performer in the media.
-
-    \sa {QtMultimedia::LeadPerformer}
-*/
-
-/*!
-    \qmlproperty variant Video::writer
-
-    This property holds the writer of the media.
-
-    \sa {QtMultimedia::Writer}
-*/
-
-// The remaining properties are related to photos, and are technically
-// available but will certainly never have values.
-#ifndef Q_QDOC
-
-/*!
-    \qmlproperty variant Video::cameraManufacturer
-
-    \sa {QtMultimedia::CameraManufacturer}
-*/
-
-/*!
-    \qmlproperty variant Video::cameraModel
-
-    \sa {QtMultimedia::CameraModel}
-*/
-
-/*!
-    \qmlproperty variant Video::event
-
-    \sa {QtMultimedia::Event}
-*/
-
-/*!
-    \qmlproperty variant Video::subject
-
-    \sa {QtMultimedia::Subject}
-*/
-
-/*!
-    \qmlproperty variant Video::orientation
-
-    \sa {QtMultimedia::Orientation}
-*/
-
-/*!
-    \qmlproperty variant Video::exposureTime
-
-    \sa {QtMultimedia::ExposureTime}
-*/
-
-/*!
-    \qmlproperty variant Video::fNumber
-
-    \sa {QtMultimedia::FNumber}
-*/
-
-/*!
-    \qmlproperty variant Video::exposureProgram
-
-    \sa {QtMultimedia::ExposureProgram}
-*/
-
-/*!
-    \qmlproperty variant Video::isoSpeedRatings
-
-    \sa {QtMultimedia::ISOSpeedRatings}
-*/
-
-/*!
-    \qmlproperty variant Video::exposureBiasValue
-
-    \sa {QtMultimedia::ExposureBiasValue}
-*/
-
-/*!
-    \qmlproperty variant Video::dateTimeDigitized
-
-    \sa {QtMultimedia::DateTimeDigitized}
-*/
-
-/*!
-    \qmlproperty variant Video::subjectDistance
-
-    \sa {QtMultimedia::SubjectDistance}
-*/
-
-/*!
-    \qmlproperty variant Video::meteringMode
-
-    \sa {QtMultimedia::MeteringMode}
-*/
-
-/*!
-    \qmlproperty variant Video::lightSource
-
-    \sa {QtMultimedia::LightSource}
-*/
-
-/*!
-    \qmlproperty variant Video::flash
-
-    \sa {QtMultimedia::Flash}
-*/
-
-/*!
-    \qmlproperty variant Video::focalLength
-
-    \sa {QtMultimedia::FocalLength}
-*/
-
-/*!
-    \qmlproperty variant Video::exposureMode
-
-    \sa {QtMultimedia::ExposureMode}
-*/
-
-/*!
-    \qmlproperty variant Video::whiteBalance
-
-    \sa {QtMultimedia::WhiteBalance}
-*/
-
-/*!
-    \qmlproperty variant Video::DigitalZoomRatio
-
-    \sa {QtMultimedia::DigitalZoomRatio}
-*/
-
-/*!
-    \qmlproperty variant Video::focalLengthIn35mmFilm
-
-    \sa {QtMultimedia::FocalLengthIn35mmFile}
-*/
-
-/*!
-    \qmlproperty variant Video::sceneCaptureType
-
-    \sa {QtMultimedia::SceneCaptureType}
-*/
-
-/*!
-    \qmlproperty variant Video::gainControl
-
-    \sa {QtMultimedia::GainControl}
-*/
-
-/*!
-    \qmlproperty variant Video::contrast
-
-    \sa {QtMultimedia::contrast}
-*/
-
-/*!
-    \qmlproperty variant Video::saturation
-
-    \sa {QtMultimedia::Saturation}
-*/
-
-/*!
-    \qmlproperty variant Video::sharpness
-
-    \sa {QtMultimedia::Sharpness}
-*/
-
-/*!
-    \qmlproperty variant Video::deviceSettingDescription
-
-    \sa {QtMultimedia::DeviceSettingDescription}
-*/
-
-#endif
-
-#include "moc_qdeclarativevideo_p.cpp"
diff --git a/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h b/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h
deleted file mode 100644
index fb13519..0000000
--- a/src/plugins/qdeclarativemodules/multimedia/qdeclarativevideo_p.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEVIDEO_H
-#define QDECLARATIVEVIDEO_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qdeclarativemediabase_p.h"
-
-#include <QtMultimedia/qgraphicsvideoitem.h>
-
-#include <QtCore/qbasictimer.h>
-#include <QtDeclarative/qdeclarativeitem.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QTimerEvent;
-class QVideoSurfaceFormat;
-
-
-class QDeclarativeVideo : public QDeclarativeItem, public QDeclarativeMediaBase
-{
-    Q_OBJECT
-    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
-    Q_PROPERTY(bool playing READ isPlaying WRITE setPlaying NOTIFY playingChanged)
-    Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
-    Q_PROPERTY(Status status READ status NOTIFY statusChanged)
-    Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
-    Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
-    Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged)
-    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
-    Q_PROPERTY(bool hasAudio READ hasAudio NOTIFY hasAudioChanged)
-    Q_PROPERTY(bool hasVideo READ hasVideo NOTIFY hasVideoChanged)
-    Q_PROPERTY(int bufferProgress READ bufferProgress NOTIFY bufferProgressChanged)
-    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
-    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
-    Q_PROPERTY(Error error READ error NOTIFY errorChanged)
-    Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
-    Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode)
-    Q_ENUMS(FillMode)
-    Q_ENUMS(Status)
-    Q_ENUMS(Error)
-public:
-    enum FillMode
-    {
-        Stretch            = Qt::IgnoreAspectRatio,
-        PreserveAspectFit  = Qt::KeepAspectRatio,
-        PreserveAspectCrop = Qt::KeepAspectRatioByExpanding
-    };
-
-    enum Status
-    {
-        UnknownStatus = QMediaPlayer::UnknownMediaStatus,
-        NoMedia       = QMediaPlayer::NoMedia,
-        Loading       = QMediaPlayer::LoadingMedia,
-        Loaded        = QMediaPlayer::LoadedMedia,
-        Stalled       = QMediaPlayer::StalledMedia,
-        Buffering     = QMediaPlayer::BufferingMedia,
-        Buffered      = QMediaPlayer::BufferedMedia,
-        EndOfMedia    = QMediaPlayer::EndOfMedia,
-        InvalidMedia  = QMediaPlayer::InvalidMedia
-    };
-
-    enum Error
-    {
-        NoError        = QMediaPlayer::NoError,
-        ResourceError  = QMediaPlayer::ResourceError,
-        FormatError    = QMediaPlayer::FormatError,
-        NetworkError   = QMediaPlayer::NetworkError,
-        AccessDenied   = QMediaPlayer::AccessDeniedError,
-        ServiceMissing = QMediaPlayer::ServiceMissingError
-    };
-
-    QDeclarativeVideo(QDeclarativeItem *parent = 0);
-    ~QDeclarativeVideo();
-
-    bool hasAudio() const;
-    bool hasVideo() const;
-
-    FillMode fillMode() const;
-    void setFillMode(FillMode mode);
-
-    Status status() const;
-    Error error() const;
-
-    void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
-
-public Q_SLOTS:
-    void play();
-    void pause();
-    void stop();
-
-Q_SIGNALS:
-    void sourceChanged();
-
-    void playingChanged();
-    void pausedChanged();
-
-    void started();
-    void resumed();
-    void paused();
-    void stopped();
-
-    void statusChanged();
-
-    void loaded();
-    void buffering();
-    void stalled();
-    void buffered();
-    void endOfMedia();
-
-    void durationChanged();
-    void positionChanged();
-
-    void volumeChanged();
-    void mutedChanged();
-    void hasAudioChanged();
-    void hasVideoChanged();
-
-    void bufferProgressChanged();
-
-    void seekableChanged();
-    void playbackRateChanged();
-
-    void errorChanged();
-    void error(QDeclarativeVideo::Error error, const QString &errorString);
-
-protected:
-    void geometryChanged(const QRectF &geometry, const QRectF &);
-
-private Q_SLOTS:
-    void _q_nativeSizeChanged(const QSizeF &size);
-    void _q_error(int, const QString &);
-
-private:
-    Q_DISABLE_COPY(QDeclarativeVideo)
-
-    QGraphicsVideoItem *m_graphicsItem;
-
-    Q_PRIVATE_SLOT(mediaBase(), void _q_stateChanged(QMediaPlayer::State))
-    Q_PRIVATE_SLOT(mediaBase(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
-    Q_PRIVATE_SLOT(mediaBase(), void _q_metaDataChanged())
-
-    inline QDeclarativeMediaBase *mediaBase() { return this; }
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeVideo))
-
-QT_END_HEADER
-
-#endif
diff --git a/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp b/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp
deleted file mode 100644
index e90cbd6..0000000
--- a/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject.cpp
+++ /dev/null
@@ -1,362 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmetadatacontrolmetaobject_p.h"
-#include <QtMultimedia/qmetadatacontrol.h>
-
-
-QT_BEGIN_NAMESPACE
-
-// copied from qmetaobject.cpp
-// do not touch without touching the moc as well
-enum PropertyFlags  {
-    Invalid = 0x00000000,
-    Readable = 0x00000001,
-    Writable = 0x00000002,
-    Resettable = 0x00000004,
-    EnumOrFlag = 0x00000008,
-    StdCppSet = 0x00000100,
-//    Override = 0x00000200,
-    Designable = 0x00001000,
-    ResolveDesignable = 0x00002000,
-    Scriptable = 0x00004000,
-    ResolveScriptable = 0x00008000,
-    Stored = 0x00010000,
-    ResolveStored = 0x00020000,
-    Editable = 0x00040000,
-    ResolveEditable = 0x00080000,
-    User = 0x00100000,
-    ResolveUser = 0x00200000,
-    Notify = 0x00400000,
-    Dynamic = 0x00800000
-};
-
-enum MethodFlags  {
-    AccessPrivate = 0x00,
-    AccessProtected = 0x01,
-    AccessPublic = 0x02,
-    AccessMask = 0x03, //mask
-
-    MethodMethod = 0x00,
-    MethodSignal = 0x04,
-    MethodSlot = 0x08,
-    MethodConstructor = 0x0c,
-    MethodTypeMask = 0x0c,
-
-    MethodCompatibility = 0x10,
-    MethodCloned = 0x20,
-    MethodScriptable = 0x40
-};
-
-struct QMetaObjectPrivate
-{
-    int revision;
-    int className;
-    int classInfoCount, classInfoData;
-    int methodCount, methodData;
-    int propertyCount, propertyData;
-    int enumeratorCount, enumeratorData;
-    int constructorCount, constructorData;
-    int flags;
-};
-
-static inline const QMetaObjectPrivate *priv(const uint* m_data)
-{ return reinterpret_cast<const QMetaObjectPrivate*>(m_data); }
-// end of copied lines from qmetaobject.cpp
-
-namespace
-{
-    struct MetaDataKey
-    {
-        QtMultimedia::MetaData key;
-        const char *name;
-    };
-
-    const MetaDataKey qt_metaDataKeys[] =
-    {
-        { QtMultimedia::Title, "title" },
-        { QtMultimedia::SubTitle, "subTitle" },
-        { QtMultimedia::Author, "author" },
-        { QtMultimedia::Comment, "comment" },
-        { QtMultimedia::Description, "description" },
-        { QtMultimedia::Category, "category" },
-        { QtMultimedia::Genre, "genre" },
-        { QtMultimedia::Year, "year" },
-        { QtMultimedia::Date, "date" },
-        { QtMultimedia::UserRating, "userRating" },
-        { QtMultimedia::Keywords, "keywords" },
-        { QtMultimedia::Language, "language" },
-        { QtMultimedia::Publisher, "publisher" },
-        { QtMultimedia::Copyright, "copyright" },
-        { QtMultimedia::ParentalRating, "parentalRating" },
-        { QtMultimedia::RatingOrganisation, "ratingOrganisation" },
-
-        // Media
-        { QtMultimedia::Size, "size" },
-        { QtMultimedia::MediaType, "mediaType" },
-//        { QtMultimedia::Duration, "duration" },
-
-        // Audio
-        { QtMultimedia::AudioBitRate, "audioBitRate" },
-        { QtMultimedia::AudioCodec, "audioCodec" },
-        { QtMultimedia::AverageLevel, "averageLevel" },
-        { QtMultimedia::ChannelCount, "channelCount" },
-        { QtMultimedia::PeakValue, "peakValue" },
-        { QtMultimedia::SampleRate, "sampleRate" },
-
-        // Music
-        { QtMultimedia::AlbumTitle, "albumTitle" },
-        { QtMultimedia::AlbumArtist, "albumArtist" },
-        { QtMultimedia::ContributingArtist, "contributingArtist" },
-        { QtMultimedia::Composer, "composer" },
-        { QtMultimedia::Conductor, "conductor" },
-        { QtMultimedia::Lyrics, "lyrics" },
-        { QtMultimedia::Mood, "mood" },
-        { QtMultimedia::TrackNumber, "trackNumber" },
-        { QtMultimedia::TrackCount, "trackCount" },
-
-        { QtMultimedia::CoverArtUrlSmall, "coverArtUrlSmall" },
-        { QtMultimedia::CoverArtUrlLarge, "coverArtUrlLarge" },
-
-        // Image/Video
-        { QtMultimedia::Resolution, "resolution" },
-        { QtMultimedia::PixelAspectRatio, "pixelAspectRatio" },
-
-        // Video
-        { QtMultimedia::VideoFrameRate, "videoFrameRate" },
-        { QtMultimedia::VideoBitRate, "videoBitRate" },
-        { QtMultimedia::VideoCodec, "videoCodec" },
-
-        { QtMultimedia::PosterUrl, "posterUrl" },
-
-        // Movie
-        { QtMultimedia::ChapterNumber, "chapterNumber" },
-        { QtMultimedia::Director, "director" },
-        { QtMultimedia::LeadPerformer, "leadPerformer" },
-        { QtMultimedia::Writer, "writer" },
-
-        // Photos
-        { QtMultimedia::CameraManufacturer, "cameraManufacturer" },
-        { QtMultimedia::CameraModel, "cameraModel" },
-        { QtMultimedia::Event, "event" },
-        { QtMultimedia::Subject, "subject" },
-        { QtMultimedia::Orientation, "orientation" },
-        { QtMultimedia::ExposureTime, "exposureTime" },
-        { QtMultimedia::FNumber, "fNumber" },
-        { QtMultimedia::ExposureProgram, "exposureProgram" },
-        { QtMultimedia::ISOSpeedRatings, "isoSpeedRatings" },
-        { QtMultimedia::ExposureBiasValue, "exposureBiasValue" },
-        { QtMultimedia::DateTimeOriginal, "dateTimeOriginal" },
-        { QtMultimedia::DateTimeDigitized, "dateTimeDigitized" },
-        { QtMultimedia::SubjectDistance, "subjectDistance" },
-        { QtMultimedia::MeteringMode, "meteringMode" },
-        { QtMultimedia::LightSource, "lightSource" },
-        { QtMultimedia::Flash, "flash" },
-        { QtMultimedia::FocalLength, "focalLength" },
-        { QtMultimedia::ExposureMode, "exposureMode" },
-        { QtMultimedia::WhiteBalance, "whiteBalance" },
-        { QtMultimedia::DigitalZoomRatio, "digitalZoomRatio" },
-        { QtMultimedia::FocalLengthIn35mmFilm, "focalLengthIn35mmFilm" },
-        { QtMultimedia::SceneCaptureType, "sceneCaptureType" },
-        { QtMultimedia::GainControl, "gainControl" },
-        { QtMultimedia::Contrast, "contrast" },
-        { QtMultimedia::Saturation, "saturation" },
-        { QtMultimedia::Sharpness, "sharpness" },
-        { QtMultimedia::DeviceSettingDescription, "deviceSettingDescription" }
-    };
-
-    class QMetaDataControlObject : public QObject
-    {
-    public:
-        inline QObjectData *data() { return d_ptr.data(); }
-    };
-}
-
-QMetaDataControlMetaObject::QMetaDataControlMetaObject(QMetaDataControl *control, QObject *object)
-    : m_control(control)
-    , m_object(object)
-    , m_string(0)
-    , m_data(0)
-    , m_propertyOffset(0)
-    , m_signalOffset(0)
-{
-    const QMetaObject *superClass = m_object->metaObject();
-
-    const int propertyCount =  sizeof(qt_metaDataKeys) / sizeof(MetaDataKey);
-    const int dataSize = sizeof(uint)
-            * (13                   // QMetaObjectPrivate members.
-            + 5                     // 5 members per signal.
-            + 4 * propertyCount     // 3 members per property + 1 notify signal per property.
-            + 1);                   // Terminating value.
-
-    m_data = reinterpret_cast<uint *>(qMalloc(dataSize));
-
-    QMetaObjectPrivate *pMeta = reinterpret_cast<QMetaObjectPrivate *>(m_data);
-
-    pMeta->revision = 3;
-    pMeta->className = 0;
-    pMeta->classInfoCount = 0;
-    pMeta->classInfoData = 0;
-    pMeta->methodCount = 1;
-    pMeta->methodData = 13;
-    pMeta->propertyCount = propertyCount;
-    pMeta->propertyData = 18;
-    pMeta->enumeratorCount = 0;
-    pMeta->enumeratorData = 0;
-    pMeta->constructorCount = 0;
-    pMeta->constructorData = 0;
-    pMeta->flags = 0x01;    // Dynamic meta object flag.
-
-    const int classNameSize = qstrlen(superClass->className()) + 1;
-
-    int stringIndex = classNameSize + 1;
-
-    // __metaDataChanged() signal.
-    static const char *changeSignal = "__metaDataChanged()";
-    const int changeSignalSize = qstrlen(changeSignal) + 1;
-
-    m_data[13] = stringIndex;                             // Signature.
-    m_data[14] = classNameSize;                           // Parameters.
-    m_data[15] = classNameSize;                           // Type.
-    m_data[16] = classNameSize;                           // Tag.
-    m_data[17] = MethodSignal | AccessProtected;          // Flags.
-
-    stringIndex += changeSignalSize;
-
-    const char *qvariantName = "QVariant";
-    const int qvariantSize = qstrlen(qvariantName) + 1;
-    const int qvariantIndex = stringIndex;
-
-    stringIndex += qvariantSize;
-
-    // Properties.
-    for (int i = 0; i < propertyCount; ++i) {       
-        m_data[18 + 3 * i] = stringIndex;                                       // Name.
-        m_data[19 + 3 * i] = qvariantIndex;                                     // Type.
-        m_data[20 + 3 * i] 
-                = Readable | Writable | Notify | Dynamic | (0xffffffff << 24);  // Flags.
-        m_data[18 + propertyCount * 3 + i] = 0;                                 // Notify signal.
-
-        stringIndex += qstrlen(qt_metaDataKeys[i].name) + 1;
-    }
-
-    // Terminating value.
-    m_data[18 + propertyCount * 4] = 0;
-
-    // Build string.
-    m_string = reinterpret_cast<char *>(qMalloc(stringIndex + 1));
-
-    // Class name.
-    qMemCopy(m_string, superClass->className(), classNameSize);
-
-    stringIndex = classNameSize;
-
-    // Null m_string.
-    m_string[stringIndex] = '\0';
-    stringIndex += 1;
-
-    // __metaDataChanged() signal.
-    qMemCopy(m_string + stringIndex, changeSignal, changeSignalSize);
-    stringIndex += changeSignalSize;
-
-    qMemCopy(m_string + stringIndex, qvariantName, qvariantSize);
-    stringIndex += qvariantSize;
-
-    // Properties.
-    for (int i = 0; i < propertyCount; ++i) {
-        const int propertyNameSize = qstrlen(qt_metaDataKeys[i].name) + 1;
-
-        qMemCopy(m_string + stringIndex, qt_metaDataKeys[i].name, propertyNameSize);
-        stringIndex += propertyNameSize;
-    }
-
-    // Terminating character.
-    m_string[stringIndex] = '\0';
-
-    d.superdata = superClass;
-    d.stringdata = m_string;
-    d.data = m_data;
-    d.extradata = 0;
-
-    static_cast<QMetaDataControlObject *>(m_object)->data()->metaObject = this;
-
-    m_propertyOffset = propertyOffset();
-    m_signalOffset = methodOffset();
-}
-
-QMetaDataControlMetaObject::~QMetaDataControlMetaObject()
-{
-    static_cast<QMetaDataControlObject *>(m_object)->data()->metaObject = 0;
-
-    qFree(m_data);
-    qFree(m_string);
-}
-
-int QMetaDataControlMetaObject::metaCall(QMetaObject::Call c, int id, void **a)
-{
-    if (c == QMetaObject::ReadProperty && id >= m_propertyOffset) {
-        int propId = id - m_propertyOffset;
-
-        *reinterpret_cast<QVariant *>(a[0]) = m_control->metaData(qt_metaDataKeys[propId].key);
-
-        return -1;
-    } else if (c == QMetaObject::WriteProperty && id >= m_propertyOffset) {
-        int propId = id - m_propertyOffset;
-
-        m_control->setMetaData(qt_metaDataKeys[propId].key, *reinterpret_cast<QVariant *>(a[0]));
-
-        return -1;
-    } else {
-        return m_object->qt_metacall(c, id, a);
-    }
-}
-
-int QMetaDataControlMetaObject::createProperty(const char *, const char *)
-{
-    return -1;
-}
-
-void QMetaDataControlMetaObject::metaDataChanged()
-{
-    activate(m_object, m_signalOffset, 0);
-}
-
-QT_END_NAMESPACE
diff --git a/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h b/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h
deleted file mode 100644
index c381f2d..0000000
--- a/src/plugins/qdeclarativemodules/multimedia/qmetadatacontrolmetaobject_p.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMETADATACONTROLMETAOBJECT_P_H
-#define QMETADATACONTROLMETAOJBECT_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qmetaobject.h>
-#include <QtMultimedia/qtmedianamespace.h>
-
-#include <QtCore/private/qobject_p.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMetaDataControl;
-
-class QMetaDataControlMetaObject : public QAbstractDynamicMetaObject
-{
-public:
-    QMetaDataControlMetaObject(QMetaDataControl *control, QObject *object);
-    ~QMetaDataControlMetaObject();
-
-    int metaCall(QMetaObject::Call call, int _id, void **arguments);
-    int createProperty(const char *, const char *);
-
-    void metaDataChanged();
-
-private:
-    QMetaDataControl *m_control;
-    QObject *m_object;
-    char *m_string;
-    uint *m_data;
-
-    int m_propertyOffset;
-    int m_signalOffset;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
-- 
cgit v0.12


From 372f474d97f2169597f994ee80e6c3d5b7f6d7bf Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Thu, 4 Mar 2010 17:16:54 +1000
Subject: Mark QGraphicsItem position properties as FINAL

Some of these properties were already final, so this improves the
consistency.  QTBUG-7948.
---
 src/gui/graphicsview/qgraphicsitem.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsitem.h b/src/gui/graphicsview/qgraphicsitem.h
index d72833b..56f94a2 100644
--- a/src/gui/graphicsview/qgraphicsitem.h
+++ b/src/gui/graphicsview/qgraphicsitem.h
@@ -540,10 +540,10 @@ class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
     Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL)
     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
     Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
-    Q_PROPERTY(QPointF pos READ pos WRITE setPos)
-    Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
-    Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
-    Q_PROPERTY(qreal z READ zValue WRITE setZValue NOTIFY zChanged)
+    Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL)
+    Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL)
+    Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL)
+    Q_PROPERTY(qreal z READ zValue WRITE setZValue NOTIFY zChanged FINAL)
     Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
     Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged)
     Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint WRITE setTransformOriginPoint)
-- 
cgit v0.12


From 4802116c73c0b9ee80dddc8ef4720bfdbde4e885 Mon Sep 17 00:00:00 2001
From: Yann Bodson <yann.bodson@nokia.com>
Date: Thu, 4 Mar 2010 17:20:52 +1000
Subject: Add support for tab and backtab in KeyNavigation

Task-number: QT-3046
---
 src/declarative/graphicsitems/qdeclarativeitem.cpp | 88 ++++++++++++++++++----
 src/declarative/graphicsitems/qdeclarativeitem_p.h | 13 +++-
 2 files changed, 87 insertions(+), 14 deletions(-)

diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index 5014fd8..3bee5b8 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -498,6 +498,32 @@ void QDeclarativeKeyNavigationAttached::setDown(QDeclarativeItem *i)
     emit changed();
 }
 
+QDeclarativeItem *QDeclarativeKeyNavigationAttached::tab() const
+{
+    Q_D(const QDeclarativeKeyNavigationAttached);
+    return d->tab;
+}
+
+void QDeclarativeKeyNavigationAttached::setTab(QDeclarativeItem *i)
+{
+    Q_D(QDeclarativeKeyNavigationAttached);
+    d->tab = i;
+    emit changed();
+}
+
+QDeclarativeItem *QDeclarativeKeyNavigationAttached::backtab() const
+{
+    Q_D(const QDeclarativeKeyNavigationAttached);
+    return d->backtab;
+}
+
+void QDeclarativeKeyNavigationAttached::setBacktab(QDeclarativeItem *i)
+{
+    Q_D(QDeclarativeKeyNavigationAttached);
+    d->backtab = i;
+    emit changed();
+}
+
 void QDeclarativeKeyNavigationAttached::keyPressed(QKeyEvent *event)
 {
     Q_D(QDeclarativeKeyNavigationAttached);
@@ -529,6 +555,18 @@ void QDeclarativeKeyNavigationAttached::keyPressed(QKeyEvent *event)
             event->accept();
         }
         break;
+    case Qt::Key_Tab:
+        if (d->tab) {
+            d->tab->setFocus(true);
+            event->accept();
+        }
+        break;
+    case Qt::Key_Backtab:
+        if (d->backtab) {
+            d->backtab->setFocus(true);
+            event->accept();
+        }
+        break;
     default:
         break;
     }
@@ -563,6 +601,16 @@ void QDeclarativeKeyNavigationAttached::keyReleased(QKeyEvent *event)
             event->accept();
         }
         break;
+    case Qt::Key_Tab:
+        if (d->tab) {
+            event->accept();
+        }
+        break;
+    case Qt::Key_Backtab:
+        if (d->backtab) {
+            event->accept();
+        }
+        break;
     default:
         break;
     }
@@ -902,6 +950,8 @@ const QDeclarativeKeysAttached::SigMap QDeclarativeKeysAttached::sigMap[] = {
     { Qt::Key_Right, "rightPressed" },
     { Qt::Key_Up, "upPressed" },
     { Qt::Key_Down, "downPressed" },
+    { Qt::Key_Tab, "tabPressed" },
+    { Qt::Key_Backtab, "backtabPressed" },
     { Qt::Key_Asterisk, "asteriskPressed" },
     { Qt::Key_NumberSign, "numberSignPressed" },
     { Qt::Key_Escape, "escapePressed" },
@@ -1440,7 +1490,7 @@ QDeclarativeAnchors *QDeclarativeItem::anchors()
 void QDeclarativeItemPrivate::data_append(QDeclarativeListProperty<QObject> *prop, QObject *o)
 {
     QDeclarativeItem *i = qobject_cast<QDeclarativeItem *>(o);
-    if (i) 
+    if (i)
         i->setParentItem(static_cast<QDeclarativeItem *>(prop->object));
     else
         o->setParent(static_cast<QDeclarativeItem *>(prop->object));
@@ -1568,7 +1618,7 @@ void QDeclarativeItemPrivate::transform_clear(QDeclarativeListProperty<QGraphics
 */
 
 /*! \internal */
-QDeclarativeListProperty<QObject> QDeclarativeItem::data() 
+QDeclarativeListProperty<QObject> QDeclarativeItem::data()
 {
     return QDeclarativeListProperty<QObject>(this, 0, QDeclarativeItemPrivate::data_append);
 }
@@ -2179,16 +2229,16 @@ void QDeclarativeItem::focusChanged(bool flag)
 QDeclarativeListProperty<QDeclarativeItem> QDeclarativeItem::fxChildren()
 {
     return QDeclarativeListProperty<QDeclarativeItem>(this, 0, QDeclarativeItemPrivate::children_append,
-                                                     QDeclarativeItemPrivate::children_count, 
-                                                     QDeclarativeItemPrivate::children_at); 
+                                                     QDeclarativeItemPrivate::children_count,
+                                                     QDeclarativeItemPrivate::children_at);
 }
 
 /*! \internal */
 QDeclarativeListProperty<QObject> QDeclarativeItem::resources()
 {
-    return QDeclarativeListProperty<QObject>(this, 0, QDeclarativeItemPrivate::resources_append, 
-                                             QDeclarativeItemPrivate::resources_count, 
-                                             QDeclarativeItemPrivate::resources_at); 
+    return QDeclarativeListProperty<QObject>(this, 0, QDeclarativeItemPrivate::resources_append,
+                                             QDeclarativeItemPrivate::resources_count,
+                                             QDeclarativeItemPrivate::resources_at);
 }
 
 /*!
@@ -2465,14 +2515,26 @@ QPointF QDeclarativeItemPrivate::computeTransformOrigin() const
 /*! \internal */
 bool QDeclarativeItem::sceneEvent(QEvent *event)
 {
-    bool rv = QGraphicsItem::sceneEvent(event);
+    if (event->type() == QEvent::KeyPress) {
+        QKeyEvent *k = static_cast<QKeyEvent *>(event);
 
-    if (event->type() == QEvent::FocusIn ||
-        event->type() == QEvent::FocusOut) {
-        focusChanged(hasFocus());
-    }
+        if ((k->key() == Qt::Key_Tab || k->key() == Qt::Key_Backtab) &&
+            !(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier))) {
+            keyPressEvent(static_cast<QKeyEvent *>(event));
+            if (!event->isAccepted())
+                QGraphicsItem::sceneEvent(event);
+        } else {
+            QGraphicsItem::sceneEvent(event);
+        }
+    } else {
+        bool rv = QGraphicsItem::sceneEvent(event);
 
-    return rv;
+        if (event->type() == QEvent::FocusIn ||
+            event->type() == QEvent::FocusOut) {
+            focusChanged(hasFocus());
+        }
+        return rv;
+    }
 }
 
 /*! \internal */
diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h
index 4b4917e..e424970 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h
@@ -289,12 +289,14 @@ class QDeclarativeKeyNavigationAttachedPrivate : public QObjectPrivate
 {
 public:
     QDeclarativeKeyNavigationAttachedPrivate()
-        : QObjectPrivate(), left(0), right(0), up(0), down(0) {}
+        : QObjectPrivate(), left(0), right(0), up(0), down(0), tab(0), backtab(0) {}
 
     QDeclarativeItem *left;
     QDeclarativeItem *right;
     QDeclarativeItem *up;
     QDeclarativeItem *down;
+    QDeclarativeItem *tab;
+    QDeclarativeItem *backtab;
 };
 
 class QDeclarativeKeyNavigationAttached : public QObject, public QDeclarativeItemKeyFilter
@@ -306,6 +308,9 @@ class QDeclarativeKeyNavigationAttached : public QObject, public QDeclarativeIte
     Q_PROPERTY(QDeclarativeItem *right READ right WRITE setRight NOTIFY changed)
     Q_PROPERTY(QDeclarativeItem *up READ up WRITE setUp NOTIFY changed)
     Q_PROPERTY(QDeclarativeItem *down READ down WRITE setDown NOTIFY changed)
+    Q_PROPERTY(QDeclarativeItem *tab READ tab WRITE setTab NOTIFY changed)
+    Q_PROPERTY(QDeclarativeItem *backtab READ backtab WRITE setBacktab NOTIFY changed)
+
 public:
     QDeclarativeKeyNavigationAttached(QObject * = 0);
 
@@ -317,6 +322,10 @@ public:
     void setUp(QDeclarativeItem *);
     QDeclarativeItem *down() const;
     void setDown(QDeclarativeItem *);
+    QDeclarativeItem *tab() const;
+    void setTab(QDeclarativeItem *);
+    QDeclarativeItem *backtab() const;
+    void setBacktab(QDeclarativeItem *);
 
     static QDeclarativeKeyNavigationAttached *qmlAttachedProperties(QObject *);
 
@@ -407,6 +416,8 @@ Q_SIGNALS:
     void rightPressed(QDeclarativeKeyEvent *event);
     void upPressed(QDeclarativeKeyEvent *event);
     void downPressed(QDeclarativeKeyEvent *event);
+    void tabPressed(QDeclarativeKeyEvent *event);
+    void backtabPressed(QDeclarativeKeyEvent *event);
 
     void asteriskPressed(QDeclarativeKeyEvent *event);
     void numberSignPressed(QDeclarativeKeyEvent *event);
-- 
cgit v0.12


From 787da2f188c34fd932662ee0229908bec8c4c91a Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Thu, 4 Mar 2010 17:21:33 +1000
Subject: Added playlist playback modes combo box to player demo

Reviewed-by: Justin McPherson
---
 demos/multimedia/player/player.cpp | 28 +++++++++++++++++++++++++++-
 demos/multimedia/player/player.h   |  3 +++
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/demos/multimedia/player/player.cpp b/demos/multimedia/player/player.cpp
index 49d18cb..af30a97 100644
--- a/demos/multimedia/player/player.cpp
+++ b/demos/multimedia/player/player.cpp
@@ -81,6 +81,22 @@ Player::Player(QWidget *parent)
 
     connect(playlistView, SIGNAL(activated(QModelIndex)), this, SLOT(jump(QModelIndex)));
 
+    playbackModeBox = new QComboBox;
+    playbackModeBox->addItem(tr("Linear"),
+                             QVariant::fromValue<QMediaPlaylist::PlaybackMode>(QMediaPlaylist::Linear));
+    playbackModeBox->addItem(tr("Loop"),
+                             QVariant::fromValue<QMediaPlaylist::PlaybackMode>(QMediaPlaylist::Loop));
+    playbackModeBox->addItem(tr("Random"),
+                             QVariant::fromValue<QMediaPlaylist::PlaybackMode>(QMediaPlaylist::Random));
+    playbackModeBox->addItem(tr("Current Item Once"),
+                             QVariant::fromValue<QMediaPlaylist::PlaybackMode>(QMediaPlaylist::CurrentItemOnce));
+    playbackModeBox->addItem(tr("Current Item In Loop"),
+                             QVariant::fromValue<QMediaPlaylist::PlaybackMode>(QMediaPlaylist::CurrentItemInLoop));
+    playbackModeBox->setCurrentIndex(0);
+
+    connect(playbackModeBox, SIGNAL(activated(int)), SLOT(updatePlaybackMode()));
+    updatePlaybackMode();
+
     slider = new QSlider(Qt::Horizontal);
     slider->setRange(0, player->duration() / 1000);
 
@@ -126,12 +142,16 @@ Player::Player(QWidget *parent)
     else
         colorButton->setEnabled(false);
 
+    QBoxLayout *playlistLayout = new QVBoxLayout;
+    playlistLayout->addWidget(playlistView);
+    playlistLayout->addWidget(playbackModeBox);
+
     QBoxLayout *displayLayout = new QHBoxLayout;
     if (videoWidget)
         displayLayout->addWidget(videoWidget, 2);
     else
         displayLayout->addWidget(coverLabel, 2);
-    displayLayout->addWidget(playlistView);
+    displayLayout->addLayout(playlistLayout);
 
     QBoxLayout *controlLayout = new QHBoxLayout;
     controlLayout->setMargin(0);
@@ -333,3 +353,9 @@ void Player::showColorDialog()
     }
     colorDialog->show();
 }
+
+void Player::updatePlaybackMode()
+{
+    playlist->setPlaybackMode(
+            playbackModeBox->itemData(playbackModeBox->currentIndex()).value<QMediaPlaylist::PlaybackMode>());
+}
diff --git a/demos/multimedia/player/player.h b/demos/multimedia/player/player.h
index 1de8b1a..cda3eb9 100644
--- a/demos/multimedia/player/player.h
+++ b/demos/multimedia/player/player.h
@@ -57,6 +57,7 @@ class QAbstractItemView;
 class QLabel;
 class QModelIndex;
 class QSlider;
+class QComboBox;
 class QMediaPlayer;
 class QVideoWidget;
 class PlaylistModel;
@@ -87,6 +88,7 @@ private slots:
     void bufferingProgress(int progress);
 
     void showColorDialog();
+    void updatePlaybackMode();
 
 private:
     void setTrackInfo(const QString &info);
@@ -97,6 +99,7 @@ private:
     QVideoWidget *videoWidget;
     QLabel *coverLabel;
     QSlider *slider;
+    QComboBox *playbackModeBox;
     PlaylistModel *playlistModel;
     QAbstractItemView *playlistView;
     QDialog *colorDialog;
-- 
cgit v0.12


From c871d201a65b1524c0590e2d6ad77b8666338b08 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Thu, 4 Mar 2010 17:23:09 +1000
Subject: Fixup test

---
 tests/auto/declarative/qdeclarativeecmascript/data/methods.5.qml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/methods.5.qml b/tests/auto/declarative/qdeclarativeecmascript/data/methods.5.qml
index 3d45b15..5ba324a 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/data/methods.5.qml
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/methods.5.qml
@@ -1,7 +1,7 @@
 import Qt 4.6
 
 Item {
-    property alias x: item.x
+    property alias blah: item.x
     Item { id: item }
 
     function testFunction() { return 9; }
-- 
cgit v0.12


From 53af250a5366b4259bfb97a6b3c29c31e0aa10e0 Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Thu, 4 Mar 2010 17:23:22 +1000
Subject: Debug media player status and media state changes.

Disabled by default.

Reviewed-by: Justin McPherson
---
 src/multimedia/playback/qmediaplayer.cpp | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
index 8056878..9466cad 100644
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ b/src/multimedia/playback/qmediaplayer.cpp
@@ -43,6 +43,7 @@
 #include <QtCore/qmetaobject.h>
 #include <QtCore/qtimer.h>
 #include <QtCore/qpointer.h>
+#include <QtCore/qdebug.h>
 
 #include <QtMultimedia/qmediaplayer.h>
 
@@ -55,6 +56,7 @@
 #include <QtMultimedia/qvideowidget.h>
 #include <QtMultimedia/qgraphicsvideoitem.h>
 
+//#define DEBUG_PLAYER_STATE
 
 QT_BEGIN_HEADER
 
@@ -152,10 +154,16 @@ public:
     void _q_playlistDestroyed();
 };
 
+#define ENUM_NAME(c,e,v) (c::staticMetaObject.enumerator(c::staticMetaObject.indexOfEnumerator(e)).valueToKey((v)))
+
 void QMediaPlayerPrivate::_q_stateChanged(QMediaPlayer::State ps)
 {
     Q_Q(QMediaPlayer);
 
+#ifdef DEBUG_PLAYER_STATE
+    qDebug() << "State changed:" << ENUM_NAME(QMediaPlayer, "State", ps) << (filterStates ? "(filtered)" : "");
+#endif
+
     if (filterStates)
         return;
 
@@ -183,6 +191,10 @@ void QMediaPlayerPrivate::_q_mediaStatusChanged(QMediaPlayer::MediaStatus status
 {
     Q_Q(QMediaPlayer);
 
+#ifdef DEBUG_PLAYER_STATE
+    qDebug() << "MediaStatus changed:" << ENUM_NAME(QMediaPlayer, "MediaStatus", status);
+#endif
+
     switch (status) {
     case QMediaPlayer::StalledMedia:
     case QMediaPlayer::BufferingMedia:
@@ -230,8 +242,12 @@ void QMediaPlayerPrivate::_q_updateMedia(const QMediaContent &media)
 
     state = control->state();
 
-    if (state != currentState)
+    if (state != currentState) {
+#ifdef DEBUG_PLAYER_STATE
+        qDebug() << "State changed:" << ENUM_NAME(QMediaPlayer, "State", state);
+#endif
         emit q_func()->stateChanged(state);
+    }
 }
 
 void QMediaPlayerPrivate::_q_playlistDestroyed()
-- 
cgit v0.12


From 5a3b9d3daf64ea686427478391d3773c5a1e024e Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Thu, 4 Mar 2010 17:26:19 +1000
Subject: WaveDecoder; be more permissive in handling of wave file formats.

Reviewed-by: Dmytro Poplavskiy
---
 src/multimedia/effects/wavedecoder_p.cpp | 21 ++++++++++++++++-----
 src/multimedia/effects/wavedecoder_p.h   |  1 -
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/multimedia/effects/wavedecoder_p.cpp b/src/multimedia/effects/wavedecoder_p.cpp
index f2277ae..b534ded 100644
--- a/src/multimedia/effects/wavedecoder_p.cpp
+++ b/src/multimedia/effects/wavedecoder_p.cpp
@@ -55,7 +55,7 @@ WaveDecoder::WaveDecoder(QIODevice *s, QObject *parent):
 {
     open(QIODevice::ReadOnly | QIODevice::Unbuffered);
 
-    if (source->bytesAvailable() >= sizeof(CombinedHeader))
+    if (source->bytesAvailable() >= qint64(sizeof(CombinedHeader) + sizeof(DATAHeader) + sizeof(quint16)))
         QTimer::singleShot(0, this, SLOT(handleData()));
     else
         connect(source, SIGNAL(readyRead()), SLOT(handleData()));
@@ -105,7 +105,7 @@ qint64 WaveDecoder::writeData(const char *data, qint64 len)
 
 void WaveDecoder::handleData()
 {
-    if (source->bytesAvailable() < sizeof(CombinedHeader))
+    if (source->bytesAvailable() < qint64(sizeof(CombinedHeader) + sizeof(DATAHeader) + sizeof(quint16)))
         return;
 
     source->disconnect(SIGNAL(readyRead()), this, SLOT(handleData()));
@@ -114,12 +114,23 @@ void WaveDecoder::handleData()
     if (qstrncmp(header.riff.descriptor.id, "RIFF", 4) != 0 ||
         qstrncmp(header.riff.type, "WAVE", 4) != 0 ||
         qstrncmp(header.wave.descriptor.id, "fmt ", 4) != 0 ||
-        (header.wave.audioFormat != 0 && header.wave.audioFormat != 1) ||
-        qstrncmp(header.data.descriptor.id, "data", 4) != 0) {
+        (header.wave.audioFormat != 0 && header.wave.audioFormat != 1)) {
 
         emit invalidFormat();
     }
     else {
+        DATAHeader dataHeader;
+
+        if (qFromLittleEndian<quint32>(header.wave.descriptor.size) > sizeof(WAVEHeader)) {
+            // Extended data available
+            quint16 extraFormatBytes;
+            source->peek((char*)&extraFormatBytes, sizeof(quint16));
+            extraFormatBytes = qFromLittleEndian<quint16>(extraFormatBytes);
+            source->read(sizeof(quint16) + extraFormatBytes);   // dump it all
+        }
+
+        source->read((char*)&dataHeader, sizeof(DATAHeader));
+
         int bps = qFromLittleEndian<quint16>(header.wave.bitsPerSample);
 
         format.setCodec(QLatin1String("audio/pcm"));
@@ -129,7 +140,7 @@ void WaveDecoder::handleData()
         format.setSampleSize(bps);
         format.setChannels(qFromLittleEndian<quint16>(header.wave.numChannels));
 
-        dataSize = qFromLittleEndian<quint32>(header.data.descriptor.size);
+        dataSize = qFromLittleEndian<quint32>(dataHeader.descriptor.size);
 
         haveFormat = true;
         connect(source, SIGNAL(readyRead()), SIGNAL(readyRead()));
diff --git a/src/multimedia/effects/wavedecoder_p.h b/src/multimedia/effects/wavedecoder_p.h
index 00aa14e..fa1f77e 100644
--- a/src/multimedia/effects/wavedecoder_p.h
+++ b/src/multimedia/effects/wavedecoder_p.h
@@ -116,7 +116,6 @@ private:
     {
         RIFFHeader  riff;
         WAVEHeader  wave;
-        DATAHeader  data;
     };
 
     bool haveFormat;
-- 
cgit v0.12


From 6633234f5f19899dc54510b2bddb2ae1afd38318 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Thu, 4 Mar 2010 18:12:45 +1000
Subject: Run signal expressions on attached property objects in correct scope

QTBUG-8677
---
 src/declarative/qml/qdeclarativecompiler.cpp        | 13 +++++++++----
 src/declarative/qml/qdeclarativecompiler_p.h        |  1 +
 src/declarative/qml/qdeclarativeinstruction_p.h     |  1 +
 src/declarative/qml/qdeclarativevme.cpp             |  8 ++++----
 .../data/attachedPropertyScope.qml                  |  9 +++++++++
 .../declarative/qdeclarativeecmascript/testtypes.h  | 13 ++++++++++++-
 .../tst_qdeclarativeecmascript.cpp                  | 21 +++++++++++++++++++++
 .../data/attachedProperties.qml                     |  2 --
 .../tst_qdeclarativelanguage.cpp                    |  5 -----
 9 files changed, 57 insertions(+), 16 deletions(-)
 create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/attachedPropertyScope.qml

diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index 32c746f..5a2f3b5 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -983,12 +983,15 @@ void QDeclarativeCompiler::genObjectBody(QDeclarativeParser::Object *obj)
 
         } else if (v->type == Value::SignalExpression) {
 
+            BindingContext ctxt = compileState.signalExpressions.value(v);
+
             QDeclarativeInstruction store;
             store.type = QDeclarativeInstruction::StoreSignal;
             store.line = v->location.start.line;
             store.storeSignal.signalIndex = prop->index;
             store.storeSignal.value =
                 output->indexForString(v->value.asScript().trimmed());
+            store.storeSignal.context = ctxt.stack;
             output->bytecode << store;
 
         }
@@ -1321,7 +1324,7 @@ QMetaMethod QDeclarativeCompiler::findSignalByName(const QMetaObject *mo, const
 }
 
 bool QDeclarativeCompiler::buildSignal(QDeclarativeParser::Property *prop, QDeclarativeParser::Object *obj,
-                              const BindingContext &ctxt)
+                                       const BindingContext &ctxt)
 {
     Q_ASSERT(obj->metaObject());
     Q_ASSERT(!prop->isEmpty());
@@ -1357,6 +1360,8 @@ bool QDeclarativeCompiler::buildSignal(QDeclarativeParser::Property *prop, QDecl
             QString script = prop->values.at(0)->value.asScript().trimmed();
             if (script.isEmpty())
                 COMPILE_EXCEPTION(prop, QCoreApplication::translate("QDeclarativeCompiler","Empty signal assignment"));
+
+            compileState.signalExpressions.insert(prop->values.at(0), ctxt);
         }
     }
 
@@ -2608,9 +2613,9 @@ bool QDeclarativeCompiler::buildBinding(QDeclarativeParser::Value *value,
 }
 
 void QDeclarativeCompiler::genBindingAssignment(QDeclarativeParser::Value *binding,
-                                       QDeclarativeParser::Property *prop,
-                                       QDeclarativeParser::Object *obj,
-                                       QDeclarativeParser::Property *valueTypeProperty)
+                                                QDeclarativeParser::Property *prop,
+                                                QDeclarativeParser::Object *obj,
+                                                QDeclarativeParser::Property *valueTypeProperty)
 {
     Q_UNUSED(obj);
     Q_ASSERT(compileState.bindings.contains(binding));
diff --git a/src/declarative/qml/qdeclarativecompiler_p.h b/src/declarative/qml/qdeclarativecompiler_p.h
index f8ada95..cca42e2 100644
--- a/src/declarative/qml/qdeclarativecompiler_p.h
+++ b/src/declarative/qml/qdeclarativecompiler_p.h
@@ -307,6 +307,7 @@ private:
         QByteArray compiledBindingData;
 
         QHash<QDeclarativeParser::Value *, BindingReference> bindings;
+        QHash<QDeclarativeParser::Value *, BindingContext> signalExpressions;
         QList<QDeclarativeParser::Object *> aliasingObjects;
         QDeclarativeParser::Object *root;
     };
diff --git a/src/declarative/qml/qdeclarativeinstruction_p.h b/src/declarative/qml/qdeclarativeinstruction_p.h
index d8af6a7..c41b14f 100644
--- a/src/declarative/qml/qdeclarativeinstruction_p.h
+++ b/src/declarative/qml/qdeclarativeinstruction_p.h
@@ -293,6 +293,7 @@ public:
         struct {
             int signalIndex;
             int value;
+            int context;
         } storeSignal;
         struct {
             int signal;
diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp
index fc3722d..6a08674 100644
--- a/src/declarative/qml/qdeclarativevme.cpp
+++ b/src/declarative/qml/qdeclarativevme.cpp
@@ -538,13 +538,13 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, QDeclarati
         case QDeclarativeInstruction::StoreSignal:
             {
                 QObject *target = stack.top();
-                // XXX scope
-                QMetaMethod signal = 
-                    target->metaObject()->method(instr.storeSignal.signalIndex);
+                QObject *context = stack.at(stack.count() - 1 - instr.assignBinding.context);
+                
+                QMetaMethod signal = target->metaObject()->method(instr.storeSignal.signalIndex);
 
                 QDeclarativeBoundSignal *bs = new QDeclarativeBoundSignal(target, signal, target);
                 QDeclarativeExpression *expr = 
-                    new QDeclarativeExpression(ctxt, primitives.at(instr.storeSignal.value), target);
+                    new QDeclarativeExpression(ctxt, primitives.at(instr.storeSignal.value), context);
                 expr->setSourceLocation(comp->name, instr.line);
                 bs->setExpression(expr);
             }
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/attachedPropertyScope.qml b/tests/auto/declarative/qdeclarativeecmascript/data/attachedPropertyScope.qml
new file mode 100644
index 0000000..4b5464d
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/attachedPropertyScope.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+import Qt.test 1.0
+
+QtObject {
+    property int value: 9
+    property int value2
+
+    MyQmlObject.onMySignal: value2 = value
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
index 8fbd071..a283e3f 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
+++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
@@ -60,10 +60,21 @@ class MyQmlAttachedObject : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(int value READ value CONSTANT)
+    Q_PROPERTY(int value2 READ value2 WRITE setValue2)
 public:
-    MyQmlAttachedObject(QObject *parent) : QObject(parent) {}
+    MyQmlAttachedObject(QObject *parent) : QObject(parent), m_value2(0) {}
 
     int value() const { return 19; }
+    int value2() const { return m_value2; }
+    void setValue2(int v) { m_value2 = v; }
+
+    void emitMySignal() { emit mySignal(); }
+
+signals:
+    void mySignal();
+
+private:
+    int m_value2;
 };
 
 class MyQmlObject : public QObject
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 75ee7ce..2e00e10 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -123,6 +123,7 @@ private slots:
     void multiEngineObject();
     void deletedObject();
     void scriptScope();
+    void attachedPropertyScope();
 
     void bug1();
 
@@ -1693,6 +1694,26 @@ void tst_qdeclarativeecmascript::scriptScope()
     }
 }
 
+void tst_qdeclarativeecmascript::attachedPropertyScope()
+{
+    QDeclarativeComponent component(&engine, TEST_FILE("attachedPropertyScope.qml"));
+
+    QObject *object = component.create();
+    QVERIFY(object != 0);
+
+    MyQmlAttachedObject *attached = 
+        qobject_cast<MyQmlAttachedObject *>(qmlAttachedPropertiesObject<MyQmlObject>(object));
+    QVERIFY(attached != 0);
+
+    QCOMPARE(object->property("value2").toInt(), 0);
+
+    attached->emitMySignal();
+
+    QCOMPARE(object->property("value2").toInt(), 9);
+
+    delete object;
+}
+
 QTEST_MAIN(tst_qdeclarativeecmascript)
 
 #include "tst_qdeclarativeecmascript.moc"
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/attachedProperties.qml b/tests/auto/declarative/qdeclarativelanguage/data/attachedProperties.qml
index aecb3c3..b46ec34 100644
--- a/tests/auto/declarative/qdeclarativelanguage/data/attachedProperties.qml
+++ b/tests/auto/declarative/qdeclarativelanguage/data/attachedProperties.qml
@@ -3,8 +3,6 @@ import Test 1.0 as Namespace
 import Qt 4.6
 
 QtObject {
-    property int value2: 8
     MyQmlObject.value: 10
     Namespace.MyQmlObject.value2: 13
-    MyQmlObject.onValueChanged: value2 = MyQmlObject.value
 }
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index a339a6d..3ce15cb 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -718,11 +718,6 @@ void tst_qdeclarativelanguage::attachedProperties()
     QVERIFY(attached != 0);
     QCOMPARE(attached->property("value"), QVariant(10));
     QCOMPARE(attached->property("value2"), QVariant(13));
-
-    QEXPECT_FAIL("", "QTBUG-8677", Abort);
-    attached->setProperty("value", QVariant(12));
-    int val = object->property("value2").toInt();
-    QCOMPARE(val, 12);
 }
 
 // Tests non-static object properties
-- 
cgit v0.12


From a65e37f0fd48158403296d5ca9ffa0f0feae2940 Mon Sep 17 00:00:00 2001
From: Yann Bodson <yann.bodson@nokia.com>
Date: Thu, 4 Mar 2010 18:17:24 +1000
Subject: Add autotests for tab and backtab in Keys and KeyNavigation.

---
 .../qdeclarativeitem/data/keynavigation.qml        |  8 +++++
 .../declarative/qdeclarativeitem/data/keys.qml     |  2 ++
 .../qdeclarativeitem/tst_qdeclarativeitem.cpp      | 38 ++++++++++++++++++++++
 3 files changed, 48 insertions(+)

diff --git a/tests/auto/declarative/qdeclarativeitem/data/keynavigation.qml b/tests/auto/declarative/qdeclarativeitem/data/keynavigation.qml
index 9281a17..08da901 100644
--- a/tests/auto/declarative/qdeclarativeitem/data/keynavigation.qml
+++ b/tests/auto/declarative/qdeclarativeitem/data/keynavigation.qml
@@ -11,6 +11,8 @@ Grid {
         color: focus ? "red" : "lightgray"
         KeyNavigation.right: item2
         KeyNavigation.down: item3
+        KeyNavigation.tab: item2
+        KeyNavigation.backtab: item4
     }
     Rectangle {
         id: item2
@@ -19,6 +21,8 @@ Grid {
         color: focus ? "red" : "lightgray"
         KeyNavigation.left: item1
         KeyNavigation.down: item4
+        KeyNavigation.tab: item3
+        KeyNavigation.backtab: item1
     }
     Rectangle {
         id: item3
@@ -27,6 +31,8 @@ Grid {
         color: focus ? "red" : "lightgray"
         KeyNavigation.right: item4
         KeyNavigation.up: item1
+        KeyNavigation.tab: item4
+        KeyNavigation.backtab: item2
     }
     Rectangle {
         id: item4
@@ -35,5 +41,7 @@ Grid {
         color: focus ? "red" : "lightgray"
         KeyNavigation.left: item3
         KeyNavigation.up: item2
+        KeyNavigation.tab: item1
+        KeyNavigation.backtab: item3
     }
 }
diff --git a/tests/auto/declarative/qdeclarativeitem/data/keys.qml b/tests/auto/declarative/qdeclarativeitem/data/keys.qml
index f3c1f7b..7d34fc8 100644
--- a/tests/auto/declarative/qdeclarativeitem/data/keys.qml
+++ b/tests/auto/declarative/qdeclarativeitem/data/keys.qml
@@ -7,6 +7,8 @@ Item {
     Keys.onReturnPressed: keysTestObject.keyPress(event.key, "Return", event.modifiers)
     Keys.onDigit0Pressed: keysTestObject.keyPress(event.key, event.text, event.modifiers)
     Keys.onDigit9Pressed: { event.accepted = false; keysTestObject.keyPress(event.key, event.text, event.modifiers) }
+    Keys.onTabPressed: keysTestObject.keyPress(event.key, "Tab", event.modifiers)
+    Keys.onBacktabPressed: keysTestObject.keyPress(event.key, "Backtab", event.modifiers)
     Keys.forwardTo: [ item2 ]
     Keys.enabled: enableKeyHanding
 
diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
index 36dcf1f..dbcba16 100644
--- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
+++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
@@ -176,6 +176,26 @@ void tst_QDeclarativeItem::keys()
 
     testObject->reset();
 
+    key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
+    QApplication::sendEvent(canvas, &key);
+    QCOMPARE(testObject->mKey, int(Qt::Key_Tab));
+    QCOMPARE(testObject->mForwardedKey, int(Qt::Key_Tab));
+    QCOMPARE(testObject->mText, QLatin1String("Tab"));
+    QVERIFY(testObject->mModifiers == Qt::NoModifier);
+    QVERIFY(key.isAccepted());
+
+    testObject->reset();
+
+    key = QKeyEvent(QEvent::KeyPress, Qt::Key_Backtab, Qt::NoModifier, "", false, 1);
+    QApplication::sendEvent(canvas, &key);
+    QCOMPARE(testObject->mKey, int(Qt::Key_Backtab));
+    QCOMPARE(testObject->mForwardedKey, int(Qt::Key_Backtab));
+    QCOMPARE(testObject->mText, QLatin1String("Backtab"));
+    QVERIFY(testObject->mModifiers == Qt::NoModifier);
+    QVERIFY(key.isAccepted());
+
+    testObject->reset();
+
     canvas->rootContext()->setContextProperty("enableKeyHanding", QVariant(false));
 
     key = QKeyEvent(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier, "", false, 1);
@@ -240,6 +260,24 @@ void tst_QDeclarativeItem::keyNavigation()
     item = findItem<QDeclarativeItem>(canvas->rootObject(), "item1");
     QVERIFY(item);
     QVERIFY(item->hasFocus());
+
+    // tab
+    key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
+    QApplication::sendEvent(canvas, &key);
+    QVERIFY(key.isAccepted());
+
+    item = findItem<QDeclarativeItem>(canvas->rootObject(), "item2");
+    QVERIFY(item);
+    QVERIFY(item->hasFocus());
+
+    // backtab
+    key = QKeyEvent(QEvent::KeyPress, Qt::Key_Backtab, Qt::NoModifier, "", false, 1);
+    QApplication::sendEvent(canvas, &key);
+    QVERIFY(key.isAccepted());
+
+    item = findItem<QDeclarativeItem>(canvas->rootObject(), "item1");
+    QVERIFY(item);
+    QVERIFY(item->hasFocus());
 }
 
 void tst_QDeclarativeItem::smooth()
-- 
cgit v0.12


From 83cbbd6c4c9ff2f00651c31af0d52845b2e98390 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Thu, 4 Mar 2010 18:22:49 +1000
Subject: Add testcase for QTBUG-7730

---
 .../declarative/qdeclarativeecmascript/data/scope.4.qml | 12 ++++++++++++
 .../tst_qdeclarativeecmascript.cpp                      | 17 +++++++++++++++++
 2 files changed, 29 insertions(+)
 create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/scope.4.qml

diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scope.4.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scope.4.qml
new file mode 100644
index 0000000..d65b6e7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/scope.4.qml
@@ -0,0 +1,12 @@
+import Qt.test 1.0
+
+MyQmlObject {
+    id: a
+    property int b: 9
+
+    property int test
+    property string test2
+
+    // Should resolve to signal arguments, not to other elements in the file
+    onArgumentSignal: { test = a; test2 = b; }
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 2e00e10..b5649cb 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -740,6 +740,23 @@ void tst_qdeclarativeecmascript::scope()
         QCOMPARE(object->property("test2").toBool(), true);
         QCOMPARE(object->property("test3").toBool(), true);
     }
+
+    // Signal argument scope
+    {
+        QDeclarativeComponent component(&engine, TEST_FILE("scope.4.qml"));
+        MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+        QVERIFY(object != 0);
+
+        QCOMPARE(object->property("test").toInt(), 0);
+        QCOMPARE(object->property("test2").toString(), QString());
+
+        emit object->argumentSignal(13, "Argument Scope", 9);
+
+        QCOMPARE(object->property("test").toInt(), 13);
+        QCOMPARE(object->property("test2").toString(), QString("Argument Scope"));
+
+        delete object;
+    }
 }
 
 /*
-- 
cgit v0.12


From c7fec28e7b2f7192c6589c37f3db3e0b4ee85460 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Thu, 4 Mar 2010 10:21:06 +0100
Subject: Fixes tst_QScriptExtQObject::connectAndDisconnect

Now that QVariant is known to QMetaType, it has an ID.

This is much more robust as before. This would have fail if QVariant,
would have been registered by the user.

Reviewed-by: Kent Hansen
---
 src/script/bridge/qscriptqobject.cpp | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/script/bridge/qscriptqobject.cpp b/src/script/bridge/qscriptqobject.cpp
index 8d111f9..39ba935 100644
--- a/src/script/bridge/qscriptqobject.cpp
+++ b/src/script/bridge/qscriptqobject.cpp
@@ -2174,14 +2174,12 @@ void QObjectConnectionManager::execute(int slotIndex, void **argv)
         QByteArray typeName = parameterTypes.at(i);
         int argType = QMetaType::type(parameterTypes.at(i));
         if (!argType) {
-            if (typeName == "QVariant") {
-                actual = QScriptEnginePrivate::jscValueFromVariant(exec, *reinterpret_cast<QVariant*>(arg));
-            } else {
-                qWarning("QScriptEngine: Unable to handle unregistered datatype '%s' "
-                         "when invoking handler of signal %s::%s",
-                         typeName.constData(), meta->className(), method.signature());
-                actual = JSC::jsUndefined();
-            }
+            qWarning("QScriptEngine: Unable to handle unregistered datatype '%s' "
+                        "when invoking handler of signal %s::%s",
+                        typeName.constData(), meta->className(), method.signature());
+            actual = JSC::jsUndefined();
+        } else if (argType == QMetaType::QVariant) {
+            actual = QScriptEnginePrivate::jscValueFromVariant(exec, *reinterpret_cast<QVariant*>(arg));
         } else {
             actual = QScriptEnginePrivate::create(exec, argType, arg);
         }
-- 
cgit v0.12


From a99fe8624a25f8a09fe9b3234306a4d8b3a3f38e Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Thu, 4 Mar 2010 10:47:36 +0100
Subject: QScript: Test against QMetaType::QVariant instead of against the
 string

now that QVariant is known to QMetaType, we can test for the metatype id
instead of doing string comparison

Reviewed-by: Kent Hansen
---
 src/script/api/qscriptengine.cpp     | 11 ++++++-----
 src/script/bridge/qscriptqobject.cpp | 37 ++++++++++++++----------------------
 2 files changed, 20 insertions(+), 28 deletions(-)

diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index 9cd5c63..47c5262 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -2901,6 +2901,9 @@ JSC::JSValue QScriptEnginePrivate::create(JSC::ExecState *exec, int type, const
             result = eng->newQObject(*reinterpret_cast<QObject* const *>(ptr));
             break;
 #endif
+        case QMetaType::QVariant:
+            result = jscValueFromVariant(exec, *reinterpret_cast<const QVariant*>(ptr));
+            break;
         default:
             if (type == qMetaTypeId<QScriptValue>()) {
                 result = eng->scriptValueToJSCValue(*reinterpret_cast<const QScriptValue*>(ptr));
@@ -2922,8 +2925,6 @@ JSC::JSValue QScriptEnginePrivate::create(JSC::ExecState *exec, int type, const
 
             else {
                 QByteArray typeName = QMetaType::typeName(type);
-                if (typeName == "QVariant")
-                    result = jscValueFromVariant(exec, *reinterpret_cast<const QVariant*>(ptr));
                 if (typeName.endsWith('*') && !*reinterpret_cast<void* const *>(ptr))
                     return JSC::jsNull();
                 else
@@ -3046,6 +3047,9 @@ bool QScriptEnginePrivate::convertValue(JSC::ExecState *exec, JSC::JSValue value
             *reinterpret_cast<QVariantMap *>(ptr) = variantMapFromObject(exec, value);
             return true;
         } break;
+    case QMetaType::QVariant:
+        *reinterpret_cast<QVariant*>(ptr) = toVariant(exec, value);
+        return true;
     default:
     ;
     }
@@ -3096,9 +3100,6 @@ bool QScriptEnginePrivate::convertValue(JSC::ExecState *exec, JSC::JSValue value
             return false;
         *reinterpret_cast<QScriptValue*>(ptr) = eng->scriptValueFromJSCValue(value);
         return true;
-    } else if (name == "QVariant") {
-        *reinterpret_cast<QVariant*>(ptr) = toVariant(exec, value);
-        return true;
     }
 
     // lazy registration of some common list types
diff --git a/src/script/bridge/qscriptqobject.cpp b/src/script/bridge/qscriptqobject.cpp
index 39ba935..91636da 100644
--- a/src/script/bridge/qscriptqobject.cpp
+++ b/src/script/bridge/qscriptqobject.cpp
@@ -523,19 +523,15 @@ static JSC::JSValue callQtMethod(JSC::ExecState *exec, QMetaMethod::MethodType c
         QByteArray returnTypeName = method.typeName();
         int rtype = QMetaType::type(returnTypeName);
         if ((rtype == 0) && !returnTypeName.isEmpty()) {
-            if (returnTypeName == "QVariant") {
-                types.append(QScriptMetaType::variant());
-            } else {
-                int enumIndex = indexOfMetaEnum(meta, returnTypeName);
-                if (enumIndex != -1)
-                    types.append(QScriptMetaType::metaEnum(enumIndex, returnTypeName));
-                else
-                    types.append(QScriptMetaType::unresolved(returnTypeName));
-            }
+            int enumIndex = indexOfMetaEnum(meta, returnTypeName);
+            if (enumIndex != -1)
+                types.append(QScriptMetaType::metaEnum(enumIndex, returnTypeName));
+            else
+                types.append(QScriptMetaType::unresolved(returnTypeName));
         } else {
             if (callType == QMetaMethod::Constructor)
                 types.append(QScriptMetaType::metaType(QMetaType::QObjectStar, "QObject*"));
-            else if (returnTypeName == "QVariant")
+            else if (rtype == QMetaType::QVariant)
                 types.append(QScriptMetaType::variant());
             else
                 types.append(QScriptMetaType::metaType(rtype, returnTypeName));
@@ -547,20 +543,15 @@ static JSC::JSValue callQtMethod(JSC::ExecState *exec, QMetaMethod::MethodType c
             QByteArray argTypeName = parameterTypeNames.at(i);
             int atype = QMetaType::type(argTypeName);
             if (atype == 0) {
-                if (argTypeName == "QVariant") {
-                    types.append(QScriptMetaType::variant());
-                } else {
-                    int enumIndex = indexOfMetaEnum(meta, argTypeName);
-                    if (enumIndex != -1)
-                        types.append(QScriptMetaType::metaEnum(enumIndex, argTypeName));
-                    else
-                        types.append(QScriptMetaType::unresolved(argTypeName));
-                }
-            } else {
-                if (argTypeName == "QVariant")
-                    types.append(QScriptMetaType::variant());
+                int enumIndex = indexOfMetaEnum(meta, argTypeName);
+                if (enumIndex != -1)
+                    types.append(QScriptMetaType::metaEnum(enumIndex, argTypeName));
                 else
-                    types.append(QScriptMetaType::metaType(atype, argTypeName));
+                    types.append(QScriptMetaType::unresolved(argTypeName));
+            } else if (atype == QMetaType::QVariant) {
+                types.append(QScriptMetaType::variant());
+            } else {
+                types.append(QScriptMetaType::metaType(atype, argTypeName));
             }
         }
 
-- 
cgit v0.12


From 625f6b92a08d8ef2a1e5697fce28ca39d29917fe Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Thu, 4 Mar 2010 10:57:15 +0100
Subject: Fixes QMenu to only have static POD members

This also fixes the autotests
---
 src/gui/widgets/qmenu.cpp | 24 ++++++++++++------------
 src/gui/widgets/qmenu_p.h |  6 +++---
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index 5db14b8..9a4916e 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -85,9 +85,8 @@
 
 QT_BEGIN_NAMESPACE
 
-QPointer<QMenu> QMenuPrivate::mouseDown;
-QBasicTimer QMenuPrivate::menuDelayTimer;
-QBasicTimer QMenuPrivate::sloppyDelayTimer;
+QMenu *QMenuPrivate::mouseDown = 0;
+int QMenuPrivate::sloppyDelayTimer = 0;
 
 /* QMenu code */
 // internal class used for the torn off popup
@@ -487,8 +486,8 @@ void QMenuPrivate::popupAction(QAction *action, int delay, bool activateFirst)
     if (action && action->isEnabled()) {
         if (!delay)
             q->internalDelayedPopup();
-        else if (!QMenuPrivate::menuDelayTimer.isActive() && (!action->menu() || !action->menu()->isVisible()))
-            QMenuPrivate::menuDelayTimer.start(delay, q);
+        else if (!menuDelayTimer.isActive() && (!action->menu() || !action->menu()->isVisible()))
+            menuDelayTimer.start(delay, q);
         if (activateFirst && action->menu())
             action->menu()->d_func()->setFirstActionActive();
     } else if (QMenu *menu = activeMenu) {  //hide the current item
@@ -2375,8 +2374,8 @@ QMenu::event(QEvent *e)
         }
     } break;
     case QEvent::ContextMenu:
-        if(QMenuPrivate::menuDelayTimer.isActive()) {
-            QMenuPrivate::menuDelayTimer.stop();
+        if(d->menuDelayTimer.isActive()) {
+            d->menuDelayTimer.stop();
             internalDelayedPopup();
         }
         break;
@@ -2809,7 +2808,7 @@ void QMenu::mouseMoveEvent(QMouseEvent *e)
     }
     if (d->sloppyRegion.contains(e->pos())) {
         d->sloppyAction = action;
-        QMenuPrivate::sloppyDelayTimer.start(style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, this)*6, this);
+        QMenuPrivate::sloppyDelayTimer = startTimer(style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, this)*6);
     } else {
         d->setCurrentAction(action, style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, this));
     }
@@ -2847,11 +2846,12 @@ QMenu::timerEvent(QTimerEvent *e)
         d->scrollMenu((QMenuPrivate::QMenuScroller::ScrollDirection)d->scroll->scrollDirection);
         if (d->scroll->scrollFlags == QMenuPrivate::QMenuScroller::ScrollNone)
             d->scroll->scrollTimer.stop();
-    } else if(QMenuPrivate::menuDelayTimer.timerId() == e->timerId()) {
-        QMenuPrivate::menuDelayTimer.stop();
+    } else if(d->menuDelayTimer.timerId() == e->timerId()) {
+        d->menuDelayTimer.stop();
         internalDelayedPopup();
-    } else if(QMenuPrivate::sloppyDelayTimer.timerId() == e->timerId()) {
-        QMenuPrivate::sloppyDelayTimer.stop();
+    } else if(QMenuPrivate::sloppyDelayTimer == e->timerId()) {
+        killTimer(QMenuPrivate::sloppyDelayTimer);
+        QMenuPrivate::sloppyDelayTimer = 0;
         internalSetSloppyAction();
     } else if(d->searchBufferTimer.timerId() == e->timerId()) {
         d->searchBuffer.clear();
diff --git a/src/gui/widgets/qmenu_p.h b/src/gui/widgets/qmenu_p.h
index aaed6b1..276ffe6 100644
--- a/src/gui/widgets/qmenu_p.h
+++ b/src/gui/widgets/qmenu_p.h
@@ -202,7 +202,7 @@ public:
     bool activationRecursionGuard;
 
     //selection
-    static QPointer<QMenu> mouseDown;
+    static QMenu *mouseDown;
     QPoint mousePopupPos;
     uint hasHadMouse : 1;
     uint aboutToHide : 1;
@@ -212,7 +212,7 @@ public:
     QAction *selectAction;
     QAction *cancelAction;
 #endif
-    static QBasicTimer menuDelayTimer;
+    QBasicTimer menuDelayTimer;
     enum SelectionReason {
         SelectedFromKeyboard,
         SelectedFromElsewhere
@@ -272,7 +272,7 @@ public:
     mutable bool hasCheckableItems;
 
     //sloppy selection
-    static QBasicTimer sloppyDelayTimer;
+    static int sloppyDelayTimer;
     mutable QAction *sloppyAction;
     QRegion sloppyRegion;
 
-- 
cgit v0.12


From e53480370409b96d24d3f53513e8b2019a398e70 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Thu, 4 Mar 2010 11:12:44 +0100
Subject: Finish to resolve merge conflict.

Move the change that were made in commit 9957e85e37345e946ecc67196d65fbca867a2001
from src/multimedia/qml/qml.pri to src/multimedia/effects/effects.pri
---
 src/multimedia/effects/effects.pri | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/multimedia/effects/effects.pri b/src/multimedia/effects/effects.pri
index 5edd452..ff762e8 100644
--- a/src/multimedia/effects/effects.pri
+++ b/src/multimedia/effects/effects.pri
@@ -1,15 +1,16 @@
 
 
-
-system(pkg-config --exists \'libpulse >= 0.9.10\') {
-    DEFINES += QT_MULTIMEDIA_PULSEAUDIO
-    HEADERS += $$PWD/qsoundeffect_pulse_p.h
-    SOURCES += $$PWD/qsoundeffect_pulse_p.cpp
-    LIBS += -lpulse
-} else:x11 {
-    DEFINES += QT_MULTIMEDIA_QMEDIAPLAYER
-    HEADERS += $$PWD/qsoundeffect_qmedia_p.h
-    SOURCES += $$PWD/qsoundeffect_qmedia_p.cpp
+unix {
+    unix:contains(QT_CONFIG, pulseaudio) {
+        DEFINES += QT_MULTIMEDIA_PULSEAUDIO
+        HEADERS += $$PWD/qsoundeffect_pulse_p.h
+        SOURCES += $$PWD/qsoundeffect_pulse_p.cpp
+        LIBS += -lpulse
+    } else {
+        DEFINES += QT_MULTIMEDIA_QMEDIAPLAYER
+        HEADERS += $$PWD/qsoundeffect_qmedia_p.h
+        SOURCES += $$PWD/qsoundeffect_qmedia_p.cpp
+    }
 } else {
     HEADERS += $$PWD/qsoundeffect_qsound_p.h
     SOURCES += $$PWD/qsoundeffect_qsound_p.cpp
-- 
cgit v0.12


From 24c56ac5309150cf7ba42cd974df4e98d97ebb81 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Thu, 4 Mar 2010 11:21:37 +0100
Subject: Build fix for Sun Studio

Task-number: QTBUG-8192
---
 src/gui/widgets/qcombobox.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gui/widgets/qcombobox.h b/src/gui/widgets/qcombobox.h
index 9b19a66..fb9af9f 100644
--- a/src/gui/widgets/qcombobox.h
+++ b/src/gui/widgets/qcombobox.h
@@ -111,10 +111,10 @@ public:
     bool hasFrame() const;
 
     inline int findText(const QString &text,
-                        Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const
+                        Qt::MatchFlags flags = static_cast<Qt::MatchFlags>(Qt::MatchExactly|Qt::MatchCaseSensitive)) const
         { return findData(text, Qt::DisplayRole, flags); }
     int findData(const QVariant &data, int role = Qt::UserRole,
-                 Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const;
+                 Qt::MatchFlags flags = static_cast<Qt::MatchFlags>(Qt::MatchExactly|Qt::MatchCaseSensitive)) const;
 
     enum InsertPolicy {
         NoInsert,
-- 
cgit v0.12


From cd2afafbc9c29393a80d415145c49eb5f439da55 Mon Sep 17 00:00:00 2001
From: Pierre Rossi <pierre.rossi@nokia.com>
Date: Fri, 26 Feb 2010 16:57:38 +0100
Subject: Delay the resize section for better performance.

This was particularly unusable when combining a QSortFilterProxyModel
with resize mode ResizeToContents.

Task-number: QTBUG-8540
Reviewed-by: Thierry
---
 src/gui/itemviews/qheaderview.cpp | 4 ++--
 src/gui/itemviews/qtableview.cpp  | 7 +------
 src/gui/itemviews/qtreeview.cpp   | 6 ++----
 3 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/src/gui/itemviews/qheaderview.cpp b/src/gui/itemviews/qheaderview.cpp
index 5128b64..eb3db21 100644
--- a/src/gui/itemviews/qheaderview.cpp
+++ b/src/gui/itemviews/qheaderview.cpp
@@ -2037,7 +2037,7 @@ bool QHeaderView::event(QEvent *e)
                 updateSection(d->hover);
         }
         break; }
-    case QEvent::Timer: { // ### reimplement timerEvent() instead ?
+    case QEvent::Timer: {
         QTimerEvent *te = static_cast<QTimerEvent*>(e);
         if (te->timerId() == d->delayedResize.timerId()) {
             d->delayedResize.stop();
@@ -2610,7 +2610,7 @@ void QHeaderView::updateGeometries()
     Q_D(QHeaderView);
     d->layoutChildren();
     if (d->hasAutoResizeSections())
-        resizeSections();
+        d->doDelayedResizeSections();
 }
 
 /*!
diff --git a/src/gui/itemviews/qtableview.cpp b/src/gui/itemviews/qtableview.cpp
index 3111896..bdc1205 100644
--- a/src/gui/itemviews/qtableview.cpp
+++ b/src/gui/itemviews/qtableview.cpp
@@ -1960,12 +1960,7 @@ QModelIndexList QTableView::selectedIndexes() const
 void QTableView::rowCountChanged(int /*oldCount*/, int /*newCount*/ )
 {
     Q_D(QTableView);
-    updateGeometries();
-    if (verticalScrollMode() == QAbstractItemView::ScrollPerItem)
-        d->verticalHeader->setOffsetToSectionPosition(verticalScrollBar()->value());
-    else
-        d->verticalHeader->setOffset(verticalScrollBar()->value());
-    d->viewport->update();
+    d->doDelayedItemsLayout();
 }
 
 /*!
diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
index 37168eb..1145235 100644
--- a/src/gui/itemviews/qtreeview.cpp
+++ b/src/gui/itemviews/qtreeview.cpp
@@ -2524,8 +2524,7 @@ void QTreeView::rowsInserted(const QModelIndex &parent, int start, int end)
             d->viewItems[parentItem].hasChildren = true;
         d->updateChildCount(parentItem, delta);
 
-        updateGeometries();
-        viewport()->update();
+        d->doDelayedItemsLayout();
     } else if ((parentItem != -1) && d->viewItems.at(parentItem).expanded) {
         d->doDelayedItemsLayout();
     } else if (parentItem != -1 && (d->model->rowCount(parent) == end - start + 1)) {
@@ -3780,8 +3779,7 @@ void QTreeViewPrivate::rowsRemoved(const QModelIndex &parent,
             }
         }
         if (after) {
-            q->updateGeometries();
-            viewport->update();
+            doDelayedItemsLayout();
         } else {
             //we have removed items: we should at least update the scroll bar values.
             // They are used to determine the item geometry.
-- 
cgit v0.12


From 6f09fc3a475eb2e1c843f4aebe7ea0d15182ac1d Mon Sep 17 00:00:00 2001
From: Leonardo Sobral Cunha <leo.cunha@nokia.com>
Date: Thu, 4 Mar 2010 12:49:56 +0100
Subject: Update QML PropertyAnimation::easing docs

Task-number: QTBUG-8726
---
 src/declarative/util/qdeclarativeanimation.cpp | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp
index f33d7c7..76b6a58 100644
--- a/src/declarative/util/qdeclarativeanimation.cpp
+++ b/src/declarative/util/qdeclarativeanimation.cpp
@@ -1736,7 +1736,7 @@ void QDeclarativePropertyAnimationPrivate::convertVariant(QVariant &variant, int
     Animate any objects that have changed their x or y properties in the target state using
     an InOutQuad easing curve:
     \qml
-    Transition { PropertyAnimation { properties: "x,y"; easing: "InOutQuad" } }
+    Transition { PropertyAnimation { properties: "x,y"; easing.type: "InOutQuad" } }
     \endqml
     \o In a Behavior
 
@@ -1877,7 +1877,13 @@ void QDeclarativePropertyAnimation::setTo(const QVariant &t)
     \qmlproperty QEasingCurve PropertyAnimation::easing
     \brief the easing curve used for the transition.
 
-    Available values are:
+    For the easing you can specify the following parameters: type, amplitude, period and overshoot.
+
+    \qml
+    PropertyAnimation { properties: "y"; easing.type: "InOutElastc"; easing.amplitude: 2.0; easing.period: 1.5 }
+    \endqml
+
+    Available types are:
 
     \table
     \row
@@ -2048,6 +2054,15 @@ void QDeclarativePropertyAnimation::setTo(const QVariant &t)
         \o \inlineimage qeasingcurve-outinbounce.png
     \endtable
 
+    easing.amplitude is not applicable for all curve types. It is only applicable for bounce and elastic curves (curves of type
+    QEasingCurve::InBounce, QEasingCurve::OutBounce, QEasingCurve::InOutBounce, QEasingCurve::OutInBounce, QEasingCurve::InElastic,
+    QEasingCurve::OutElastic, QEasingCurve::InOutElastic or QEasingCurve::OutInElastic).
+
+    easing.overshoot is not applicable for all curve types. It is only applicable if type is: QEasingCurve::InBack, QEasingCurve::OutBack,
+    QEasingCurve::InOutBack or QEasingCurve::OutInBack.
+
+    easing.period is not applicable for all curve types. It is only applicable if type is: QEasingCurve::InElastic, QEasingCurve::OutElastic,
+    QEasingCurve::InOutElastic or QEasingCurve::OutInElastic.
 */
 QEasingCurve QDeclarativePropertyAnimation::easing() const
 {
-- 
cgit v0.12


From ed1f672efb19932fe279a3ebfedb973c02c4fee4 Mon Sep 17 00:00:00 2001
From: Tom Cooksey <thomas.cooksey@nokia.com>
Date: Thu, 4 Mar 2010 13:03:51 +0100
Subject: Fix build on EGL implementations where EGLConfig is a pointer

EGLConfig is an opaque type which we really shouldn't cast to an int.
Instead, we get the config id for the EGLConfig.

Reviewed-By: TrustMe
---
 src/gui/egl/qegl_x11.cpp  | 19 +++++++++++--------
 src/opengl/qgl_x11egl.cpp |  5 ++---
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/gui/egl/qegl_x11.cpp b/src/gui/egl/qegl_x11.cpp
index 339bd57..483c01d 100644
--- a/src/gui/egl/qegl_x11.cpp
+++ b/src/gui/egl/qegl_x11.cpp
@@ -149,6 +149,9 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config)
     eglGetConfigAttrib(display(), config, EGL_BUFFER_SIZE, &eglValue);
     int configBitDepth = eglValue;
 
+    eglGetConfigAttrib(display(), config, EGL_CONFIG_ID, &eglValue);
+    int configId = eglValue;
+
     // See if EGL provided a valid VisualID:
     eglGetConfigAttrib(display(), config, EGL_NATIVE_VISUAL_ID, &eglValue);
     visualId = (VisualID)eglValue;
@@ -170,14 +173,14 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config)
                     format = XRenderFindVisualFormat(X11->display, chosenVisualInfo->visual);
                     if (!format || (format->type != PictTypeDirect) || (!format->direct.alphaMask)) {
                         qWarning("Warning: EGL suggested using X visual ID %d for config %d, but this is not ARGB",
-                                 (int)visualId, (int)config);
+                                 (int)visualId, configId);
                         visualId = 0;
                     }
                 }
 #endif
             } else {
                 qWarning("Warning: EGL suggested using X visual ID %d (%d bpp) for config %d (%d bpp), but the depths do not match!",
-                         (int)visualId, chosenVisualInfo->depth, (int)config, configBitDepth);
+                         (int)visualId, chosenVisualInfo->depth, configId, configBitDepth);
                 visualId = 0;
             }
         }
@@ -187,9 +190,9 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config)
     if (visualId) {
 #ifdef QT_DEBUG_X11_VISUAL_SELECTION
         if (configAlphaSize > 0)
-            qDebug("Using ARGB Visual ID %d provided by EGL for config %d", (int)visualId, (int)config);
+            qDebug("Using ARGB Visual ID %d provided by EGL for config %d", (int)visualId, configId);
         else
-            qDebug("Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, (int)config);
+            qDebug("Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, configId);
 #endif
         return visualId;
     }
@@ -232,9 +235,9 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config)
     if (visualId) {
 # ifdef QT_DEBUG_X11_VISUAL_SELECTION
         if (configAlphaSize > 0)
-            qDebug("Using ARGB Visual ID %d provided by XRender for EGL config %d", (int)visualId, (int)config);
+            qDebug("Using ARGB Visual ID %d provided by XRender for EGL config %d", (int)visualId, configId);
         else
-            qDebug("Using Opaque Visual ID %d provided by XRender for EGL config %d", (int)visualId, (int)config);
+            qDebug("Using Opaque Visual ID %d provided by XRender for EGL config %d", (int)visualId, configId);
 # endif // QT_DEBUG_X11_VISUAL_SELECTION
         return visualId;
     }
@@ -263,12 +266,12 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config)
 
     if (visualId) {
 #ifdef QT_DEBUG_X11_VISUAL_SELECTION
-        qDebug("Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, (int)config);
+        qDebug("Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, configId);
 #endif
         return visualId;
     }
 
-    qWarning("Unable to find an X11 visual which matches EGL config %d", (int)config);
+    qWarning("Unable to find an X11 visual which matches EGL config %d", configId);
     return (VisualID)0;
 }
 
diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp
index ba05e72..123bbdd 100644
--- a/src/opengl/qgl_x11egl.cpp
+++ b/src/opengl/qgl_x11egl.cpp
@@ -404,7 +404,7 @@ EGLConfig Q_OPENGL_EXPORT qt_chooseEGLConfigForPixmap(bool hasAlpha, bool readOn
             if (configCount > 0) {
                 // Got one
                 qDebug() << "Found an" << (hasAlpha ? "ARGB" : "RGB") << (readOnly ? "readonly" : "target" )
-                         << "config (" << int(*targetConfig) << ") to create a pixmap surface:";
+                         << "config to create a pixmap surface:";
 
 //                QEglProperties configProps(*targetConfig);
 //                qDebug() << configProps.toString();
@@ -446,8 +446,7 @@ bool Q_OPENGL_EXPORT qt_createEGLSurfaceForPixmap(QPixmapData* pmd, bool readOnl
 //    qDebug("qt_createEGLSurfaceForPixmap() created surface 0x%x for pixmap 0x%x",
 //           pixmapSurface, pixmapData->handle());
     if (pixmapSurface == EGL_NO_SURFACE) {
-        qWarning() << "Failed to create a pixmap surface using config" << (int)pixmapConfig
-                   << ":" << QEgl::errorString();
+        qWarning() << "Failed to create a pixmap surface:" << QEgl::errorString();
         return false;
     }
 
-- 
cgit v0.12


From c5264c89b7710dc2f2d8c7c604f0b23852cb2eef Mon Sep 17 00:00:00 2001
From: Tom Cooksey <thomas.cooksey@nokia.com>
Date: Thu, 4 Mar 2010 13:08:32 +0100
Subject: Fix build when egl.h includes X11 headers & pollutes namespace

At some point we should fix the include order in all the .cpp files,
however #udef'ing the defines we use elsewhere seems to work for now.

Reviewed-By: TrustMe
---
 src/gui/egl/qegl_p.h | 2 ++
 src/opengl/qgl_p.h   | 8 +-------
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h
index aa89772..ffb45aa 100644
--- a/src/gui/egl/qegl_p.h
+++ b/src/gui/egl/qegl_p.h
@@ -77,6 +77,8 @@ QT_BEGIN_INCLUDE_NAMESPACE
 #undef Type
 #undef FontChange
 #undef CursorShape
+#undef Unsorted
+#undef GrayScale
 #endif
 
 // Internally we use the EGL-prefixed native types which are used in EGL >= 1.3.
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index b828bea..c142715 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -65,13 +65,7 @@
 #include "qglpaintdevice_p.h"
 
 #ifdef QT_OPENGL_ES
-QT_BEGIN_INCLUDE_NAMESPACE
-#if defined(QT_OPENGL_ES_2)
-#include <EGL/egl.h>
-#else
-#include <GLES/egl.h>
-#endif
-QT_END_INCLUDE_NAMESPACE
+#include <QtGui/private/qegl_p.h>
 #endif
 
 QT_BEGIN_NAMESPACE
-- 
cgit v0.12


From 4984b36c73fb59006a28051ea82bdca0b7aeb457 Mon Sep 17 00:00:00 2001
From: John Layt <john@layt.net>
Date: Tue, 16 Feb 2010 01:13:13 +0000
Subject: QPrinter: Add Current Page print range support

Support the selection of Current Page option in the print dialog by
activating a new QPrintDialog::PrintDialogOption.  If selected the
PrintRange is set to CurrentPage.

It is the responsibility of the application to read the PrintRange and
apply the Current Page selection when rendering the pages.

Merge-request: 2311
Reviewed-by: Trond
---
 src/gui/dialogs/qabstractprintdialog.cpp |   7 +-
 src/gui/dialogs/qabstractprintdialog.h   |   6 +-
 src/gui/dialogs/qprintdialog_qws.cpp     |  11 ++
 src/gui/dialogs/qprintdialog_unix.cpp    |  11 +-
 src/gui/dialogs/qprintdialog_win.cpp     |  16 +-
 src/gui/dialogs/qprintsettingsoutput.ui  | 246 +++++++++++++++----------------
 src/gui/painting/qprinter.cpp            |   3 +
 src/gui/painting/qprinter.h              |   2 +-
 tests/auto/qprinter/tst_qprinter.cpp     |  23 +++
 9 files changed, 186 insertions(+), 139 deletions(-)

diff --git a/src/gui/dialogs/qabstractprintdialog.cpp b/src/gui/dialogs/qabstractprintdialog.cpp
index 4523433..25d9ebb 100644
--- a/src/gui/dialogs/qabstractprintdialog.cpp
+++ b/src/gui/dialogs/qabstractprintdialog.cpp
@@ -76,6 +76,7 @@ class QPrintDialogPrivate : public QAbstractPrintDialogPrivate
     \value AllPages All pages should be printed.
     \value Selection Only the selection should be printed.
     \value PageRange The specified page range should be printed.
+    \value CurrentPage Only the currently visible page should be printed.
 
     \sa QPrinter::PrintRange
 */
@@ -89,7 +90,9 @@ class QPrintDialogPrivate : public QAbstractPrintDialogPrivate
     \value PrintToFile The print to file option is enabled.
     \value PrintSelection The print selection option is enabled.
     \value PrintPageRange The page range selection option is enabled.
-    \value PrintCollateCopies
+    \value PrintShowPageSize  Show the page size + margins page only if this is enabled.
+    \value PrintCollateCopies The collate copies option is enabled
+    \value PrintCurrentPage The print current page option is enabled
 
     This value is obsolete and does nothing since Qt 4.5:
 
@@ -97,8 +100,6 @@ class QPrintDialogPrivate : public QAbstractPrintDialogPrivate
     would create a sheet by default the dialog was given a parent.
     This is no longer supported in Qt 4.5.  If you want to use sheets, use
     QPrintDialog::open() instead.
-
-    \value PrintShowPageSize  Show the page size + margins page only if this is enabled.
 */
 
 /*!
diff --git a/src/gui/dialogs/qabstractprintdialog.h b/src/gui/dialogs/qabstractprintdialog.h
index 4d867f6..82e3df8 100644
--- a/src/gui/dialogs/qabstractprintdialog.h
+++ b/src/gui/dialogs/qabstractprintdialog.h
@@ -65,7 +65,8 @@ public:
     enum PrintRange {
         AllPages,
         Selection,
-        PageRange
+        PageRange,
+        CurrentPage
     };
 
     enum PrintDialogOption {
@@ -75,7 +76,8 @@ public:
         PrintPageRange          = 0x0004,
         PrintShowPageSize       = 0x0008,
         PrintCollateCopies      = 0x0010,
-        DontUseSheet            = 0x0020
+        DontUseSheet            = 0x0020,
+        PrintCurrentPage        = 0x0040
     };
 
     Q_DECLARE_FLAGS(PrintDialogOptions, PrintDialogOption)
diff --git a/src/gui/dialogs/qprintdialog_qws.cpp b/src/gui/dialogs/qprintdialog_qws.cpp
index 1336c04..b071427 100644
--- a/src/gui/dialogs/qprintdialog_qws.cpp
+++ b/src/gui/dialogs/qprintdialog_qws.cpp
@@ -178,6 +178,10 @@ void QPrintDialogPrivate::_q_okClicked()
         q->setPrintRange(QPrintDialog::PageRange);
         q->setFromTo(firstPage->value(), lastPage->value());
         break;
+    case (int)QPrintDialog::CurrentPage:
+        q->setPrintRange(QPrintDialog::CurrentPage);
+        q->setFromTo(0, 0);
+        break;
     }
     q->accept();
 }
@@ -375,6 +379,7 @@ void QPrintDialogPrivate::setupOptions()
     rangeCombo->addItem(QPrintDialog::tr("Print all"), QPrintDialog::AllPages);
     rangeCombo->addItem(QPrintDialog::tr("Print selection"), QPrintDialog::Selection);
     rangeCombo->addItem(QPrintDialog::tr("Print range"), QPrintDialog::PageRange);
+    rangeCombo->addItem(QPrintDialog::tr("Print current page"), QPrintDialog::CurrentPage);
     QObject::connect(rangeCombo, SIGNAL(activated(int)),
             q, SLOT(_q_printRangeSelected(int)));
 
@@ -490,6 +495,9 @@ void QPrintDialogPrivate::setPrinter(QPrinter *p, bool pickUpSettings)
         if (!q->isOptionEnabled(QPrintDialog::PrintPageRange)
                 && rangeCombo->findData(QPrintDialog::PageRange) > 0)
             rangeCombo->removeItem(rangeCombo->findData(QPrintDialog::PageRange));
+        if (!q->isOptionEnabled(QPrintDialog::PrintCurrentPage)
+                && rangeCombo->findData(QPrintDialog::CurrentPage) > 0)
+            rangeCombo->removeItem(rangeCombo->findData(QPrintDialog::CurrentPage));
 
         switch (q->printRange()) {
         case QPrintDialog::AllPages:
@@ -501,6 +509,9 @@ void QPrintDialogPrivate::setPrinter(QPrinter *p, bool pickUpSettings)
         case QPrintDialog::PageRange:
             rangeCombo->setCurrentIndex((int)(QPrintDialog::PageRange));
             break;
+        case QPrintDialog::CurrentPage:
+            rangeCombo->setCurrentIndex((int)(QPrintDialog::CurrentPage));
+            break;
         }
     }
 
diff --git a/src/gui/dialogs/qprintdialog_unix.cpp b/src/gui/dialogs/qprintdialog_unix.cpp
index 2d169cf..0487f23 100644
--- a/src/gui/dialogs/qprintdialog_unix.cpp
+++ b/src/gui/dialogs/qprintdialog_unix.cpp
@@ -502,6 +502,9 @@ void QPrintDialogPrivate::setupPrinter()
     } else if (options.printSelection->isChecked()) {
         p->setPrintRange(QPrinter::Selection);
         p->setFromTo(0,0);
+    } else if (options.printCurrentPage->isChecked()) {
+        p->setPrintRange(QPrinter::CurrentPage);
+        p->setFromTo(0,0);
     } else if (options.printRange->isChecked()) {
         p->setPrintRange(QPrinter::PageRange);
         p->setFromTo(options.from->value(), qMax(options.from->value(), options.to->value()));
@@ -518,10 +521,12 @@ void QPrintDialogPrivate::updateWidgets()
 {
     Q_Q(QPrintDialog);
     options.gbPrintRange->setVisible(q->isOptionEnabled(QPrintDialog::PrintPageRange) ||
-                                q->isOptionEnabled(QPrintDialog::PrintSelection));
+                                     q->isOptionEnabled(QPrintDialog::PrintSelection) ||
+                                     q->isOptionEnabled(QPrintDialog::PrintCurrentPage));
 
     options.printRange->setEnabled(q->isOptionEnabled(QPrintDialog::PrintPageRange));
     options.printSelection->setVisible(q->isOptionEnabled(QPrintDialog::PrintSelection));
+    options.printCurrentPage->setVisible(q->isOptionEnabled(QPrintDialog::PrintCurrentPage));
     options.collate->setVisible(q->isOptionEnabled(QPrintDialog::PrintCollateCopies));
 
     switch (q->printRange()) {
@@ -534,6 +539,10 @@ void QPrintDialogPrivate::updateWidgets()
     case QPrintDialog::PageRange:
         options.printRange->setChecked(true);
         break;
+    case QPrintDialog::CurrentPage:
+        if (q->isOptionEnabled(QPrintDialog::PrintCurrentPage))
+            options.printCurrentPage->setChecked(true);
+        break;
     default:
         break;
     }
diff --git a/src/gui/dialogs/qprintdialog_win.cpp b/src/gui/dialogs/qprintdialog_win.cpp
index fa0c99f..1061660 100644
--- a/src/gui/dialogs/qprintdialog_win.cpp
+++ b/src/gui/dialogs/qprintdialog_win.cpp
@@ -128,11 +128,14 @@ static void qt_win_setup_PRINTDLGEX(PRINTDLGEX *pd, QWidget *parent,
     if (pd->nMinPage==0 && pd->nMaxPage==0)
         pd->Flags |= PD_NOPAGENUMS;
 
-    // we don't have a 'current page' notion in the QPrinter API yet.
-    // Neither do we support more than one page range, so limit those
-    // options
-    pd->Flags |= PD_NOCURRENTPAGE;
+    // Disable Current Page option if not required as default is Enabled
+    if (!pdlg->isOptionEnabled(QPrintDialog::PrintCurrentPage))
+        pd->Flags |= PD_NOCURRENTPAGE;
+
+    // Default to showing the General tab first
     pd->nStartPage = START_PAGE_GENERAL;
+
+    // We don't support more than one page range in the QPrinter API yet.
     pd->nPageRanges = 1;
     pd->nMaxPageRanges = 1;
 
@@ -153,7 +156,10 @@ static void qt_win_read_back_PRINTDLGEX(PRINTDLGEX *pd, QPrintDialog *pdlg, QPri
     } else if (pd->Flags & PD_PAGENUMS) {
         pdlg->setPrintRange(QPrintDialog::PageRange);
         pdlg->setFromTo(pd->lpPageRanges[0].nFromPage, pd->lpPageRanges[0].nToPage);
-    } else {
+    } else if (pd->Flags & PD_CURRENTPAGE) {
+        pdlg->setPrintRange(QPrintDialog::CurrentPage);
+        pdlg->setFromTo(0, 0);
+    } else { // PD_ALLPAGES
         pdlg->setPrintRange(QPrintDialog::AllPages);
         pdlg->setFromTo(0, 0);
     }
diff --git a/src/gui/dialogs/qprintsettingsoutput.ui b/src/gui/dialogs/qprintsettingsoutput.ui
index fc57e86..be91679 100644
--- a/src/gui/dialogs/qprintsettingsoutput.ui
+++ b/src/gui/dialogs/qprintsettingsoutput.ui
@@ -1,121 +1,114 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>QPrintSettingsOutput</class>
- <widget class="QWidget" name="QPrintSettingsOutput" >
-  <property name="geometry" >
+ <widget class="QWidget" name="QPrintSettingsOutput">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>416</width>
-    <height>166</height>
+    <width>426</width>
+    <height>171</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QHBoxLayout" name="horizontalLayout_2" >
-   <property name="margin" >
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
+   <property name="margin">
     <number>0</number>
    </property>
    <item>
-    <widget class="QTabWidget" name="tabs" >
-     <property name="currentIndex" >
+    <widget class="QTabWidget" name="tabs">
+     <property name="currentIndex">
       <number>0</number>
      </property>
-     <widget class="QWidget" name="copiesTab" >
-      <property name="geometry" >
-       <rect>
-        <x>0</x>
-        <y>0</y>
-        <width>412</width>
-        <height>139</height>
-       </rect>
-      </property>
-      <attribute name="title" >
+     <widget class="QWidget" name="copiesTab">
+      <attribute name="title">
        <string>Copies</string>
       </attribute>
-      <layout class="QHBoxLayout" name="horizontalLayout" >
+      <layout class="QHBoxLayout" name="horizontalLayout">
        <item>
-        <widget class="QGroupBox" name="gbPrintRange" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Minimum" hsizetype="Preferred" >
+        <widget class="QGroupBox" name="gbPrintRange">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <property name="title" >
+         <property name="title">
           <string>Print range</string>
          </property>
-         <layout class="QVBoxLayout" name="_3" >
-          <property name="spacing" >
+         <layout class="QVBoxLayout" name="_3">
+          <property name="spacing">
            <number>4</number>
           </property>
-          <property name="margin" >
+          <property name="margin">
            <number>6</number>
           </property>
           <item>
-           <widget class="QRadioButton" name="printAll" >
-            <property name="text" >
+           <widget class="QRadioButton" name="printAll">
+            <property name="text">
              <string>Print all</string>
             </property>
-            <property name="checked" >
+            <property name="checked">
              <bool>true</bool>
             </property>
            </widget>
           </item>
           <item>
-           <layout class="QHBoxLayout" name="_4" >
-            <property name="spacing" >
+           <layout class="QHBoxLayout" name="_4">
+            <property name="spacing">
              <number>6</number>
             </property>
-            <property name="margin" >
+            <property name="margin">
              <number>0</number>
             </property>
             <item>
-             <widget class="QRadioButton" name="printRange" >
-              <property name="text" >
+             <widget class="QRadioButton" name="printRange">
+              <property name="text">
                <string>Pages from</string>
               </property>
              </widget>
             </item>
             <item>
-             <widget class="QSpinBox" name="from" >
-              <property name="enabled" >
+             <widget class="QSpinBox" name="from">
+              <property name="enabled">
                <bool>false</bool>
               </property>
-              <property name="minimum" >
+              <property name="minimum">
                <number>1</number>
               </property>
-              <property name="maximum" >
+              <property name="maximum">
                <number>999</number>
               </property>
              </widget>
             </item>
             <item>
-             <widget class="QLabel" name="label_3" >
-              <property name="text" >
+             <widget class="QLabel" name="label_3">
+              <property name="text">
                <string>to</string>
               </property>
              </widget>
             </item>
             <item>
-             <widget class="QSpinBox" name="to" >
-              <property name="enabled" >
+             <widget class="QSpinBox" name="to">
+              <property name="enabled">
                <bool>false</bool>
               </property>
-              <property name="minimum" >
+              <property name="minimum">
                <number>1</number>
               </property>
-              <property name="maximum" >
+              <property name="maximum">
                <number>999</number>
               </property>
              </widget>
             </item>
             <item>
              <spacer>
-              <property name="orientation" >
+              <property name="orientation">
                <enum>Qt::Horizontal</enum>
               </property>
-              <property name="sizeHint" stdset="0" >
+              <property name="sizeHint" stdset="0">
                <size>
                 <width>0</width>
                 <height>20</height>
@@ -126,18 +119,25 @@
            </layout>
           </item>
           <item>
-           <widget class="QRadioButton" name="printSelection" >
-            <property name="text" >
+           <widget class="QRadioButton" name="printCurrentPage">
+            <property name="text">
+             <string>Current Page</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QRadioButton" name="printSelection">
+            <property name="text">
              <string>Selection</string>
             </property>
            </widget>
           </item>
           <item>
-           <spacer name="verticalSpacer" >
-            <property name="orientation" >
+           <spacer name="verticalSpacer">
+            <property name="orientation">
              <enum>Qt::Vertical</enum>
             </property>
-            <property name="sizeHint" stdset="0" >
+            <property name="sizeHint" stdset="0">
              <size>
               <width>1</width>
               <height>1</height>
@@ -149,37 +149,37 @@
         </widget>
        </item>
        <item>
-        <widget class="QGroupBox" name="groupBox" >
-         <property name="title" >
+        <widget class="QGroupBox" name="groupBox">
+         <property name="title">
           <string>Output Settings</string>
          </property>
-         <layout class="QGridLayout" name="gridLayout" >
-          <item row="0" column="0" >
-           <widget class="QLabel" name="label" >
-            <property name="text" >
+         <layout class="QGridLayout" name="gridLayout">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label">
+            <property name="text">
              <string>Copies:</string>
             </property>
-            <property name="buddy" >
+            <property name="buddy">
              <cstring>copies</cstring>
             </property>
            </widget>
           </item>
-          <item row="0" column="1" colspan="2" >
-           <widget class="QSpinBox" name="copies" >
-            <property name="minimum" >
+          <item row="0" column="1" colspan="2">
+           <widget class="QSpinBox" name="copies">
+            <property name="minimum">
              <number>1</number>
             </property>
-            <property name="maximum" >
+            <property name="maximum">
              <number>999</number>
             </property>
            </widget>
           </item>
-          <item row="0" column="3" >
-           <spacer name="horizontalSpacer" >
-            <property name="orientation" >
+          <item row="0" column="3">
+           <spacer name="horizontalSpacer">
+            <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
-            <property name="sizeHint" stdset="0" >
+            <property name="sizeHint" stdset="0">
              <size>
               <width>91</width>
               <height>20</height>
@@ -187,36 +187,36 @@
             </property>
            </spacer>
           </item>
-          <item row="1" column="0" colspan="2" >
-           <widget class="QCheckBox" name="collate" >
-            <property name="text" >
+          <item row="1" column="0" colspan="2">
+           <widget class="QCheckBox" name="collate">
+            <property name="text">
              <string>Collate</string>
             </property>
            </widget>
           </item>
-          <item rowspan="2" row="1" column="2" colspan="2" >
-           <widget class="QLabel" name="outputIcon" >
-            <property name="sizePolicy" >
-             <sizepolicy vsizetype="Ignored" hsizetype="Ignored" >
+          <item row="1" column="2" rowspan="2" colspan="2">
+           <widget class="QLabel" name="outputIcon">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Ignored" vsizetype="Ignored">
               <horstretch>0</horstretch>
               <verstretch>0</verstretch>
              </sizepolicy>
             </property>
            </widget>
           </item>
-          <item row="2" column="0" colspan="2" >
-           <widget class="QCheckBox" name="reverse" >
-            <property name="text" >
+          <item row="2" column="0" colspan="2">
+           <widget class="QCheckBox" name="reverse">
+            <property name="text">
              <string>Reverse</string>
             </property>
            </widget>
           </item>
-          <item row="3" column="0" colspan="4" >
-           <spacer name="verticalSpacer_2" >
-            <property name="orientation" >
+          <item row="3" column="0" colspan="4">
+           <spacer name="verticalSpacer_2">
+            <property name="orientation">
              <enum>Qt::Vertical</enum>
             </property>
-            <property name="sizeHint" stdset="0" >
+            <property name="sizeHint" stdset="0">
              <size>
               <width>0</width>
               <height>1</height>
@@ -229,31 +229,23 @@
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="optionsTab" >
-      <property name="geometry" >
-       <rect>
-        <x>0</x>
-        <y>0</y>
-        <width>412</width>
-        <height>139</height>
-       </rect>
-      </property>
-      <attribute name="title" >
+     <widget class="QWidget" name="optionsTab">
+      <attribute name="title">
        <string>Options</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout_2" >
-       <item row="0" column="1" >
-        <widget class="QGroupBox" name="colorMode" >
-         <property name="title" >
+      <layout class="QGridLayout" name="gridLayout_2">
+       <item row="0" column="1">
+        <widget class="QGroupBox" name="colorMode">
+         <property name="title">
           <string>Color Mode</string>
          </property>
-         <layout class="QGridLayout" name="gridLayout_4" >
-          <item row="2" column="0" >
-           <spacer name="verticalSpacer_6" >
-            <property name="orientation" >
+         <layout class="QGridLayout" name="gridLayout_4">
+          <item row="2" column="0">
+           <spacer name="verticalSpacer_6">
+            <property name="orientation">
              <enum>Qt::Vertical</enum>
             </property>
-            <property name="sizeHint" stdset="0" >
+            <property name="sizeHint" stdset="0">
              <size>
               <width>1</width>
               <height>0</height>
@@ -261,19 +253,19 @@
             </property>
            </spacer>
           </item>
-          <item row="0" column="0" >
-           <widget class="QRadioButton" name="color" >
-            <property name="text" >
+          <item row="0" column="0">
+           <widget class="QRadioButton" name="color">
+            <property name="text">
              <string>Color</string>
             </property>
            </widget>
           </item>
-          <item rowspan="3" row="0" column="1" >
-           <widget class="QLabel" name="colorIcon" />
+          <item row="0" column="1" rowspan="3">
+           <widget class="QLabel" name="colorIcon"/>
           </item>
-          <item row="1" column="0" >
-           <widget class="QRadioButton" name="grayscale" >
-            <property name="text" >
+          <item row="1" column="0">
+           <widget class="QRadioButton" name="grayscale">
+            <property name="text">
              <string>Grayscale</string>
             </property>
            </widget>
@@ -281,42 +273,42 @@
          </layout>
         </widget>
        </item>
-       <item row="0" column="0" >
-        <widget class="QGroupBox" name="duplex" >
-         <property name="title" >
+       <item row="0" column="0">
+        <widget class="QGroupBox" name="duplex">
+         <property name="title">
           <string>Duplex Printing</string>
          </property>
-         <layout class="QVBoxLayout" name="verticalLayout" >
+         <layout class="QVBoxLayout" name="verticalLayout">
           <item>
-           <widget class="QRadioButton" name="noDuplex" >
-            <property name="text" >
+           <widget class="QRadioButton" name="noDuplex">
+            <property name="text">
              <string>None</string>
             </property>
-            <property name="checked" >
+            <property name="checked">
              <bool>true</bool>
             </property>
            </widget>
           </item>
           <item>
-           <widget class="QRadioButton" name="duplexLong" >
-            <property name="text" >
+           <widget class="QRadioButton" name="duplexLong">
+            <property name="text">
              <string>Long side</string>
             </property>
            </widget>
           </item>
           <item>
-           <widget class="QRadioButton" name="duplexShort" >
-            <property name="text" >
+           <widget class="QRadioButton" name="duplexShort">
+            <property name="text">
              <string>Short side</string>
             </property>
            </widget>
           </item>
           <item>
-           <spacer name="verticalSpacer_42" >
-            <property name="orientation" >
+           <spacer name="verticalSpacer_42">
+            <property name="orientation">
              <enum>Qt::Vertical</enum>
             </property>
-            <property name="sizeHint" stdset="0" >
+            <property name="sizeHint" stdset="0">
              <size>
               <width>1</width>
               <height>0</height>
@@ -341,11 +333,11 @@
    <receiver>from</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>76</x>
      <y>59</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>122</x>
      <y>57</y>
     </hint>
@@ -357,11 +349,11 @@
    <receiver>to</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>69</x>
      <y>67</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>215</x>
      <y>67</y>
     </hint>
diff --git a/src/gui/painting/qprinter.cpp b/src/gui/painting/qprinter.cpp
index edf224d..ae21416 100644
--- a/src/gui/painting/qprinter.cpp
+++ b/src/gui/painting/qprinter.cpp
@@ -382,6 +382,7 @@ void QPrinterPrivate::addToManualSetList(QPrintEngine::PrintEnginePropertyKey ke
     \value AllPages All pages should be printed.
     \value Selection Only the selection should be printed.
     \value PageRange The specified page range should be printed.
+    \value CurrentPage Only the current page should be printed.
 
     \sa QAbstractPrintDialog::PrintRange
 */
@@ -571,6 +572,7 @@ void QPrinterPrivate::addToManualSetList(QPrintEngine::PrintEnginePropertyKey ke
   \value AllPages All the pages should be printed.
   \value Selection Only the selection should be printed.
   \value PageRange Print according to the from page and to page options.
+  \value CurrentPage Only the current page should be printed.
 
   \sa setPrintRange(), printRange()
 */
@@ -586,6 +588,7 @@ void QPrinterPrivate::addToManualSetList(QPrintEngine::PrintEnginePropertyKey ke
   \value PrintSelection Describes if printing selections should be enabled.
   \value PrintPageRange Describes if printing page ranges (from, to) should
   be enabled
+  \value PrintCurrentPage if Print Current Page option should be enabled
 
   \sa setOptionEnabled(), isOptionEnabled()
 */
diff --git a/src/gui/painting/qprinter.h b/src/gui/painting/qprinter.h
index 6636179..996a954 100644
--- a/src/gui/painting/qprinter.h
+++ b/src/gui/painting/qprinter.h
@@ -124,7 +124,7 @@ public:
     enum OutputFormat { NativeFormat, PdfFormat, PostScriptFormat };
 
     // ### Qt 5: Merge with QAbstractPrintDialog::PrintRange
-    enum PrintRange { AllPages, Selection, PageRange };
+    enum PrintRange { AllPages, Selection, PageRange, CurrentPage };
 
     enum Unit {
         Millimeter,
diff --git a/tests/auto/qprinter/tst_qprinter.cpp b/tests/auto/qprinter/tst_qprinter.cpp
index 7e8ce84..49bddb2 100644
--- a/tests/auto/qprinter/tst_qprinter.cpp
+++ b/tests/auto/qprinter/tst_qprinter.cpp
@@ -107,6 +107,7 @@ private slots:
     void printDialogCompleter();
 
     void testCopyCount();
+    void testCurrentPage();
 
     void taskQTBUG4497_reusePrinterOnDifferentFiles();
 
@@ -1005,5 +1006,27 @@ void tst_QPrinter::taskQTBUG4497_reusePrinterOnDifferentFiles()
     QCOMPARE(file1.readAll(), file2.readAll());
 }
 
+void tst_QPrinter::testCurrentPage()
+{
+    QPrinter printer;
+    printer.setFromTo(1, 10);
+
+    // Test set print range
+    printer.setPrintRange(QPrinter::CurrentPage);
+    QCOMPARE(printer.printRange(), QPrinter::CurrentPage);
+    QCOMPARE(printer.fromPage(), 1);
+    QCOMPARE(printer.toPage(), 10);
+
+    QPrintDialog dialog(&printer);
+
+    // Test default Current Page option to off
+    QCOMPARE(dialog.isOptionEnabled(QPrintDialog::PrintCurrentPage), false);
+
+    // Test enable Current Page option
+    dialog.setOption(QPrintDialog::PrintCurrentPage);
+    QCOMPARE(dialog.isOptionEnabled(QPrintDialog::PrintCurrentPage), true);
+
+}
+
 QTEST_MAIN(tst_QPrinter)
 #include "tst_qprinter.moc"
-- 
cgit v0.12


From 34329f2f7b535cb0904279203ac1c06efb958651 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Thu, 4 Mar 2010 14:09:25 +0100
Subject: QScript: Fix crash when converting a null value to a variant.

Fixes test tst_QScriptValue::equals(engine->newVariant(QVariant(123)) <=> engine->newArray(10))

Reviewed-by: Jedrzej Nowacki
---
 src/script/api/qscriptengine.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index 47c5262..024b4d0 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -1591,7 +1591,9 @@ QRegExp QScriptEnginePrivate::toRegExp(JSC::ExecState *exec, JSC::JSValue value)
 
 QVariant QScriptEnginePrivate::toVariant(JSC::ExecState *exec, JSC::JSValue value)
 {
-    if (isObject(value)) {
+    if (!value) {
+        return QVariant();
+    } else if (isObject(value)) {
         if (isVariant(value))
             return variantValue(value);
 #ifndef QT_NO_QOBJECT
-- 
cgit v0.12


From 2701b8389eb9cfbdd65b87b00e5406187c57b297 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Thu, 4 Mar 2010 16:51:37 +0100
Subject: Compile fix for wince

Reviewed-by: Leo Cunha
---
 src/declarative/qml/qdeclarativeengine.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index 1711cf1..7ce2d0b 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -953,7 +953,7 @@ QScriptValue QDeclarativeEnginePrivate::formatDate(QScriptContext*ctxt, QScriptE
             QString format = ctxt->argument(1).toString();
             return engine->newVariant(qVariantFromValue(date.toString(format)));
         } else if (ctxt->argument(1).isNumber()) {
-            enumFormat = Qt::DateFormat(ctxt->argument(1).toInteger());
+            enumFormat = Qt::DateFormat(ctxt->argument(1).toUInt32());
         } else
            return engine->nullValue();
     }
@@ -973,7 +973,7 @@ QScriptValue QDeclarativeEnginePrivate::formatTime(QScriptContext*ctxt, QScriptE
             QString format = ctxt->argument(1).toString();
             return engine->newVariant(qVariantFromValue(date.toString(format)));
         } else if (ctxt->argument(1).isNumber()) {
-            enumFormat = Qt::DateFormat(ctxt->argument(1).toInteger());
+            enumFormat = Qt::DateFormat(ctxt->argument(1).toUInt32());
         } else
            return engine->nullValue();
     }
@@ -993,7 +993,7 @@ QScriptValue QDeclarativeEnginePrivate::formatDateTime(QScriptContext*ctxt, QScr
             QString format = ctxt->argument(1).toString();
             return engine->newVariant(qVariantFromValue(date.toString(format)));
         } else if (ctxt->argument(1).isNumber()) {
-            enumFormat = Qt::DateFormat(ctxt->argument(1).toInteger());
+            enumFormat = Qt::DateFormat(ctxt->argument(1).toUInt32());
         } else
            return engine->nullValue();
     }
-- 
cgit v0.12


From 38ff49e632da2bd61ac5fb59f57f62208c2687fd Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Fri, 5 Mar 2010 09:15:19 +1000
Subject: MouseRegion is dead.  Long live MouseArea.

---
 src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp | 1 -
 src/multimedia/effects/qsoundeffect.cpp                   | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp
index e0ae2eb..25660f8 100644
--- a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp
@@ -106,7 +106,6 @@ void QDeclarativeItemModule::defineModule()
     QML_REGISTER_TYPE(Qt,4,6,LayoutItem,QDeclarativeLayoutItem);
     QML_REGISTER_TYPE(Qt,4,6,ListView,QDeclarativeListView);
     QML_REGISTER_TYPE(Qt,4,6,Loader,QDeclarativeLoader);
-    QML_REGISTER_TYPE(Qt,4,6,MouseRegion,QDeclarativeMouseArea);
     QML_REGISTER_TYPE(Qt,4,6,MouseArea,QDeclarativeMouseArea);
     QML_REGISTER_TYPE(Qt,4,6,Opacity,QGraphicsOpacityEffect);
     QML_REGISTER_TYPE(Qt,4,6,ParticleMotion,QDeclarativeParticleMotion);
diff --git a/src/multimedia/effects/qsoundeffect.cpp b/src/multimedia/effects/qsoundeffect.cpp
index 541e6c9..2694023 100644
--- a/src/multimedia/effects/qsoundeffect.cpp
+++ b/src/multimedia/effects/qsoundeffect.cpp
@@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE
         id: playSound
         source: "test.wav"
     }
-    MouseRegion {
+    MouseArea {
         id: playArea
         anchors.fill: parent
         onPressed: {
-- 
cgit v0.12


From 8708350f4b00507348fa59f313bcfa554a3d6f79 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Fri, 5 Mar 2010 10:35:54 +1000
Subject: Update QML documentation snippets to latest syntax.

---
 doc/src/snippets/declarative/GroupBox.qml                | 15 ---------------
 doc/src/snippets/declarative/content.qml                 |  9 ---------
 doc/src/snippets/declarative/listview/highlight.qml      |  4 ++--
 doc/src/snippets/declarative/mouseregion.qml             |  2 +-
 doc/src/snippets/declarative/pathview/pathattributes.qml |  2 +-
 doc/src/snippets/declarative/pathview/pathview.qml       |  2 +-
 6 files changed, 5 insertions(+), 29 deletions(-)
 delete mode 100644 doc/src/snippets/declarative/GroupBox.qml
 delete mode 100644 doc/src/snippets/declarative/content.qml

diff --git a/doc/src/snippets/declarative/GroupBox.qml b/doc/src/snippets/declarative/GroupBox.qml
deleted file mode 100644
index 6c5431e..0000000
--- a/doc/src/snippets/declarative/GroupBox.qml
+++ /dev/null
@@ -1,15 +0,0 @@
-import Qt 4.6
-
-ContentWrapper {
-    id: container; width: parent.width; height: contents.height
-    children: [
-        Rectangle {
-            width: parent.width; height: contents.height
-            color: "white"; pen.width: 2; pen.color: "#adaeb0"; radius: 10
-            Column {
-                id: layout; width: parent.width; margin: 5; spacing: 2
-                Content { }
-            }
-        }
-    ]
-}
diff --git a/doc/src/snippets/declarative/content.qml b/doc/src/snippets/declarative/content.qml
deleted file mode 100644
index fb03ced..0000000
--- a/doc/src/snippets/declarative/content.qml
+++ /dev/null
@@ -1,9 +0,0 @@
-import Qt 4.6
-
-Rectangle {
-    width: 200; height: 100; color: "lightgray"
-    GroupBox {
-        Text { text: "First Item" }
-        Text { text: "Second Item" }
-    }
-}
diff --git a/doc/src/snippets/declarative/listview/highlight.qml b/doc/src/snippets/declarative/listview/highlight.qml
index b016f9a..6a9d215 100644
--- a/doc/src/snippets/declarative/listview/highlight.qml
+++ b/doc/src/snippets/declarative/listview/highlight.qml
@@ -30,7 +30,7 @@ Rectangle {
                 }
             ]
             transitions: [
-                Transition { NumberAnimation { matchProperties: "x"; duration: 200 } }
+                Transition { NumberAnimation { properties: "x"; duration: 200 } }
             ]
         }
     }
@@ -44,7 +44,7 @@ Rectangle {
         Rectangle {
             width: 180; height: 40
             color: "lightsteelblue"; radius: 5
-            y: SpringFollow {
+            SpringFollow on y {
                 source: list.currentItem.y
                 spring: 3
                 damping: 0.2
diff --git a/doc/src/snippets/declarative/mouseregion.qml b/doc/src/snippets/declarative/mouseregion.qml
index 79f8f8f..fc6c8f0 100644
--- a/doc/src/snippets/declarative/mouseregion.qml
+++ b/doc/src/snippets/declarative/mouseregion.qml
@@ -1,7 +1,7 @@
 import Qt 4.6
 
 Rectangle { width: 200; height: 100
-HorizontalLayout {
+Row {
 //! [0]
 Rectangle { width: 100; height: 100; color: "green"
     MouseArea { anchors.fill: parent; onClicked: { parent.color = 'red' } }
diff --git a/doc/src/snippets/declarative/pathview/pathattributes.qml b/doc/src/snippets/declarative/pathview/pathattributes.qml
index 19a192c..99d0de2 100644
--- a/doc/src/snippets/declarative/pathview/pathattributes.qml
+++ b/doc/src/snippets/declarative/pathview/pathattributes.qml
@@ -13,7 +13,7 @@ Rectangle {
             opacity: PathView.opacity
             Column {
                 Image { anchors.horizontalCenter: name.horizontalCenter; width: 64; height: 64; source: icon }
-                Text { id: name; text: name; font.pointSize: 16}
+                Text { text: name; font.pointSize: 16}
             }
         }
     }
diff --git a/doc/src/snippets/declarative/pathview/pathview.qml b/doc/src/snippets/declarative/pathview/pathview.qml
index 5605139..e316578 100644
--- a/doc/src/snippets/declarative/pathview/pathview.qml
+++ b/doc/src/snippets/declarative/pathview/pathview.qml
@@ -11,7 +11,7 @@ Rectangle {
             width: 80; height: 80
             Column {
                 Image { anchors.horizontalCenter: name.horizontalCenter; width: 64; height: 64; source: icon }
-                Text { id: name; text: name; font.pointSize: 16}
+                Text { text: name; font.pointSize: 16}
             }
         }
     }
-- 
cgit v0.12


From 5048b96a14b61329257e153f2551b6fca4519f84 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Fri, 5 Mar 2010 10:40:49 +1000
Subject: Include QML doc snippets in examples autotest

---
 tests/auto/declarative/examples/examples.pro     | 2 ++
 tests/auto/declarative/examples/tst_examples.cpp | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/tests/auto/declarative/examples/examples.pro b/tests/auto/declarative/examples/examples.pro
index b9bcd28..85d2a73 100644
--- a/tests/auto/declarative/examples/examples.pro
+++ b/tests/auto/declarative/examples/examples.pro
@@ -3,3 +3,5 @@ contains(QT_CONFIG,declarative): QT += declarative
 macx:CONFIG -= app_bundle
 
 SOURCES += tst_examples.cpp 
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/examples/tst_examples.cpp b/tests/auto/declarative/examples/tst_examples.cpp
index 106a4e0..678dd59 100644
--- a/tests/auto/declarative/examples/tst_examples.cpp
+++ b/tests/auto/declarative/examples/tst_examples.cpp
@@ -168,10 +168,12 @@ void tst_examples::examples_data()
 
     QString examples = QLibraryInfo::location(QLibraryInfo::ExamplesPath);
     QString demos = QLibraryInfo::location(QLibraryInfo::DemosPath);
+    QString snippets = QLatin1String(SRCDIR) + "/../../../../doc/src/snippets/";
 
     QStringList files;
     files << findQmlFiles(QDir(examples));
     files << findQmlFiles(QDir(demos));
+    files << findQmlFiles(QDir(snippets));
 
     foreach (const QString &file, files)
         QTest::newRow(file.toLatin1().constData()) << file;
-- 
cgit v0.12


From 24a94c1b88fc72243c53e1bf51b87dc0d0be41b7 Mon Sep 17 00:00:00 2001
From: Yann Bodson <yann.bodson@nokia.com>
Date: Fri, 5 Mar 2010 11:18:53 +1000
Subject: declarative examples cleanup

---
 examples/declarative/behaviours/MyRect.qml         | 13 -------
 examples/declarative/fonts/fonts.qml               | 13 -------
 examples/declarative/listview/itemlist.qml         |  8 ++---
 examples/declarative/mousearea/mouse.qml           | 40 ++++++++++++++++++++++
 examples/declarative/mouseregion/mouse.qml         | 40 ----------------------
 .../plugins/com/nokia/TimeExample/Clock.qml        |  8 ++---
 examples/declarative/searchbox/main.qml            |  6 ++--
 examples/declarative/velocity/Day.qml              |  4 +--
 8 files changed, 52 insertions(+), 80 deletions(-)
 delete mode 100644 examples/declarative/behaviours/MyRect.qml
 create mode 100644 examples/declarative/mousearea/mouse.qml
 delete mode 100644 examples/declarative/mouseregion/mouse.qml

diff --git a/examples/declarative/behaviours/MyRect.qml b/examples/declarative/behaviours/MyRect.qml
deleted file mode 100644
index caf0d83..0000000
--- a/examples/declarative/behaviours/MyRect.qml
+++ /dev/null
@@ -1,13 +0,0 @@
-import Qt 4.6
-
-Rectangle {
-    radius: 15
-    border.color: "black"
-    width: 100
-    height: 100
-    id: page
-    MouseArea {
-        anchors.fill: parent
-        onClicked: { bluerect.parent = page; bluerect.x=0 }
-    }
-}
diff --git a/examples/declarative/fonts/fonts.qml b/examples/declarative/fonts/fonts.qml
index 275ad43..6246d16 100644
--- a/examples/declarative/fonts/fonts.qml
+++ b/examples/declarative/fonts/fonts.qml
@@ -7,11 +7,8 @@ Rectangle {
     color: "steelblue"
 
     FontLoader { id: fixedFont; name: "Courier" }
-
     FontLoader { id: localFont; source: "fonts/tarzenau-ocr-a.ttf" }
-
     FontLoader { id: webFont; source: "http://www.princexml.com/fonts/steffmann/Starburst.ttf" }
-    FontLoader { id: webFont2; source: "http://wrong.address.org" }
 
     Column {
         anchors.fill: parent; spacing: 10
@@ -55,15 +52,5 @@ Rectangle {
             width: parent.width; elide: Text.ElideMiddle
             font.family: webFont.name; font.pointSize: 36
         }
-        Text {
-            text: {
-                if (webFont2.status == 1) myText
-                else if (webFont2.status == 2) "Loading..."
-                else if (webFont2.status == 3) "Error loading font"
-            }
-            color: "lightsteelblue"
-            width: parent.width; elide: Text.ElideRight
-            font.family: webFont2.name; font.pointSize: 36
-        }
     }
 }
diff --git a/examples/declarative/listview/itemlist.qml b/examples/declarative/listview/itemlist.qml
index 54981b7..41aa860 100644
--- a/examples/declarative/listview/itemlist.qml
+++ b/examples/declarative/listview/itemlist.qml
@@ -26,14 +26,12 @@ Rectangle {
 
     ListView {
         id: view
-        anchors.fill: parent
-        anchors.bottomMargin: 30
+        anchors.fill: parent; anchors.bottomMargin: 30
         model: itemModel
-        preferredHighlightBegin: 0
-        preferredHighlightEnd: 0
+        preferredHighlightBegin: 0; preferredHighlightEnd: 0
         highlightRangeMode: "StrictlyEnforceRange"
         orientation: ListView.Horizontal
-        flickDeceleration: 2000
+        snapMode: ListView.SnapOneItem; flickDeceleration: 2000
     }
 
     Rectangle {
diff --git a/examples/declarative/mousearea/mouse.qml b/examples/declarative/mousearea/mouse.qml
new file mode 100644
index 0000000..9191f8a
--- /dev/null
+++ b/examples/declarative/mousearea/mouse.qml
@@ -0,0 +1,40 @@
+import Qt 4.6
+
+Rectangle {
+    color: "white"
+    width: 200; height: 200
+    Rectangle {
+        width: 50; height: 50
+        color: "red"
+        Text { text: "Click"; anchors.centerIn: parent }
+        MouseArea {
+            hoverEnabled: true
+            acceptedButtons: Qt.LeftButton | Qt.RightButton
+            onPressed: { console.log('press (x: ' + mouse.x + ' y: ' + mouse.y + ' button: ' + (mouse.button == Qt.RightButton ? 'right' : 'left') + ' Shift: ' + (mouse.modifiers & Qt.ShiftModifier ? 'true' : 'false') + ')') }
+            onReleased: { console.log('release (x: ' + mouse.x + ' y: ' + mouse.y + ' isClick: ' + mouse.isClick + ' wasHeld: ' + mouse.wasHeld + ')') }
+            onClicked: { console.log('click (x: ' + mouse.x + ' y: ' + mouse.y + ' wasHeld: ' + mouse.wasHeld + ')') }
+            onDoubleClicked: { console.log('double click (x: ' + mouse.x + ' y: ' + mouse.y + ')') }
+            onPressAndHold: { console.log('press and hold') }
+            onEntered: { console.log('entered ' + pressed) }
+            onExited: { console.log('exited ' + pressed) }
+            anchors.fill: parent
+        }
+    }
+    Rectangle {
+        y: 100; width: 50; height: 50
+        color: "blue"
+        Text { text: "Drag"; anchors.centerIn: parent }
+        MouseArea {
+            drag.target: parent
+            drag.axis: "XAxis"
+            drag.minimumX: 0
+            drag.maximumX: 150
+            onPressed: { console.log('press') }
+            onReleased: { console.log('release (isClick: ' + mouse.isClick + ') (wasHeld: ' + mouse.wasHeld + ')') }
+            onClicked: { console.log('click' + '(wasHeld: ' + mouse.wasHeld + ')') }
+            onDoubleClicked: { console.log('double click') }
+            onPressAndHold: { console.log('press and hold') }
+            anchors.fill: parent
+        }
+    }
+}
diff --git a/examples/declarative/mouseregion/mouse.qml b/examples/declarative/mouseregion/mouse.qml
deleted file mode 100644
index 9191f8a..0000000
--- a/examples/declarative/mouseregion/mouse.qml
+++ /dev/null
@@ -1,40 +0,0 @@
-import Qt 4.6
-
-Rectangle {
-    color: "white"
-    width: 200; height: 200
-    Rectangle {
-        width: 50; height: 50
-        color: "red"
-        Text { text: "Click"; anchors.centerIn: parent }
-        MouseArea {
-            hoverEnabled: true
-            acceptedButtons: Qt.LeftButton | Qt.RightButton
-            onPressed: { console.log('press (x: ' + mouse.x + ' y: ' + mouse.y + ' button: ' + (mouse.button == Qt.RightButton ? 'right' : 'left') + ' Shift: ' + (mouse.modifiers & Qt.ShiftModifier ? 'true' : 'false') + ')') }
-            onReleased: { console.log('release (x: ' + mouse.x + ' y: ' + mouse.y + ' isClick: ' + mouse.isClick + ' wasHeld: ' + mouse.wasHeld + ')') }
-            onClicked: { console.log('click (x: ' + mouse.x + ' y: ' + mouse.y + ' wasHeld: ' + mouse.wasHeld + ')') }
-            onDoubleClicked: { console.log('double click (x: ' + mouse.x + ' y: ' + mouse.y + ')') }
-            onPressAndHold: { console.log('press and hold') }
-            onEntered: { console.log('entered ' + pressed) }
-            onExited: { console.log('exited ' + pressed) }
-            anchors.fill: parent
-        }
-    }
-    Rectangle {
-        y: 100; width: 50; height: 50
-        color: "blue"
-        Text { text: "Drag"; anchors.centerIn: parent }
-        MouseArea {
-            drag.target: parent
-            drag.axis: "XAxis"
-            drag.minimumX: 0
-            drag.maximumX: 150
-            onPressed: { console.log('press') }
-            onReleased: { console.log('release (isClick: ' + mouse.isClick + ') (wasHeld: ' + mouse.wasHeld + ')') }
-            onClicked: { console.log('click' + '(wasHeld: ' + mouse.wasHeld + ')') }
-            onDoubleClicked: { console.log('double click') }
-            onPressAndHold: { console.log('press and hold') }
-            anchors.fill: parent
-        }
-    }
-}
diff --git a/examples/declarative/plugins/com/nokia/TimeExample/Clock.qml b/examples/declarative/plugins/com/nokia/TimeExample/Clock.qml
index 01ec686..622fcf9 100644
--- a/examples/declarative/plugins/com/nokia/TimeExample/Clock.qml
+++ b/examples/declarative/plugins/com/nokia/TimeExample/Clock.qml
@@ -1,8 +1,8 @@
 import Qt 4.6
 
-Item {
+Rectangle {
     id: clock
-    width: 200; height: 200
+    width: 200; height: 200; color: "gray"
 
     property alias city: cityLabel.text
     property var hours
@@ -18,7 +18,7 @@ Item {
         transform: Rotation {
             id: hourRotation
             origin.x: 7.5; origin.y: 73; angle: 0
-            angle: SpringFollow {
+            SpringFollow on angle {
                 spring: 2; damping: 0.2; modulus: 360
                 source: (clock.hours * 30) + (clock.minutes * 0.5)
             }
@@ -32,7 +32,7 @@ Item {
         transform: Rotation {
             id: minuteRotation
             origin.x: 6.5; origin.y: 83; angle: 0
-            angle: SpringFollow {
+            SpringFollow on angle {
                 spring: 2; damping: 0.2; modulus: 360
                 source: clock.minutes * 6
             }
diff --git a/examples/declarative/searchbox/main.qml b/examples/declarative/searchbox/main.qml
index 39c3720..9b33be3 100644
--- a/examples/declarative/searchbox/main.qml
+++ b/examples/declarative/searchbox/main.qml
@@ -6,8 +6,8 @@ Rectangle {
     Column {
         anchors.horizontalCenter: parent.horizontalCenter; anchors.verticalCenter: parent.verticalCenter; spacing: 10
 
-        SearchBox { id: search1; KeyNavigation.down: search2; focus: true }
-        SearchBox { id: search2; KeyNavigation.up: search1; KeyNavigation.down: search3 }
-        SearchBox { id: search3; KeyNavigation.up: search2 }
+        SearchBox { id: search1; KeyNavigation.tab: search2; KeyNavigation.backtab: search3; focus: true }
+        SearchBox { id: search2; KeyNavigation.tab: search3; KeyNavigation.backtab: search1 }
+        SearchBox { id: search3; KeyNavigation.tab: search1; KeyNavigation.backtab: search2 }
     }
 }
diff --git a/examples/declarative/velocity/Day.qml b/examples/declarative/velocity/Day.qml
index 7424f60..8a7364e 100644
--- a/examples/declarative/velocity/Day.qml
+++ b/examples/declarative/velocity/Day.qml
@@ -33,7 +33,7 @@ Rectangle {
                 id: sticky
                 scale: 0.5
                 Image {
-                    id: stickyImage; source: "sticky.png"
+                    id: stickyImage; source: "sticky.png"; transformOrigin: Item.TopLeft
                     smooth: true; y: -20; x: 8 + -width * 0.6 / 2; scale: 0.6
                 }
 
@@ -59,7 +59,7 @@ Rectangle {
             }
 
             Image {
-                source: "tack.png"
+                source: "tack.png"; transformOrigin: Item.TopLeft
                 x: -width / 2; y: -height * 0.7 / 2; scale: 0.7
             }
 
-- 
cgit v0.12


From 34052400e537c188af883c4152df760bc531060d Mon Sep 17 00:00:00 2001
From: Joona Petrell <joona.t.petrell@nokia.com>
Date: Thu, 4 Mar 2010 15:58:26 +1000
Subject: Add missing NOTIFYs to timer, xmllistmodel, xmlrole

Reviewed-by: akennedy
---
 src/declarative/util/qdeclarativetimer.cpp         |  3 +
 src/declarative/util/qdeclarativetimer_p.h         |  9 ++-
 src/declarative/util/qdeclarativexmllistmodel.cpp  | 14 +++--
 src/declarative/util/qdeclarativexmllistmodel_p.h  | 41 +++++++++----
 .../qdeclarativetimer/tst_qdeclarativetimer.cpp    | 37 ++++++++++++
 .../data/propertychanges.qml                       | 10 ++++
 .../tst_qdeclarativexmllistmodel.cpp               | 70 ++++++++++++++++++++++
 7 files changed, 167 insertions(+), 17 deletions(-)
 create mode 100644 tests/auto/declarative/qdeclarativexmllistmodel/data/propertychanges.qml

diff --git a/src/declarative/util/qdeclarativetimer.cpp b/src/declarative/util/qdeclarativetimer.cpp
index d7e02b1..104e3ae 100644
--- a/src/declarative/util/qdeclarativetimer.cpp
+++ b/src/declarative/util/qdeclarativetimer.cpp
@@ -123,6 +123,7 @@ void QDeclarativeTimer::setInterval(int interval)
     if (interval != d->interval) {
         d->interval = interval;
         update();
+        emit intervalChanged();
     }
 }
 
@@ -183,6 +184,7 @@ void QDeclarativeTimer::setRepeating(bool repeating)
     if (repeating != d->repeating) {
         d->repeating = repeating;
         update();
+        emit repeatChanged();
     }
 }
 
@@ -215,6 +217,7 @@ void QDeclarativeTimer::setTriggeredOnStart(bool triggeredOnStart)
     if (d->triggeredOnStart != triggeredOnStart) {
         d->triggeredOnStart = triggeredOnStart;
         update();
+        emit triggeredOnStartChanged();
     }
 }
 
diff --git a/src/declarative/util/qdeclarativetimer_p.h b/src/declarative/util/qdeclarativetimer_p.h
index e063657..d1e6630 100644
--- a/src/declarative/util/qdeclarativetimer_p.h
+++ b/src/declarative/util/qdeclarativetimer_p.h
@@ -59,10 +59,10 @@ class Q_DECLARATIVE_EXPORT QDeclarativeTimer : public QObject, public QDeclarati
     Q_OBJECT
     Q_DECLARE_PRIVATE(QDeclarativeTimer)
     Q_INTERFACES(QDeclarativeParserStatus)
-    Q_PROPERTY(int interval READ interval WRITE setInterval)
+    Q_PROPERTY(int interval READ interval WRITE setInterval NOTIFY intervalChanged)
     Q_PROPERTY(bool running READ isRunning WRITE setRunning NOTIFY runningChanged)
-    Q_PROPERTY(bool repeat READ isRepeating WRITE setRepeating)
-    Q_PROPERTY(bool triggeredOnStart READ triggeredOnStart WRITE setTriggeredOnStart)
+    Q_PROPERTY(bool repeat READ isRepeating WRITE setRepeating NOTIFY repeatChanged)
+    Q_PROPERTY(bool triggeredOnStart READ triggeredOnStart WRITE setTriggeredOnStart NOTIFY triggeredOnStartChanged)
 
 public:
     QDeclarativeTimer(QObject *parent=0);
@@ -91,6 +91,9 @@ public Q_SLOTS:
 Q_SIGNALS:
     void triggered();
     void runningChanged();
+    void intervalChanged();
+    void repeatChanged();
+    void triggeredOnStartChanged();
 
 private:
     void update();
diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp
index d260ada..53e08b0 100644
--- a/src/declarative/util/qdeclarativexmllistmodel.cpp
+++ b/src/declarative/util/qdeclarativexmllistmodel.cpp
@@ -571,9 +571,10 @@ void QDeclarativeXmlListModel::setSource(const QUrl &src)
 {
     Q_D(QDeclarativeXmlListModel);
     if (d->src != src) {
-        d->src = src;
         reload();
-    }
+        d->src = src;
+        emit sourceChanged();
+   }
 }
 
 /*!
@@ -593,8 +594,11 @@ QString QDeclarativeXmlListModel::xml() const
 void QDeclarativeXmlListModel::setXml(const QString &xml)
 {
     Q_D(QDeclarativeXmlListModel);
-    d->xml = xml;
-    reload();
+    if (d->xml != xml) {
+        d->xml = xml;
+        reload();
+        emit xmlChanged();
+    }
 }
 
 /*!
@@ -619,6 +623,7 @@ void QDeclarativeXmlListModel::setQuery(const QString &query)
     if (d->query != query) {
         d->query = query;
         reload();
+        emit queryChanged();
     }
 }
 
@@ -638,6 +643,7 @@ void QDeclarativeXmlListModel::setNamespaceDeclarations(const QString &declarati
     if (d->namespaces != declarations) {
         d->namespaces = declarations;
         reload();
+        emit namespaceDeclarationsChanged();
     }
 }
 
diff --git a/src/declarative/util/qdeclarativexmllistmodel_p.h b/src/declarative/util/qdeclarativexmllistmodel_p.h
index f0ad4b8..23ff7ce 100644
--- a/src/declarative/util/qdeclarativexmllistmodel_p.h
+++ b/src/declarative/util/qdeclarativexmllistmodel_p.h
@@ -68,10 +68,10 @@ class Q_DECLARATIVE_EXPORT QDeclarativeXmlListModel : public QListModelInterface
 
     Q_PROPERTY(Status status READ status NOTIFY statusChanged)
     Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged)
-    Q_PROPERTY(QUrl source READ source WRITE setSource)
-    Q_PROPERTY(QString xml READ xml WRITE setXml)
-    Q_PROPERTY(QString query READ query WRITE setQuery)
-    Q_PROPERTY(QString namespaceDeclarations READ namespaceDeclarations WRITE setNamespaceDeclarations)
+    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
+    Q_PROPERTY(QString xml READ xml WRITE setXml NOTIFY xmlChanged)
+    Q_PROPERTY(QString query READ query WRITE setQuery NOTIFY queryChanged)
+    Q_PROPERTY(QString namespaceDeclarations READ namespaceDeclarations WRITE setNamespaceDeclarations NOTIFY namespaceDeclarationsChanged)
     Q_PROPERTY(QDeclarativeListProperty<QDeclarativeXmlListModelRole> roles READ roleObjects)
     Q_PROPERTY(int count READ count NOTIFY countChanged)
     Q_CLASSINFO("DefaultProperty", "roles")
@@ -111,6 +111,10 @@ Q_SIGNALS:
     void statusChanged(Status);
     void progressChanged(qreal progress);
     void countChanged();
+    void sourceChanged();
+    void xmlChanged();
+    void queryChanged();
+    void namespaceDeclarationsChanged();
 
 public Q_SLOTS:
     // ### need to use/expose Expiry to guess when to call this?
@@ -132,16 +136,20 @@ private:
 class Q_DECLARATIVE_EXPORT QDeclarativeXmlListModelRole : public QObject
 {
     Q_OBJECT
-    Q_PROPERTY(QString name READ name WRITE setName)
-    Q_PROPERTY(QString query READ query WRITE setQuery)
-    Q_PROPERTY(bool isKey READ isKey WRITE setIsKey)
-
+    Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
+    Q_PROPERTY(QString query READ query WRITE setQuery NOTIFY queryChanged)
+    Q_PROPERTY(bool isKey READ isKey WRITE setIsKey NOTIFY isKeyChanged)
 public:
     QDeclarativeXmlListModelRole() : m_isKey(false) {}
     ~QDeclarativeXmlListModelRole() {}
 
     QString name() const { return m_name; }
-    void setName(const QString &name) { m_name = name; }
+    void setName(const QString &name) {
+        if (name == m_name)
+            return;
+        m_name = name;
+        emit nameChanged();
+    }
 
     QString query() const { return m_query; }
     void setQuery(const QString &query)
@@ -150,16 +158,29 @@ public:
             qmlInfo(this) << tr("An XmlRole query must not start with '/'");
             return;
         }
+        if (m_query == query)
+            return;
         m_query = query;
+        emit queryChanged();
     }
 
     bool isKey() const { return m_isKey; }
-    void setIsKey(bool b) { m_isKey = b; }
+    void setIsKey(bool b) {
+        if (m_isKey == b)
+            return;
+        m_isKey = b;
+        emit isKeyChanged();
+    }
 
     bool isValid() {
         return !m_name.isEmpty() && !m_query.isEmpty();
     }
 
+Q_SIGNALS:
+    void nameChanged();
+    void queryChanged();
+    void isKeyChanged();
+
 private:
     QString m_name;
     QString m_query;
diff --git a/tests/auto/declarative/qdeclarativetimer/tst_qdeclarativetimer.cpp b/tests/auto/declarative/qdeclarativetimer/tst_qdeclarativetimer.cpp
index b120d5d..1dfec50 100644
--- a/tests/auto/declarative/qdeclarativetimer/tst_qdeclarativetimer.cpp
+++ b/tests/auto/declarative/qdeclarativetimer/tst_qdeclarativetimer.cpp
@@ -38,6 +38,7 @@
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
+#include <QtTest/QSignalSpy>
 #include <qtest.h>
 #include <QtDeclarative/qdeclarativeengine.h>
 #include <QtDeclarative/qdeclarativecomponent.h>
@@ -161,6 +162,18 @@ void tst_qdeclarativetimer::repeat()
     QVERIFY(helper.count == oldCount);
     QVERIFY(timer->isRunning() == false);
 
+    QSignalSpy spy(timer, SIGNAL(repeatChanged()));
+
+    timer->setRepeating(false);
+    QVERIFY(!timer->isRepeating());
+    QCOMPARE(spy.count(),1);
+
+    timer->setRepeating(false);
+    QCOMPARE(spy.count(),1);
+
+    timer->setRepeating(true);
+    QCOMPARE(spy.count(),2);
+
     delete timer;
 }
 
@@ -184,6 +197,18 @@ void tst_qdeclarativetimer::triggeredOnStart()
     QCOMPARE(helper.count, 2);
     QVERIFY(timer->isRunning() == false);
 
+    QSignalSpy spy(timer, SIGNAL(triggeredOnStartChanged()));
+
+    timer->setTriggeredOnStart(false);
+    QVERIFY(!timer->triggeredOnStart());
+    QCOMPARE(spy.count(),1);
+
+    timer->setTriggeredOnStart(false);
+    QCOMPARE(spy.count(),1);
+
+    timer->setTriggeredOnStart(true);
+    QCOMPARE(spy.count(),2);
+
     delete timer;
 }
 
@@ -250,6 +275,18 @@ void tst_qdeclarativetimer::changeDuration()
     QCOMPARE(helper.count, 3);
     QVERIFY(timer->isRunning());
 
+    QSignalSpy spy(timer, SIGNAL(intervalChanged()));
+
+    timer->setInterval(200);
+    QCOMPARE(timer->interval(), 200);
+    QCOMPARE(spy.count(),1);
+
+    timer->setInterval(200);
+    QCOMPARE(spy.count(),1);
+
+    timer->setInterval(300);
+    QCOMPARE(spy.count(),2);
+
     delete timer;
 }
 
diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/data/propertychanges.qml b/tests/auto/declarative/qdeclarativexmllistmodel/data/propertychanges.qml
new file mode 100644
index 0000000..737ec81
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativexmllistmodel/data/propertychanges.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+XmlListModel {
+    source: "model.xml"
+    query: "/Pets/Pet"
+    XmlRole { objectName: "role"; name: "name"; query: "name/string()" }
+    XmlRole { name: "type"; query: "type/string()" }
+    XmlRole { name: "age"; query: "age/number()" }
+    XmlRole { name: "size"; query: "size/string()" }
+}
diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
index 68029bc..6199234 100644
--- a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
@@ -74,6 +74,7 @@ private slots:
     void useKeys_data();
     void noKeysValueChanges();
     void keysChanged();
+    void propertyChanges();
 
 private:
     QString makeItemXmlAndData(const QString &data, QDeclarativeXmlModelData *modelData = 0) const
@@ -440,6 +441,8 @@ void tst_qdeclarativexmllistmodel::noKeysValueChanges()
     model->setXml(xml);
     QTRY_COMPARE(model->count(), 2);
 
+    model->setXml("");
+
     QSignalSpy spyInsert(model, SIGNAL(itemsInserted(int,int)));
     QSignalSpy spyRemove(model, SIGNAL(itemsRemoved(int,int)));
     QSignalSpy spyCount(model, SIGNAL(countChanged()));
@@ -476,6 +479,8 @@ void tst_qdeclarativexmllistmodel::keysChanged()
     model->setXml(xml);
     QTRY_COMPARE(model->count(), 2);
 
+    model->setXml("");
+
     QSignalSpy spyInsert(model, SIGNAL(itemsInserted(int,int)));
     QSignalSpy spyRemove(model, SIGNAL(itemsRemoved(int,int)));
     QSignalSpy spyCount(model, SIGNAL(countChanged()));
@@ -496,6 +501,71 @@ void tst_qdeclarativexmllistmodel::keysChanged()
     QCOMPARE(spyCount.count(), 0);
 }
 
+void tst_qdeclarativexmllistmodel::propertyChanges()
+{
+    QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/propertychanges.qml"));
+    QDeclarativeXmlListModel *model = qobject_cast<QDeclarativeXmlListModel*>(component.create());
+    QVERIFY(model != 0);
+    QTRY_COMPARE(model->count(), 9);
+
+    QDeclarativeXmlListModelRole *role = model->findChild<QDeclarativeXmlListModelRole*>("role");
+    QVERIFY(role);
+
+    QSignalSpy nameSpy(role, SIGNAL(nameChanged()));
+    QSignalSpy querySpy(role, SIGNAL(queryChanged()));
+    QSignalSpy isKeySpy(role, SIGNAL(isKeyChanged()));
+
+    role->setName("size");
+    role->setQuery("size/string()");
+    role->setIsKey(true);
+
+    QCOMPARE(role->name(), QString("size"));
+    QCOMPARE(role->query(), QString("size/string()"));
+    QVERIFY(role->isKey());
+
+    QCOMPARE(nameSpy.count(),1);
+    QCOMPARE(querySpy.count(),1);
+    QCOMPARE(isKeySpy.count(),1);
+
+    role->setName("size");
+    role->setQuery("size/string()");
+    role->setIsKey(true);
+
+    QCOMPARE(nameSpy.count(),1);
+    QCOMPARE(querySpy.count(),1);
+    QCOMPARE(isKeySpy.count(),1);
+
+    QSignalSpy sourceSpy(model, SIGNAL(sourceChanged()));
+    QSignalSpy xmlSpy(model, SIGNAL(xmlChanged()));
+    QSignalSpy modelQuerySpy(model, SIGNAL(queryChanged()));
+    QSignalSpy namespaceDeclarationsSpy(model, SIGNAL(namespaceDeclarationsChanged()));
+
+    model->setSource(QUrl(""));
+    model->setXml("<Pets><Pet><name>Polly</name><type>Parrot</type><age>12</age><size>Small</size></Pet></Pets>");
+    model->setQuery("/Pets");
+    model->setNamespaceDeclarations("declare namespace media=\"http://search.yahoo.com/mrss/\";");
+
+    QCOMPARE(model->source(), QUrl(""));
+    QCOMPARE(model->xml(), QString("<Pets><Pet><name>Polly</name><type>Parrot</type><age>12</age><size>Small</size></Pet></Pets>"));
+    QCOMPARE(model->query(), QString("/Pets"));
+    QCOMPARE(model->namespaceDeclarations(), QString("declare namespace media=\"http://search.yahoo.com/mrss/\";"));
+
+    QCOMPARE(sourceSpy.count(),1);
+    QCOMPARE(xmlSpy.count(),1);
+    QCOMPARE(modelQuerySpy.count(),1);
+    QCOMPARE(namespaceDeclarationsSpy.count(),1);
+
+    model->setSource(QUrl(""));
+    model->setXml("<Pets><Pet><name>Polly</name><type>Parrot</type><age>12</age><size>Small</size></Pet></Pets>");
+    model->setQuery("/Pets");
+    model->setNamespaceDeclarations("declare namespace media=\"http://search.yahoo.com/mrss/\";");
+
+    QCOMPARE(sourceSpy.count(),1);
+    QCOMPARE(xmlSpy.count(),1);
+    QCOMPARE(modelQuerySpy.count(),1);
+    QCOMPARE(namespaceDeclarationsSpy.count(),1);
+}
+
 QTEST_MAIN(tst_qdeclarativexmllistmodel)
 
 #include "tst_qdeclarativexmllistmodel.moc"
-- 
cgit v0.12


From e85b39067914276fb42ce1a8ae35c45d2f688dae Mon Sep 17 00:00:00 2001
From: Yann Bodson <yann.bodson@nokia.com>
Date: Fri, 5 Mar 2010 13:03:13 +1000
Subject: Improve declarative tabs example.

---
 examples/declarative/tabwidget/TabWidget.qml | 44 +++++++++++++++----------
 examples/declarative/tabwidget/tabs.qml      | 49 +++++++++++++++++++---------
 2 files changed, 60 insertions(+), 33 deletions(-)

diff --git a/examples/declarative/tabwidget/TabWidget.qml b/examples/declarative/tabwidget/TabWidget.qml
index f0dfee8..f0f7164 100644
--- a/examples/declarative/tabwidget/TabWidget.qml
+++ b/examples/declarative/tabwidget/TabWidget.qml
@@ -1,42 +1,50 @@
 import Qt 4.6
 
 Item {
-    id: page
+    id: tabWidget
     property int current: 0
     default property alias content: stack.children
+
     onCurrentChanged: setOpacities()
     Component.onCompleted: setOpacities()
+
     function setOpacities()
     {
-        for (var i=0; i<stack.children.length; ++i) {
-            stack.children[i].opacity = i==current ? 1 : 0
+        for (var i = 0; i < stack.children.length; ++i) {
+            stack.children[i].opacity = i == current ? 1 : 0
         }
     }
+
     Row {
         id: header
         Repeater {
             delegate:
+            Rectangle {
+                width: tabWidget.width / stack.children.length; height: 36
                 Rectangle {
-                    width: page.width / stack.children.length
-                    height: 15
-                    color: page.current == index ? "grey" : "lightGrey"
-                    Text {
-                        anchors.fill: parent
-                        text: stack.children[index].title
-                        elide: Text.ElideRight
-                    }
-                    MouseArea {
-                        anchors.fill: parent
-                        onClicked: page.current = index
-                    }
+                    color: "#acb2c2"; width: parent.width; height: 1
+                    anchors { bottom: parent.bottom; bottomMargin: 1 }
+                }
+                BorderImage {
+                    source: "tab.png"; visible: tabWidget.current == index; border.left: 7; border.right: 7
+                    anchors { fill: parent; leftMargin: 2; topMargin: 5; rightMargin: 1 }
                 }
+                Text {
+                    horizontalAlignment: Qt.AlignHCenter; verticalAlignment: Qt.AlignVCenter
+                    anchors.fill: parent; text: stack.children[index].title
+                    elide: Text.ElideRight; font.bold: tabWidget.current == index
+                }
+                MouseArea {
+                    anchors.fill: parent
+                    onClicked: tabWidget.current = index
+                }
+            }
             model: stack.children.length
         }
     }
+
     Item {
         id: stack
-        anchors.top: header.bottom
-        anchors.bottom: page.bottom
-        width: page.width
+        anchors.top: header.bottom; anchors.bottom: tabWidget.bottom; width: tabWidget.width
     }
 }
diff --git a/examples/declarative/tabwidget/tabs.qml b/examples/declarative/tabwidget/tabs.qml
index 54ed7df..1d11b03 100644
--- a/examples/declarative/tabwidget/tabs.qml
+++ b/examples/declarative/tabwidget/tabs.qml
@@ -2,28 +2,47 @@ import Qt 4.6
 
 TabWidget {
     id: tabs
-    width: 200
-    height: 200
-    current: 2
+    width: 640; height: 480
+
     Rectangle {
         property string title: "Red"
-        color: "red"
-        anchors.fill: parent
-        Text { anchors.centerIn: parent; text: "<div align=center>Roses are red"; font.pixelSize: 24
-            wrap: true; width: parent.width-20 }
+        anchors.fill: parent; color: "#e3e3e3"
+        Rectangle {
+            anchors { fill: parent; topMargin: 20; leftMargin: 20; rightMargin: 20; bottomMargin: 20 }
+            color: "#ff7f7f"
+            Text {
+                anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter
+                text: "Roses are red"; font.pixelSize: 20
+                wrap: true; width: parent.width - 20
+            }
+        }
     }
+
     Rectangle {
         property string title: "Green"
-        color: "green"
-        anchors.fill: parent
-        Text { anchors.centerIn: parent; text: "<div align=center>Flower stems are green"; font.pixelSize: 24;
-            wrap: true; width: parent.width-20 }
+        anchors.fill: parent; color: "#e3e3e3"
+        Rectangle {
+            anchors { fill: parent; topMargin: 20; leftMargin: 20; rightMargin: 20; bottomMargin: 20 }
+            color: "#7fff7f"
+            Text {
+                anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter
+                text: "Flower stems are green"; font.pixelSize: 20
+                wrap: true; width: parent.width - 20
+            }
+        }
     }
+
     Rectangle {
         property string title: "Blue"
-        color: "blue"
-        anchors.fill: parent
-        Text { anchors.centerIn: parent; text: "<div align=center>Violets are blue"; color: "white"; font.pixelSize: 24
-            wrap: true; width: parent.width-20 }
+        anchors.fill: parent; color: "#e3e3e3"
+        Rectangle {
+            anchors { fill: parent; topMargin: 20; leftMargin: 20; rightMargin: 20; bottomMargin: 20 }
+            color: "#7f7fff"
+            Text {
+                anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter
+                text: "Violets are blue"; font.pixelSize: 20
+                wrap: true; width: parent.width - 20
+            }
+        }
     }
 }
-- 
cgit v0.12


From 52fc88c05ede03f15328a69989c4acef9bf7c65b Mon Sep 17 00:00:00 2001
From: Yann Bodson <yann.bodson@nokia.com>
Date: Fri, 5 Mar 2010 13:07:37 +1000
Subject: More declarative examples cleanup.

---
 examples/declarative/dynamic/dynamic.qml |  42 +++++++++++++++++--------------
 examples/declarative/tabwidget/tab.png   | Bin 0 -> 507 bytes
 examples/declarative/velocity/Day.qml    |   2 +-
 3 files changed, 24 insertions(+), 20 deletions(-)
 create mode 100644 examples/declarative/tabwidget/tab.png

diff --git a/examples/declarative/dynamic/dynamic.qml b/examples/declarative/dynamic/dynamic.qml
index 2831b0c..6af3e81 100644
--- a/examples/declarative/dynamic/dynamic.qml
+++ b/examples/declarative/dynamic/dynamic.qml
@@ -17,15 +17,17 @@ Item {
     }
 
     // stars (when there's no sun)
-    Particles { id: stars
-        x: 0; y: 0; width: parent.width; height: parent.height/2
+    Particles {
+        id: stars
+        x: 0; y: 0; width: parent.width; height: parent.height / 2
         source: "images/star.png"; angleDeviation: 360; velocity: 0
         velocityDeviation: 0; count: parent.width / 10; fadeInDuration: 2800
         opacity: 1
     }
 
     // ground, which has a z such that the sun can set behind it
-    Rectangle { id: ground
+    Rectangle {
+        id: ground
         z: 2
         anchors { left: parent.left; top: parent.verticalCenter; right: toolbox.right; bottom: parent.bottom }
         gradient: Gradient {
@@ -35,7 +37,8 @@ Item {
     }
 
     //Day state, for when you place a sun
-    states: State { name: "Day"; when: window.activeSuns > 0
+    states: State {
+        name: "Day"; when: window.activeSuns > 0
         PropertyChanges { target: stopA; color: "DeepSkyBlue"}
         PropertyChanges { target: stopB; color: "SkyBlue"}
         PropertyChanges { target: stars; opacity: 0 }
@@ -56,56 +59,57 @@ Item {
         width: 480
         anchors { right: parent.right; top:parent.top; bottom: parent.bottom }
         Rectangle { //Not a child of any positioner
-            color: "white"; border.color: "black"; 
+            color: "white"; border.color: "black";
             width: toolRow.width + 4
             height: toolRow.height + 4
             x: toolboxPositioner.x + toolRow.x - 2
             y: toolboxPositioner.y + toolRow.y - 2
         }
-        Column{
+        Column {
             id: toolboxPositioner
             anchors.centerIn: parent
             spacing: 8
-            Text{ text: "Drag an item into the scene." }
-            Row{ id: toolRow
-                spacing: 8; 
-                PaletteItem{ 
+            Text { text: "Drag an item into the scene." }
+            Row {
+                id: toolRow
+                spacing: 8;
+                PaletteItem {
                     anchors.verticalCenter: parent.verticalCenter
                     file: "Sun.qml";
                     image: "../images/sun.png"
                 }
-                PaletteItem{ 
+                PaletteItem {
                     file: "GenericItem.qml"
                     image: "../images/moon.png"
                 }
-                PaletteItem{ 
+                PaletteItem {
                     anchors.verticalCenter: parent.verticalCenter
                     file: "PerspectiveItem.qml"
                     image: "../images/tree_s.png"
                 }
-                PaletteItem{ 
+                PaletteItem {
                     anchors.verticalCenter: parent.verticalCenter
                     file: "PerspectiveItem.qml"
                     image: "../images/rabbit_brown.png"
                 }
-                PaletteItem{ 
+                PaletteItem {
                     anchors.verticalCenter: parent.verticalCenter
                     file: "PerspectiveItem.qml"
                     image: "../images/rabbit_bw.png"
                 }
             }
-            Text{ text: "Active Suns: " + activeSuns }
+            Text { text: "Active Suns: " + activeSuns }
             Rectangle { width: 440; height: 1; color: "black" }
-            Text{ text: "Arbitrary QML: " }
+            Text { text: "Arbitrary QML: " }
             TextEdit {
                 id: qmlText
                 width: 460
                 height: 220
                 readOnly: false
                 focusOnPress: true
-                font.pixelSize: 16
-                
-                text: "import Qt 4.6\nImage { id: smile;\n  x: 500*Math.random();\n  y: 200*Math.random(); \n  source: 'images/face-smile.png';\n  opacity: NumberAnimation{ \n    to: 0; duration: 1500;\n  }\n   Component.onCompleted: smile.destroy(1500);\n}"
+                font.pixelSize: 14
+
+                text: "import Qt 4.6\nImage {\n  id: smile;\n  x: 500*Math.random();\n  y: 200*Math.random(); \n  source: 'images/face-smile.png';\n  NumberAnimation on opacity { \n    to: 0; duration: 1500;\n  }\n   Component.onCompleted: smile.destroy(1500);\n}"
             }
             Button {
                 text: "Create"
diff --git a/examples/declarative/tabwidget/tab.png b/examples/declarative/tabwidget/tab.png
new file mode 100644
index 0000000..ad80216
Binary files /dev/null and b/examples/declarative/tabwidget/tab.png differ
diff --git a/examples/declarative/velocity/Day.qml b/examples/declarative/velocity/Day.qml
index 8a7364e..f4c24a5 100644
--- a/examples/declarative/velocity/Day.qml
+++ b/examples/declarative/velocity/Day.qml
@@ -52,7 +52,7 @@ Rectangle {
                         id: mouse
                         onClicked: { myText.focus = true }
                         anchors.fill: parent
-                        drag.target: stickyPage; drag.axis: "XandYAxis"; drag.minimumY: 0; drag.maximumY: 500
+                        drag.target: stickyPage; drag.axis: MouseArea.XandYAxis; drag.minimumY: 0; drag.maximumY: 500
                         drag.minimumX: 0; drag.maximumX: 400
                     }
                 }
-- 
cgit v0.12


From ae6f59d8dffc1a0569640e374dde01ed84f9c542 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Fri, 5 Mar 2010 13:23:04 +1000
Subject: Allow unquoted enum syntax for value types

QTBUG-5424
---
 src/declarative/qml/qdeclarativecompiler.cpp       |  6 ++--
 src/declarative/qml/qdeclarativeengine.cpp         |  1 +
 src/declarative/qml/qdeclarativemetatype.cpp       |  9 ++++--
 src/declarative/qml/qdeclarativemetatype_p.h       |  2 ++
 src/declarative/qml/qdeclarativevaluetype.cpp      | 34 ++++++++++++++++++++++
 src/declarative/qml/qdeclarativevaluetype_p.h      |  2 ++
 .../qdeclarativelanguage/data/enumTypes.errors.txt |  1 +
 .../qdeclarativelanguage/data/enumTypes.qml        |  4 +++
 .../tst_qdeclarativelanguage.cpp                   |  1 +
 .../qdeclarativevaluetypes/data/enums.1.qml        |  2 +-
 .../qdeclarativevaluetypes/data/enums.2.qml        |  2 +-
 .../qdeclarativevaluetypes/data/enums.3.qml        |  6 ++++
 .../qdeclarativevaluetypes/data/enums.4.qml        |  7 +++++
 .../tst_qdeclarativevaluetypes.cpp                 | 20 +++++++++++--
 14 files changed, 89 insertions(+), 8 deletions(-)
 create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/enumTypes.errors.txt
 create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/enumTypes.qml
 create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/enums.3.qml
 create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/enums.4.qml

diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index 5a2f3b5..3c6c949 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -561,9 +561,11 @@ bool QDeclarativeCompiler::compile(QDeclarativeEngine *engine,
         QDeclarativeCompositeTypeData::TypeReference &tref = unit->types[ii];
         QDeclarativeCompiledData::TypeReference ref;
         QDeclarativeScriptParser::TypeReference *parserRef = unit->data.referencedTypes().at(ii);
-        if (tref.type)
+        if (tref.type) {
             ref.type = tref.type;
-        else if (tref.unit) {
+            if (!ref.type->isCreatable()) 
+                COMPILE_EXCEPTION(parserRef->refObjects.first(), QCoreApplication::translate("QDeclarativeCompiler", "Element is not creatable."));
+        } else if (tref.unit) {
             ref.component = tref.unit->toComponent(engine);
 
             if (ref.component->isError()) {
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index 7ce2d0b..1e60df4 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -167,6 +167,7 @@ QDeclarativeEnginePrivate::QDeclarativeEnginePrivate(QDeclarativeEngine *e)
         QDeclarativeItemModule::defineModule();
         QDeclarativeUtilModule::defineModule();
         QDeclarativeEnginePrivate::defineModule();
+        QDeclarativeValueTypeFactory::registerValueTypes();
     }
     globalClass = new QDeclarativeGlobalScriptClass(&scriptEngine);
 
diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp
index abbb9d6..50ab56b 100644
--- a/src/declarative/qml/qdeclarativemetatype.cpp
+++ b/src/declarative/qml/qdeclarativemetatype.cpp
@@ -286,6 +286,11 @@ QDeclarativeCustomParser *QDeclarativeType::customParser() const
     return d->m_customParser;
 }
 
+bool QDeclarativeType::isCreatable() const
+{
+    return d->m_newFunc != 0;
+}
+
 bool QDeclarativeType::isInterface() const
 {
     return d->m_isInterface;
@@ -402,7 +407,7 @@ int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterType &t
 
     data->types.append(dtype);
     data->idToType.insert(dtype->typeId(), dtype);
-    data->idToType.insert(dtype->qListTypeId(), dtype);
+    if (dtype->qListTypeId()) data->idToType.insert(dtype->qListTypeId(), dtype);
 
     if (!dtype->qmlTypeName().isEmpty())
         data->nameToType.insertMulti(dtype->qmlTypeName(), dtype);
@@ -414,7 +419,7 @@ int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterType &t
     if (data->lists.size() <= type.listId)
         data->lists.resize(type.listId + 16);
     data->objects.setBit(type.typeId, true);
-    data->lists.setBit(type.listId, true);
+    if (type.listId) data->lists.setBit(type.listId, true);
 
     return index;
 }
diff --git a/src/declarative/qml/qdeclarativemetatype_p.h b/src/declarative/qml/qdeclarativemetatype_p.h
index ec5c045..cf8946d 100644
--- a/src/declarative/qml/qdeclarativemetatype_p.h
+++ b/src/declarative/qml/qdeclarativemetatype_p.h
@@ -114,6 +114,8 @@ public:
 
     QDeclarativeCustomParser *customParser() const;
 
+    bool isCreatable() const;
+
     bool isInterface() const;
     int typeId() const;
     int qListTypeId() const;
diff --git a/src/declarative/qml/qdeclarativevaluetype.cpp b/src/declarative/qml/qdeclarativevaluetype.cpp
index 34d3795..c070123 100644
--- a/src/declarative/qml/qdeclarativevaluetype.cpp
+++ b/src/declarative/qml/qdeclarativevaluetype.cpp
@@ -41,6 +41,8 @@
 
 #include "qdeclarativevaluetype_p.h"
 
+#include "qdeclarativemetatype_p.h"
+
 #include <QtCore/qdebug.h>
 
 QT_BEGIN_NAMESPACE
@@ -49,6 +51,32 @@ QT_BEGIN_NAMESPACE
 Q_DECLARE_METATYPE(QEasingCurve);
 #endif
 
+template<typename T>
+int qmlRegisterValueTypeEnums(const char *qmlName)
+{
+    QByteArray name(T::staticMetaObject.className());
+
+    QByteArray pointerName(name + '*');
+
+    QDeclarativePrivate::RegisterType type = {
+        0, 
+
+        qRegisterMetaType<T *>(pointerName.constData()), 0, 0,
+
+        "Qt", 4, 6, qmlName, &T::staticMetaObject,
+
+        0, 0, 
+
+        0, 0, 0,
+
+        0, 0,
+
+        0
+    };
+
+    return QDeclarativePrivate::registerType(type);
+}
+
 QDeclarativeValueTypeFactory::QDeclarativeValueTypeFactory()
 {
     // ### Optimize
@@ -80,6 +108,12 @@ bool QDeclarativeValueTypeFactory::isValueType(int idx)
     return false;
 }
 
+void QDeclarativeValueTypeFactory::registerValueTypes()
+{
+    qmlRegisterValueTypeEnums<QDeclarativeEasingValueType>("Easing");
+    qmlRegisterValueTypeEnums<QDeclarativeFontValueType>("Font");
+}
+
 QDeclarativeValueType *QDeclarativeValueTypeFactory::operator[](int idx) const
 {
 #if (QT_VERSION < QT_VERSION_CHECK(4,7,0))
diff --git a/src/declarative/qml/qdeclarativevaluetype_p.h b/src/declarative/qml/qdeclarativevaluetype_p.h
index e69f161..ad2f6c4 100644
--- a/src/declarative/qml/qdeclarativevaluetype_p.h
+++ b/src/declarative/qml/qdeclarativevaluetype_p.h
@@ -84,6 +84,8 @@ public:
     static bool isValueType(int);
     static QDeclarativeValueType *valueType(int);
 
+    static void registerValueTypes();
+
     QDeclarativeValueType *operator[](int idx) const;
 
 private:
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/enumTypes.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/enumTypes.errors.txt
new file mode 100644
index 0000000..d4e0cc0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/enumTypes.errors.txt
@@ -0,0 +1 @@
+3:1:Element is not creatable.
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/enumTypes.qml b/tests/auto/declarative/qdeclarativelanguage/data/enumTypes.qml
new file mode 100644
index 0000000..a723269
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/enumTypes.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+Font {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 3ce15cb..da0bf1a 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -326,6 +326,7 @@ void tst_qdeclarativelanguage::errors_data()
     QTest::newRow("invalidRoot") << "invalidRoot.qml" << "invalidRoot.errors.txt" << false;
     QTest::newRow("missingValueTypeProperty") << "missingValueTypeProperty.qml" << "missingValueTypeProperty.errors.txt" << false;
     QTest::newRow("objectValueTypeProperty") << "objectValueTypeProperty.qml" << "objectValueTypeProperty.errors.txt" << false;
+    QTest::newRow("enumTypes") << "enumTypes.qml" << "enumTypes.errors.txt" << false;
 }
 
 
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/enums.1.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/enums.1.qml
index 0eadd50..cb01a80 100644
--- a/tests/auto/declarative/qdeclarativevaluetypes/data/enums.1.qml
+++ b/tests/auto/declarative/qdeclarativevaluetypes/data/enums.1.qml
@@ -1,6 +1,6 @@
 import Test 1.0
 
 MyTypeObject {
-    font.capitalization: "MixedCase"
+    font.capitalization: "AllUppercase"
 }
 
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/enums.2.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/enums.2.qml
index 81f1c92..93f1ed5 100644
--- a/tests/auto/declarative/qdeclarativevaluetypes/data/enums.2.qml
+++ b/tests/auto/declarative/qdeclarativevaluetypes/data/enums.2.qml
@@ -1,6 +1,6 @@
 import Test 1.0
 
 MyTypeObject {
-    font.capitalization: if (1) "MixedCase"
+    font.capitalization: if (1) "AllUppercase"
 }
 
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/enums.3.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/enums.3.qml
new file mode 100644
index 0000000..3be5099
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevaluetypes/data/enums.3.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+import Qt 4.6
+
+MyTypeObject {
+    font.capitalization: Font.AllUppercase
+}
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/enums.4.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/enums.4.qml
new file mode 100644
index 0000000..6b494e4
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevaluetypes/data/enums.4.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+import Qt 4.6 as MyQt
+
+MyTypeObject {
+    font.capitalization: MyQt.Font.AllUppercase
+}
+
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp b/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp
index 8732215..51f9a07 100644
--- a/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp
+++ b/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp
@@ -597,7 +597,7 @@ void tst_qdeclarativevaluetypes::enums()
     QDeclarativeComponent component(&engine, TEST_FILE("enums.1.qml"));
     MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
     QVERIFY(object != 0);
-    QVERIFY(object->font().capitalization() == QFont::MixedCase);
+    QVERIFY(object->font().capitalization() == QFont::AllUppercase);
     delete object;
     }
 
@@ -605,7 +605,23 @@ void tst_qdeclarativevaluetypes::enums()
     QDeclarativeComponent component(&engine, TEST_FILE("enums.2.qml"));
     MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
     QVERIFY(object != 0);
-    QVERIFY(object->font().capitalization() == QFont::MixedCase);
+    QVERIFY(object->font().capitalization() == QFont::AllUppercase);
+    delete object;
+    }
+
+    {
+    QDeclarativeComponent component(&engine, TEST_FILE("enums.3.qml"));
+    MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+    QVERIFY(object != 0);
+    QVERIFY(object->font().capitalization() == QFont::AllUppercase);
+    delete object;
+    }
+
+    {
+    QDeclarativeComponent component(&engine, TEST_FILE("enums.4.qml"));
+    MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+    QVERIFY(object != 0);
+    QVERIFY(object->font().capitalization() == QFont::AllUppercase);
     delete object;
     }
 }
-- 
cgit v0.12


From 8fa8dcd33f5395060a84f6b7062c927aa675cde6 Mon Sep 17 00:00:00 2001
From: Martin Jones <martin.jones@nokia.com>
Date: Fri, 5 Mar 2010 13:31:12 +1000
Subject: Expect fail in currentIndex test for now.

---
 .../tst_qdeclarativelistview.cpp                   | 46 ++++++++++------------
 1 file changed, 20 insertions(+), 26 deletions(-)

diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
index a36224f..1df4448 100644
--- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
+++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
@@ -450,7 +450,7 @@ void tst_QDeclarativeListView::inserted()
     model.insertItem(1, "Will", "9876");
 
     // let transitions settle.
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     QCOMPARE(viewport->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
 
@@ -470,7 +470,7 @@ void tst_QDeclarativeListView::inserted()
     model.insertItem(0, "Foo", "1111"); // zero index, and current item
 
     // let transitions settle.
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     QCOMPARE(viewport->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
 
@@ -491,14 +491,14 @@ void tst_QDeclarativeListView::inserted()
 
     for (int i = model.count(); i < 30; ++i)
         model.insertItem(i, "Hello", QString::number(i));
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     listview->setContentY(80);
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     // Insert item outside visible area
     model.insertItem(1, "Hello", "1324");
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     QVERIFY(listview->contentY() == 80);
 
@@ -543,7 +543,7 @@ void tst_QDeclarativeListView::removed(bool animated)
     model.removeItem(1);
 
     // let transitions settle.
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     QDeclarativeText *name = findItem<QDeclarativeText>(viewport, "textName", 1);
     QVERIFY(name != 0);
@@ -565,7 +565,7 @@ void tst_QDeclarativeListView::removed(bool animated)
     model.removeItem(0);  // post: top item starts at 20
 
     // let transitions settle.
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     name = findItem<QDeclarativeText>(viewport, "textName", 0);
     QVERIFY(name != 0);
@@ -586,7 +586,7 @@ void tst_QDeclarativeListView::removed(bool animated)
     // Remove items not visible
     model.removeItem(18);
     // let transitions settle.
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     // Confirm items positioned correctly
     itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count();
@@ -603,7 +603,7 @@ void tst_QDeclarativeListView::removed(bool animated)
 
     model.removeItem(1); // post: top item will be at 40
     // let transitions settle.
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     // Confirm items positioned correctly
     for (int i = 2; i < 18; ++i) {
@@ -617,14 +617,14 @@ void tst_QDeclarativeListView::removed(bool animated)
     QVERIFY(listview->currentIndex() == 9);
     QDeclarativeItem *oldCurrent = listview->currentItem();
     model.removeItem(9);
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     QCOMPARE(listview->currentIndex(), 9);
     QVERIFY(listview->currentItem() != oldCurrent);
 
     listview->setContentY(40); // That's the top now
     // let transitions settle.
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     // Confirm items positioned correctly
     itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count();
@@ -637,20 +637,20 @@ void tst_QDeclarativeListView::removed(bool animated)
 
     // remove current item beyond visible items.
     listview->setCurrentIndex(20);
-    QTest::qWait(500);
+    QTest::qWait(300);
     listview->setContentY(40);
     model.removeItem(20);
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     QCOMPARE(listview->currentIndex(), 20);
     QVERIFY(listview->currentItem() != 0);
 
     // remove item before current, but visible
     listview->setCurrentIndex(8);
-    QTest::qWait(500);
+    QTest::qWait(300);
     oldCurrent = listview->currentItem();
     model.removeItem(6);
-    QTest::qWait(500);
+    QTest::qWait(300);
 
     QCOMPARE(listview->currentIndex(), 7);
     QVERIFY(listview->currentItem() == oldCurrent);
@@ -1028,22 +1028,16 @@ void tst_QDeclarativeListView::currentIndex()
     QCOMPARE(listview->contentY(), 0.0);
 
     // Test keys
+    qApp->setActiveWindow(canvas);
     canvas->show();
+    canvas->setFocus();
     qApp->processEvents();
 
-    QEvent wa(QEvent::WindowActivate);
-    QApplication::sendEvent(canvas, &wa);
-    QFocusEvent fe(QEvent::FocusIn);
-    QApplication::sendEvent(canvas, &fe);
-
-    QKeyEvent key(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier, "", false, 1);
-    QApplication::sendEvent(canvas, &key);
-    QVERIFY(key.isAccepted());
+    QTest::keyClick(canvas, Qt::Key_Down);
+    QEXPECT_FAIL("", "QTBUG-8475", Abort);
     QCOMPARE(listview->currentIndex(), 1);
 
-    key = QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier, "", false, 1);
-    QApplication::sendEvent(canvas, &key);
-    QVERIFY(key.isAccepted());
+    QTest::keyClick(canvas, Qt::Key_Up);
     QCOMPARE(listview->currentIndex(), 0);
 
     // turn off auto highlight
-- 
cgit v0.12


From 330e85d06600d50972f8abfeec6086e7e8ad6bc1 Mon Sep 17 00:00:00 2001
From: Yann Bodson <yann.bodson@nokia.com>
Date: Fri, 5 Mar 2010 13:41:14 +1000
Subject: Use new enum syntax for value types.

---
 examples/declarative/fonts/fonts.qml | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/examples/declarative/fonts/fonts.qml b/examples/declarative/fonts/fonts.qml
index 6246d16..e928df4 100644
--- a/examples/declarative/fonts/fonts.qml
+++ b/examples/declarative/fonts/fonts.qml
@@ -11,36 +11,36 @@ Rectangle {
     FontLoader { id: webFont; source: "http://www.princexml.com/fonts/steffmann/Starburst.ttf" }
 
     Column {
-        anchors.fill: parent; spacing: 10
+        anchors.fill: parent; spacing: 15
         anchors.leftMargin: 10; anchors.rightMargin: 10
         Text {
             text: myText; color: "lightsteelblue"
             width: parent.width; elide: Text.ElideRight
-            font.family: "Times"; font.pointSize: 36
+            font.family: "Times"; font.pointSize: 42
         }
         Text {
             text: myText; color: "lightsteelblue"
             width: parent.width; elide: Text.ElideLeft
-            font.family: "Times"; font.pointSize: 36
-            font.capitalization: "AllUppercase"
+            font.family: "Times"; font.pointSize: 42
+            font.capitalization: Font.AllUppercase
         }
         Text {
             text: myText; color: "lightsteelblue"
             width: parent.width; elide: Text.ElideMiddle
-            font.family: fixedFont.name; font.pointSize: 36; font.weight: "Bold"
-            font.capitalization: "AllLowercase"
+            font.family: fixedFont.name; font.pointSize: 42; font.weight: Font.Bold
+            font.capitalization: Font.AllLowercase
         }
         Text {
             text: myText; color: "lightsteelblue"
             width: parent.width; elide: Text.ElideRight
-            font.family: fixedFont.name; font.pointSize: 36; font.italic: true
-            font.capitalization: "SmallCaps"
+            font.family: fixedFont.name; font.pointSize: 42; font.italic: true
+            font.capitalization: Font.SmallCaps
         }
         Text {
             text: myText; color: "lightsteelblue"
             width: parent.width; elide: Text.ElideLeft
-            font.family: localFont.name; font.pointSize: 36
-            font.capitalization: "Capitalize"
+            font.family: localFont.name; font.pointSize: 42
+            font.capitalization: Font.Capitalize
         }
         Text {
             text: {
@@ -50,7 +50,7 @@ Rectangle {
             }
             color: "lightsteelblue"
             width: parent.width; elide: Text.ElideMiddle
-            font.family: webFont.name; font.pointSize: 36
+            font.family: webFont.name; font.pointSize: 42
         }
     }
 }
-- 
cgit v0.12


From 3d84e74212d7cb43e822aa7f0188ef533d8bb4a2 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Fri, 5 Mar 2010 13:40:11 +1000
Subject: Fix compiler warning on RVCT

Anonymous structures in unions cause warnings on this compiler.
QTBUG-8738
---
 src/declarative/qml/qdeclarativeinstruction_p.h | 321 +++++++++++++-----------
 1 file changed, 173 insertions(+), 148 deletions(-)

diff --git a/src/declarative/qml/qdeclarativeinstruction_p.h b/src/declarative/qml/qdeclarativeinstruction_p.h
index c41b14f..ec32b35 100644
--- a/src/declarative/qml/qdeclarativeinstruction_p.h
+++ b/src/declarative/qml/qdeclarativeinstruction_p.h
@@ -161,155 +161,180 @@ public:
 
     Type type;
     unsigned short line;
+
+    struct InitInstruction {
+        int bindingsSize;
+        int parserStatusSize;
+        int contextCache;
+        int compiledBinding;
+    };
+    struct CreateInstruction {
+        int type;
+        int data;
+        int bindingBits;
+        ushort column;
+    };
+    struct StoreMetaInstruction {
+        int data;
+        int aliasData;
+        int propertyCache;
+    };
+    struct SetIdInstruction {
+        int value;
+        int index;
+    };
+    struct AssignValueSourceInstruction {
+        int property;
+        int owner;
+        int castValue;
+    };
+    struct AssignValueInterceptorInstruction {
+        int property;
+        int owner;
+        int castValue;
+    };
+    struct AssignBindingInstruction {
+        unsigned int property;
+        int value;
+        short context;
+        short owner;
+    };
+    struct FetchInstruction {
+        int property;
+    };
+    struct FetchValueInstruction {
+        int property;
+        int type;
+    };
+    struct FetchQmlListInstruction {
+        int property;
+        int type;
+    };
+    struct BeginInstruction {
+        int castValue;
+    }; 
+    struct StoreFloatInstruction {
+        int propertyIndex;
+        float value;
+    };
+    struct StoreDoubleInstruction {
+        int propertyIndex;
+        double value;
+    };
+    struct StoreIntegerInstruction {
+        int propertyIndex;
+        int value;
+    };
+    struct StoreBoolInstruction {
+        int propertyIndex;
+        bool value;
+    };
+    struct StoreStringInstruction {
+        int propertyIndex;
+        int value;
+    };
+    struct StoreScriptStringInstruction {
+        int propertyIndex;
+        int value;
+        int scope;
+    }; 
+    struct StoreScriptInstruction {
+        int value;
+    };
+    struct StoreUrlInstruction {
+        int propertyIndex;
+        int value;
+    };
+    struct StoreColorInstruction {
+        int propertyIndex;
+        unsigned int value;
+    };
+    struct StoreDateInstruction {
+        int propertyIndex;
+        int value;
+    };
+    struct StoreTimeInstruction {
+        int propertyIndex;
+        int valueIndex;
+    };
+    struct StoreDateTimeInstruction {
+        int propertyIndex;
+        int valueIndex;
+    };
+    struct StoreRealPairInstruction {
+        int propertyIndex;
+        int valueIndex;
+    };
+    struct StoreRectInstruction {
+        int propertyIndex;
+        int valueIndex;
+    };
+    struct StoreVector3DInstruction {
+        int propertyIndex;
+        int valueIndex;
+    };
+    struct StoreObjectInstruction {
+        int propertyIndex;
+    };
+    struct AssignCustomTypeInstruction {
+        int propertyIndex;
+        int valueIndex;
+    };
+    struct StoreSignalInstruction {
+        int signalIndex;
+        int value;
+        int context;
+    };
+    struct AssignSignalObjectInstruction {
+        int signal;
+    };
+    struct CreateComponentInstruction {
+        int count;
+        ushort column;
+        int endLine;
+        int metaObject;
+    };
+    struct FetchAttachedInstruction {
+        int id;
+    };
+    struct DeferInstruction {
+        int deferCount;
+    };
+
     union {
-        struct {
-            int bindingsSize;
-            int parserStatusSize;
-            int contextCache;
-            int compiledBinding;
-        } init;
-        struct {
-            int type;
-            int data;
-            int bindingBits;
-            ushort column;
-        } create;
-        struct {
-            int data;
-            int aliasData;
-            int propertyCache;
-        } storeMeta;
-        struct {
-            int value;
-            int index;
-        } setId;
-        struct {
-            int property;
-            int owner;
-            int castValue;
-        } assignValueSource;
-        struct {
-            int property;
-            int owner;
-            int castValue;
-        } assignValueInterceptor;
-        struct {
-            unsigned int property;
-            int value;
-            short context;
-            short owner;
-        } assignBinding;
-        struct {
-            int property;
-            int id;
-        } assignIdOptBinding;
-        struct {
-            int property;
-            int contextIdx;
-            short context;
-            short notifyIdx;
-        } assignObjPropBinding;
-        struct {
-            int property;
-        } fetch;
-        struct {
-            int property;
-            int type;
-        } fetchValue;
-        struct {
-            int property;
-            int type;
-        } fetchQmlList;
-        struct {
-            int castValue;
-        } begin;
-        struct {
-            int propertyIndex;
-            float value;
-        } storeFloat;
-        struct {
-            int propertyIndex;
-            double value;
-        } storeDouble;
-        struct {
-            int propertyIndex;
-            int value;
-        } storeInteger;
-        struct {
-            int propertyIndex;
-            bool value;
-        } storeBool;
-        struct {
-            int propertyIndex;
-            int value;
-        } storeString;
-        struct {
-            int propertyIndex;
-            int value;
-            int scope;
-        } storeScriptString;
-        struct {
-            int value;
-        } storeScript;
-        struct {
-            int propertyIndex;
-            int value;
-        } storeUrl;
-        struct {
-            int propertyIndex;
-            unsigned int value;
-        } storeColor;
-        struct {
-            int propertyIndex;
-            int value;
-        } storeDate;
-        struct {
-            int propertyIndex;
-            int valueIndex;
-        } storeTime;
-        struct {
-            int propertyIndex;
-            int valueIndex;
-        } storeDateTime;
-        struct {
-            int propertyIndex;
-            int valueIndex;
-        } storeRealPair;
-        struct {
-            int propertyIndex;
-            int valueIndex;
-        } storeRect;
-        struct {
-            int propertyIndex;
-            int valueIndex;
-        } storeVector3D;
-        struct {
-            int propertyIndex;
-        } storeObject;
-        struct {
-            int propertyIndex;
-            int valueIndex;
-        } assignCustomType;
-        struct {
-            int signalIndex;
-            int value;
-            int context;
-        } storeSignal;
-        struct {
-            int signal;
-        } assignSignalObject;
-        struct {
-            int count;
-            ushort column;
-            int endLine;
-            int metaObject;
-        } createComponent;
-        struct {
-            int id;
-        } fetchAttached;
-        struct {
-            int deferCount;
-        } defer;
+        InitInstruction init;
+        CreateInstruction create;
+        StoreMetaInstruction storeMeta;
+        SetIdInstruction setId;
+        AssignValueSourceInstruction assignValueSource;
+        AssignValueInterceptorInstruction assignValueInterceptor;
+        AssignBindingInstruction assignBinding;
+        FetchInstruction fetch;
+        FetchValueInstruction fetchValue;
+        FetchQmlListInstruction fetchQmlList;
+        BeginInstruction begin;
+        StoreFloatInstruction storeFloat;
+        StoreDoubleInstruction storeDouble;
+        StoreIntegerInstruction storeInteger;
+        StoreBoolInstruction storeBool;
+        StoreStringInstruction storeString;
+        StoreScriptStringInstruction storeScriptString;
+        StoreScriptInstruction storeScript;
+        StoreUrlInstruction storeUrl;
+        StoreColorInstruction storeColor;
+        StoreDateInstruction storeDate;
+        StoreTimeInstruction storeTime;
+        StoreDateTimeInstruction storeDateTime;
+        StoreRealPairInstruction storeRealPair;
+        StoreRectInstruction storeRect;
+        StoreVector3DInstruction storeVector3D;
+        StoreObjectInstruction storeObject;
+        AssignCustomTypeInstruction assignCustomType;
+        StoreSignalInstruction storeSignal;
+        AssignSignalObjectInstruction assignSignalObject;
+        CreateComponentInstruction createComponent;
+        FetchAttachedInstruction fetchAttached;
+        DeferInstruction defer;
     };
 
     void dump(QDeclarativeCompiledData *);
-- 
cgit v0.12


From b771a3a1238bd843c962a3a2a7cb04e2dfaeadbf Mon Sep 17 00:00:00 2001
From: Yann Bodson <yann.bodson@nokia.com>
Date: Fri, 5 Mar 2010 13:41:55 +1000
Subject: Delete uninspiring example.

---
 examples/declarative/anchors/anchor-changes.qml | 46 -------------------------
 1 file changed, 46 deletions(-)
 delete mode 100644 examples/declarative/anchors/anchor-changes.qml

diff --git a/examples/declarative/anchors/anchor-changes.qml b/examples/declarative/anchors/anchor-changes.qml
deleted file mode 100644
index 99ca3db..0000000
--- a/examples/declarative/anchors/anchor-changes.qml
+++ /dev/null
@@ -1,46 +0,0 @@
-import Qt 4.6
-
-Item {
-    id: window
-    width: 200; height: 450
-
-    Rectangle {
-        id: titleBar; color: "Gray"
-        anchors.top: parent.top; height: 50
-        width: parent.width
-    }
-
-    Rectangle {
-        id: statusBar; color: "Gray"
-        height: 50; anchors.bottom: parent.bottom
-        width: parent.width
-    }
-
-    Rectangle {
-        id: content
-        anchors.top: titleBar.bottom; anchors.bottom: statusBar.top
-        width: parent.width
-
-        Text { text: "Top"; anchors.top: parent.top }
-        Text { text: "Bottom"; anchors.bottom: parent.bottom }
-    }
-
-    MouseArea {
-        anchors.fill: content
-        onPressed: window.state = "FullScreen"
-        onReleased: window.state = ""
-    }
-
-    states : State {
-        name: "FullScreen"
-    //! [0]
-        AnchorChanges {
-            target: content; top: window.top; bottom: window.bottom
-        }
-    //! [0]
-    }
-
-    transitions : Transition {
-        NumberAnimation { properties: "y,height" }
-    }
-}
-- 
cgit v0.12