summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/multimedia/multimedia.cpp8
-rw-r--r--src/imports/multimedia/qdeclarativemultimediaglobal.cpp52
-rw-r--r--src/imports/multimedia/qdeclarativemultimediaglobal_p.h26
3 files changed, 43 insertions, 43 deletions
diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp
index 80dc4f82c..a71c6f1c2 100644
--- a/src/imports/multimedia/multimedia.cpp
+++ b/src/imports/multimedia/multimedia.cpp
@@ -57,6 +57,12 @@ QML_DECLARE_TYPE(QSoundEffect)
QT_BEGIN_NAMESPACE
+static QObject *multimedia_global_object(QQmlEngine *qmlEngine, QJSEngine *jsEngine)
+{
+ Q_UNUSED(qmlEngine)
+ return new QDeclarativeMultimediaGlobal(jsEngine);
+}
+
class QMultimediaDeclarativeModule : public QQmlExtensionPlugin
{
Q_OBJECT
@@ -98,7 +104,7 @@ public:
qmlRegisterType<QSoundEffect>(uri, 5, 3, "SoundEffect");
// 5.4 types
- qmlRegisterSingletonType(uri, 5, 4, "QtMultimedia", QDeclarativeMultimedia::initGlobalObject);
+ qmlRegisterSingletonType<QDeclarativeMultimediaGlobal>(uri, 5, 4, "QtMultimedia", multimedia_global_object);
qmlRegisterRevision<QDeclarativeCamera, 1>(uri, 5, 4);
qmlRegisterUncreatableType<QDeclarativeCameraViewfinder>(uri, 5, 4, "CameraViewfinder",
trUtf8("CameraViewfinder is provided by Camera"));
diff --git a/src/imports/multimedia/qdeclarativemultimediaglobal.cpp b/src/imports/multimedia/qdeclarativemultimediaglobal.cpp
index 37e429794..c6430427e 100644
--- a/src/imports/multimedia/qdeclarativemultimediaglobal.cpp
+++ b/src/imports/multimedia/qdeclarativemultimediaglobal.cpp
@@ -153,27 +153,6 @@ Camera {
\endqml
*/
-namespace QDeclarativeMultimedia {
-
-#define FREEZE_SOURCE "(function deepFreeze(o) { "\
- " var prop, propKey;" \
- " Object.freeze(o);" \
- " for (propKey in o) {" \
- " prop = o[propKey];" \
- " if (!o.hasOwnProperty(propKey) || !(typeof prop === \"object\") || " \
- " Object.isFrozen(prop)) {" \
- " continue;" \
- " }" \
- " deepFreeze(prop);" \
- " }" \
- "})"
-
-static void deepFreeze(QJSEngine *jsEngine, const QJSValue &obj)
-{
- QJSValue freezeFunc = jsEngine->evaluate(QString::fromUtf8(FREEZE_SOURCE));
- freezeFunc.call(QJSValueList() << obj);
-}
-
static QJSValue cameraInfoToJSValue(QJSEngine *jsEngine, const QCameraInfo &camera)
{
QJSValue o = jsEngine->newObject();
@@ -184,29 +163,24 @@ static QJSValue cameraInfoToJSValue(QJSEngine *jsEngine, const QCameraInfo &came
return o;
}
-QJSValue initGlobalObject(QQmlEngine *qmlEngine, QJSEngine *jsEngine)
+QDeclarativeMultimediaGlobal::QDeclarativeMultimediaGlobal(QJSEngine *engine, QObject *parent)
+ : QObject(parent)
+ , m_engine(engine)
{
- Q_UNUSED(qmlEngine)
-
- QJSValue globalObject = jsEngine->newObject();
+}
- // property object defaultCamera
- globalObject.setProperty(QStringLiteral("defaultCamera"),
- cameraInfoToJSValue(jsEngine, QCameraInfo::defaultCamera()));
+QJSValue QDeclarativeMultimediaGlobal::defaultCamera() const
+{
+ return cameraInfoToJSValue(m_engine, QCameraInfo::defaultCamera());
+}
- // property list<object> availableCameras
+QJSValue QDeclarativeMultimediaGlobal::availableCameras() const
+{
QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
- QJSValue availableCameras = jsEngine->newArray(cameras.count());
+ QJSValue availableCameras = m_engine->newArray(cameras.count());
for (int i = 0; i < cameras.count(); ++i)
- availableCameras.setProperty(i, cameraInfoToJSValue(jsEngine, cameras.at(i)));
- globalObject.setProperty(QStringLiteral("availableCameras"), availableCameras);
-
- // freeze global object to prevent properties to be modified from QML
- deepFreeze(jsEngine, globalObject);
-
- return globalObject;
-}
-
+ availableCameras.setProperty(i, cameraInfoToJSValue(m_engine, cameras.at(i)));
+ return availableCameras;
}
QT_END_NAMESPACE
diff --git a/src/imports/multimedia/qdeclarativemultimediaglobal_p.h b/src/imports/multimedia/qdeclarativemultimediaglobal_p.h
index 6c4dba7f4..192874c23 100644
--- a/src/imports/multimedia/qdeclarativemultimediaglobal_p.h
+++ b/src/imports/multimedia/qdeclarativemultimediaglobal_p.h
@@ -46,12 +46,32 @@
//
#include <QtQml/qqml.h>
+#include <QtQml/qjsvalue.h>
QT_BEGIN_NAMESPACE
-namespace QDeclarativeMultimedia {
- QJSValue initGlobalObject(QQmlEngine *, QJSEngine *);
-}
+class QDeclarativeMultimediaGlobal : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QJSValue defaultCamera READ defaultCamera NOTIFY defaultCameraChanged)
+ Q_PROPERTY(QJSValue availableCameras READ availableCameras NOTIFY availableCamerasChanged)
+
+public:
+ explicit QDeclarativeMultimediaGlobal(QJSEngine *engine, QObject *parent = 0);
+
+ QJSValue defaultCamera() const;
+ QJSValue availableCameras() const;
+
+Q_SIGNALS:
+ // Unused at the moment. QCameraInfo doesn't notify when cameras are added or removed,
+ // but it might change in the future.
+ void defaultCameraChanged();
+ void availableCamerasChanged();
+
+private:
+ QJSEngine *m_engine;
+};
QT_END_NAMESPACE