on xenial help sign in
Support for action cancellation. Added Q_INVOKABLE methods to cancel preview / action.
commitd7c7b8894a59d17bf1639454d159ed6cc0868380 authorPawel Stolowski <pawel.stolowski@canonical.com> dateWed 25 Sep 2013, 15:31 (13 years ago) parentf455f2a
4 files changed+44−3
plugins/Unity/preview.cpp+31−1 plugins/Unity/preview.h+3 plugins/Unity/scope.cpp+8−2 plugins/Unity/scope.h+2
plugins/Unity/preview.cpp+31−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),
@@ -46,6 +48,13 @@ Preview::Preview(QObject *parent):
4648{
4749}
4850
51+Preview::~Preview()
52+{
53+ if (m_actionCancellable) {
54+ g_object_unref(m_actionCancellable);
55+ }
56+}
57+
4958QString Preview::rendererName() const
5059{
5160 if (m_unityPreview) {
@@ -188,8 +197,29 @@ void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& h
188197{
189198 if (m_unityPreview) {
190199 auto unityHints = convertToHintsMap(hints);
191− m_unityPreview->PerformAction(actionId.toStdString(), unityHints);
200+
201+ // cancel previous action
202+ cancelAction();
203+
204+ m_actionCancellable = g_cancellable_new();
205+ m_unityPreview->PerformAction(actionId.toStdString(),
206+ unityHints,
207+ [this](unity::dash::LocalResult const&, unity::dash::ScopeHandledType, unity::glib::Error const&) {
208+ if (m_actionCancellable) {
209+ g_object_unref(m_actionCancellable);
210+ m_actionCancellable = nullptr;
211+ }
212+ }, m_actionCancellable);
192213 } else {
193214 qWarning() << "Preview not set";
194215 }
195216}
217+
218+void Preview::cancelAction()
219+{
220+ if (m_actionCancellable) {
221+ g_cancellable_cancel(m_actionCancellable);
222+ g_object_unref(m_actionCancellable);
223+ m_actionCancellable = nullptr;
224+ }
225+}
plugins/Unity/preview.h+3
@@ -51,6 +51,7 @@ class Q_DECL_EXPORT Preview : public QObject
5151
5252public:
5353 explicit Preview(QObject *parent = 0);
54+ ~Preview();
5455 static Preview* newFromUnityPreview(unity::dash::Preview::Ptr unityPreview);
5556
5657 QString rendererName() const;
@@ -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+ GCancellable* m_actionCancellable;
8487};
8588
8689Q_DECLARE_METATYPE(Preview *)
plugins/Unity/scope.cpp+8−2
@@ -184,12 +184,18 @@ void Scope::preview(const QVariant &uri, const QVariant &icon_hint, const QVaria
184184{
185185 auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
186186
187+ cancelActivation();
188+ m_previewCancellable = g_cancellable_new();
189+ m_unityScope->Preview(res, nullptr, m_previewCancellable);
190+}
191+
192+void Scope::cancelActivation()
193+{
187194 if (m_previewCancellable) {
188195 g_cancellable_cancel(m_previewCancellable);
189196 g_object_unref(m_previewCancellable);
197+ m_previewCancellable = nullptr;
190198 }
191− m_previewCancellable = g_cancellable_new();
192− m_unityScope->Preview(res, nullptr, m_previewCancellable);
193199}
194200
195201void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints)
plugins/Unity/scope.h+2
@@ -83,6 +83,8 @@ public:
8383 Q_INVOKABLE void preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
8484 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
8585 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata);
86+ Q_INVOKABLE void cancelActivation();
87+
8688 void setUnityScope(const unity::dash::Scope::Ptr& scope);
8789 unity::dash::Scope::Ptr unityScope() const;
8890