on xenial help sign in
Fixed previewReady. Some more checks around preview properties.
commite3751780446e0fd6140fc657da6206dc9fdacc55 authorPawel Stolowski <pawel.stolowski@canonical.com> dateWed 26 Jun 2013, 12:56 (13 years ago) parent2be4be1
6 files changed+29−7
plugins/Unity/genericpreview.h+2 plugins/Unity/moviepreview.cpp+18−4 plugins/Unity/plugin.cpp+2 plugins/Unity/preview.cpp+1−1 plugins/Unity/scope.cpp+5−1 plugins/Unity/scope.h+1−1
plugins/Unity/genericpreview.h+2
@@ -35,4 +35,6 @@ public:
3535 explicit GenericPreview(QObject *parent = 0);
3636};
3737
38+Q_DECLARE_METATYPE(GenericPreview *)
39+
3840#endif
plugins/Unity/moviepreview.cpp+18−4
@@ -20,6 +20,9 @@
2020// local
2121#include "moviepreview.h"
2222
23+// Qt
24+#include <QDebug>
25+
2326MoviePreview::MoviePreview(QObject *parent):
2427 Preview(parent)
2528{
@@ -27,19 +30,30 @@ MoviePreview::MoviePreview(QObject *parent):
2730
2831QString MoviePreview::year() const
2932{
30− return QString::fromStdString(m_unityMoviePreview->year());
33+ if (m_unityMoviePreview) {
34+ return QString::fromStdString(m_unityMoviePreview->year());
35+ } else {
36+ qWarning() << "Preview not set";
37+ }
3138}
3239
3340float MoviePreview::rating() const
3441{
35− return m_unityMoviePreview->rating();
42+ if (m_unityMoviePreview) {
43+ return m_unityMoviePreview->rating();
44+ } else {
45+ qWarning() << "Preview not set";
46+ }
3647}
3748
3849unsigned int MoviePreview::numRatings() const
3950{
40− return m_unityMoviePreview->num_ratings();
51+ if (m_unityMoviePreview) {
52+ return m_unityMoviePreview->num_ratings();
53+ } else {
54+ qWarning() << "Preview not set";
55+ }
4156}
42−
4357
4458void MoviePreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
4559{
plugins/Unity/plugin.cpp+2
@@ -24,6 +24,7 @@
2424#include "plugin.h"
2525
2626// local
27+#include "preview.h"
2728#include "scope.h"
2829#include "scopes.h"
2930#include "categories.h"
@@ -40,6 +41,7 @@ static const char* DBUS_SERVICE = "com.canonical.Shell.BottomBarVisibilityCommun
4041void UnityPlugin::registerTypes(const char *uri)
4142{
4243 Q_ASSERT(uri == QLatin1String("Unity"));
44+ qmlRegisterUncreatableType<Preview>(uri, 0, 1, "Preview", "Can't create Preview object in QML.");
4345 qmlRegisterType<Scope>(uri, 0, 1, "Scope");
4446 qmlRegisterType<Scopes>(uri, 0, 1, "Scopes");
4547 qmlRegisterType<Categories>(uri, 0, 1, "Categories");
plugins/Unity/preview.cpp+1−1
@@ -91,7 +91,7 @@ Preview* Preview::newFromUnityPreview(unity::dash::Preview::Ptr unityPreview)
9191 preview = new GenericPreview();
9292 }
9393 else if (typeid(*unityPreview) == typeid(unity::dash::MusicPreview)) {
94− preview = new GenericPreview();
94+ preview = new MusicPreview();
9595 }
9696 else if (typeid(*unityPreview) == typeid(unity::dash::MoviePreview)) {
9797 preview = new MoviePreview();
plugins/Unity/scope.cpp+5−1
@@ -29,6 +29,7 @@
2929#include <QUrl>
3030#include <QDebug>
3131#include <QtGui/QDesktopServices>
32+#include <QQmlEngine>
3233
3334#include <UnityCore/Variant.h>
3435
@@ -190,7 +191,10 @@ void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::Sco
190191void Scope::onPreviewReady(unity::dash::LocalResult const& /* result */, unity::dash::Preview::Ptr const& preview)
191192{
192193 auto prv = Preview::newFromUnityPreview(preview);
193− Q_EMIT previewReady(*prv);
194+ // is this the best solution? QML may need to keep more than one preview instance around, so we can't own it.
195+ // passing it by value is not possible.
196+ QQmlEngine::setObjectOwnership(prv, QQmlEngine::JavaScriptOwnership);
197+ Q_EMIT previewReady(prv);
194198}
195199
196200void Scope::fallbackActivate(const QString& uri)
plugins/Unity/scope.h+1−1
@@ -101,7 +101,7 @@ Q_SIGNALS:
101101 void noResultsHintChanged();
102102
103103 // signals triggered by activate(..) or preview(..) requests.
104− void previewReady(const Preview &preview);
104+ void previewReady(Preview *preview);
105105 void showDash();
106106 void hideDash();
107107 void gotoUri(const QString &uri);