on xenial help sign in
Fixed previewReady. Some more checks around preview properties.
e375178Pawel Stolowski
plugins/Unity/genericpreview.h+2
@@ -35,4 +35,6 @@ public:
35 explicit GenericPreview(QObject *parent = 0);
35 explicit GenericPreview(QObject *parent = 0);
36};
36};
37
37
38+Q_DECLARE_METATYPE(GenericPreview *)
39+
38#endif
40#endif
plugins/Unity/moviepreview.cpp+18−4
@@ -20,6 +20,9 @@
20// local
20// local
21#include "moviepreview.h"
21#include "moviepreview.h"
22
22
23+// Qt
24+#include <QDebug>
25+
23MoviePreview::MoviePreview(QObject *parent):
26MoviePreview::MoviePreview(QObject *parent):
24 Preview(parent)
27 Preview(parent)
25{
28{
@@ -27,19 +30,30 @@ MoviePreview::MoviePreview(QObject *parent):
27
30
28QString MoviePreview::year() const
31QString MoviePreview::year() const
29{
32{
33+ if (m_unityMoviePreview) {
30− return QString::fromStdString(m_unityMoviePreview->year());
34+ return QString::fromStdString(m_unityMoviePreview->year());
35+ } else {
36+ qWarning() << "Preview not set";
37+ }
31}
38}
32
39
33float MoviePreview::rating() const
40float MoviePreview::rating() const
34{
41{
42+ if (m_unityMoviePreview) {
35− return m_unityMoviePreview->rating();
43+ return m_unityMoviePreview->rating();
44+ } else {
45+ qWarning() << "Preview not set";
46+ }
36}
47}
37
48
38unsigned int MoviePreview::numRatings() const
49unsigned int MoviePreview::numRatings() const
39{
50{
51+ if (m_unityMoviePreview) {
40− return m_unityMoviePreview->num_ratings();
52+ return m_unityMoviePreview->num_ratings();
53+ } else {
54+ qWarning() << "Preview not set";
55+ }
41}
56}
42−
43
57
44void MoviePreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
58void MoviePreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
45{
59{
plugins/Unity/plugin.cpp+2
@@ -24,6 +24,7 @@
24#include "plugin.h"
24#include "plugin.h"
25
25
26// local
26// local
27+#include "preview.h"
27#include "scope.h"
28#include "scope.h"
28#include "scopes.h"
29#include "scopes.h"
29#include "categories.h"
30#include "categories.h"
@@ -40,6 +41,7 @@ static const char* DBUS_SERVICE = "com.canonical.Shell.BottomBarVisibilityCommun
40void UnityPlugin::registerTypes(const char *uri)
41void UnityPlugin::registerTypes(const char *uri)
41{
42{
42 Q_ASSERT(uri == QLatin1String("Unity"));
43 Q_ASSERT(uri == QLatin1String("Unity"));
44+ qmlRegisterUncreatableType<Preview>(uri, 0, 1, "Preview", "Can't create Preview object in QML.");
43 qmlRegisterType<Scope>(uri, 0, 1, "Scope");
45 qmlRegisterType<Scope>(uri, 0, 1, "Scope");
44 qmlRegisterType<Scopes>(uri, 0, 1, "Scopes");
46 qmlRegisterType<Scopes>(uri, 0, 1, "Scopes");
45 qmlRegisterType<Categories>(uri, 0, 1, "Categories");
47 qmlRegisterType<Categories>(uri, 0, 1, "Categories");
plugins/Unity/preview.cpp+1−1
@@ -91,7 +91,7 @@ Preview* Preview::newFromUnityPreview(unity::dash::Preview::Ptr unityPreview)
91 preview = new GenericPreview();
91 preview = new GenericPreview();
92 }
92 }
93 else if (typeid(*unityPreview) == typeid(unity::dash::MusicPreview)) {
93 else if (typeid(*unityPreview) == typeid(unity::dash::MusicPreview)) {
94− preview = new GenericPreview();
94+ preview = new MusicPreview();
95 }
95 }
96 else if (typeid(*unityPreview) == typeid(unity::dash::MoviePreview)) {
96 else if (typeid(*unityPreview) == typeid(unity::dash::MoviePreview)) {
97 preview = new MoviePreview();
97 preview = new MoviePreview();
plugins/Unity/scope.cpp+5−1
@@ -29,6 +29,7 @@
29#include <QUrl>
29#include <QUrl>
30#include <QDebug>
30#include <QDebug>
31#include <QtGui/QDesktopServices>
31#include <QtGui/QDesktopServices>
32+#include <QQmlEngine>
32
33
33#include <UnityCore/Variant.h>
34#include <UnityCore/Variant.h>
34
35
@@ -190,7 +191,10 @@ void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::Sco
190void Scope::onPreviewReady(unity::dash::LocalResult const& /* result */, unity::dash::Preview::Ptr const& preview)
191void Scope::onPreviewReady(unity::dash::LocalResult const& /* result */, unity::dash::Preview::Ptr const& preview)
191{
192{
192 auto prv = Preview::newFromUnityPreview(preview);
193 auto prv = Preview::newFromUnityPreview(preview);
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);
193− Q_EMIT previewReady(*prv);
197+ Q_EMIT previewReady(prv);
194}
198}
195
199
196void Scope::fallbackActivate(const QString& uri)
200void Scope::fallbackActivate(const QString& uri)
plugins/Unity/scope.h+1−1
@@ -101,7 +101,7 @@ Q_SIGNALS:
101 void noResultsHintChanged();
101 void noResultsHintChanged();
102
102
103 // signals triggered by activate(..) or preview(..) requests.
103 // signals triggered by activate(..) or preview(..) requests.
104− void previewReady(const Preview &preview);
104+ void previewReady(Preview *preview);
105 void showDash();
105 void showDash();
106 void hideDash();
106 void hideDash();
107 void gotoUri(const QString &uri);
107 void gotoUri(const QString &uri);