on xenial help sign in
Support cancellation for preview actions.
commit9a3ba832d169e7755baeb4cc68a6518e8b5ab9fe authorPawel Stolowski <pawel.stolowski@canonical.com> dateWed 25 Sep 2013, 17:53 (13 years ago) parentf455f2a105cfb0
4 files changed+21−21
plugins/Unity/preview.cpp+9−1 plugins/Unity/preview.h+3 plugins/Unity/scope.cpp+6−18 plugins/Unity/scope.h+3−2
plugins/Unity/preview.cpp+9−1
@@ -39,6 +39,8 @@
3939#include <UnityCore/MusicPreview.h>
4040#include <UnityCore/SocialPreview.h>
4141
42+#include <UnityCore/GLibWrapper.h>
43+
4244Preview::Preview(QObject *parent):
4345 QObject(parent),
4446 m_unityPreview(nullptr),
@@ -188,8 +190,14 @@ void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& h
188190{
189191 if (m_unityPreview) {
190192 auto unityHints = convertToHintsMap(hints);
191− m_unityPreview->PerformAction(actionId.toStdString(), unityHints);
193+ m_actionCancellable.Renew();
194+ m_unityPreview->PerformAction(actionId.toStdString(), unityHints, nullptr, m_actionCancellable);
192195 } else {
193196 qWarning() << "Preview not set";
194197 }
195198}
199+
200+void Preview::cancelAction()
201+{
202+ m_actionCancellable.Cancel();
203+}
plugins/Unity/preview.h+3
@@ -33,6 +33,7 @@
3333// local
3434#include "result.h"
3535#include "previewaction.h"
36+#include <UnityCore/GLibWrapper.h>
3637
3738class Q_DECL_EXPORT Preview : public QObject
3839{
@@ -65,6 +66,7 @@ public:
6566 QVariant result() const;
6667
6768 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
69+ Q_INVOKABLE void cancelAction();
6870
6971Q_SIGNALS:
7072 void previewChanged();
@@ -81,6 +83,7 @@ private:
8183 QList<QObject *> m_actions;
8284 QList<QObject *> m_infoHints;
8385 QVariantMap m_infoHintsHash;
86+ unity::glib::Cancellable m_actionCancellable;
8487};
8588
8689Q_DECLARE_METATYPE(Preview *)
plugins/Unity/scope.cpp+6−18
@@ -39,18 +39,10 @@
3939
4040Scope::Scope(QObject *parent) : QObject(parent)
4141 , m_formFactor("phone")
42− , m_previewCancellable(nullptr)
4342{
4443 m_categories.reset(new Categories(this));
4544}
4645
47−Scope::~Scope()
48−{
49− if (m_previewCancellable) {
50− g_object_unref(m_previewCancellable);
51− }
52−}
53−
5446QString Scope::id() const
5547{
5648 return QString::fromStdString(m_unityScope->id());
@@ -183,14 +175,14 @@ void Scope::preview(const QVariant &uri, const QVariant &icon_hint, const QVaria
183175 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
184176{
185177 auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
186−
187− if (m_previewCancellable) {
188− g_cancellable_cancel(m_previewCancellable);
189− g_object_unref(m_previewCancellable);
190− }
191− m_previewCancellable = g_cancellable_new();
178+ m_previewCancellable.Renew();
192179 m_unityScope->Preview(res, nullptr, m_previewCancellable);
193180}
181+
182+void Scope::cancelActivation()
183+{
184+ m_previewCancellable.Cancel();
185+}
194186
195187void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints)
196188{
@@ -220,10 +212,6 @@ void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::Sco
220212
221213void Scope::onPreviewReady(unity::dash::LocalResult const& /* result */, unity::dash::Preview::Ptr const& preview)
222214{
223− if (m_previewCancellable) {
224− g_object_unref(m_previewCancellable);
225− m_previewCancellable = nullptr;
226− }
227215 auto prv = Preview::newFromUnityPreview(preview);
228216 // is this the best solution? QML may need to keep more than one preview instance around, so we can't own it.
229217 // passing it by value is not possible.
plugins/Unity/scope.h+3−2
@@ -55,7 +55,6 @@ class Scope : public QObject
5555
5656public:
5757 explicit Scope(QObject *parent = 0);
58− ~Scope();
5958
6059 /* getters */
6160 QString id() const;
@@ -83,6 +82,8 @@ public:
8382 Q_INVOKABLE void preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
8483 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
8584 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata);
85+ Q_INVOKABLE void cancelActivation();
86+
8687 void setUnityScope(const unity::dash::Scope::Ptr& scope);
8788 unity::dash::Scope::Ptr unityScope() const;
8889
@@ -132,7 +133,7 @@ private:
132133 QString m_searchQuery;
133134 QString m_noResultsHint;
134135 QString m_formFactor;
135− GCancellable* m_previewCancellable;
136+ unity::glib::Cancellable m_previewCancellable;
136137};
137138
138139Q_DECLARE_METATYPE(Scope*)