summaryrefslogtreecommitdiffstats
path: root/src/intent-server-lib/intentserverrequest.cpp
diff options
Diffstat (limited to 'src/intent-server-lib/intentserverrequest.cpp')
-rw-r--r--src/intent-server-lib/intentserverrequest.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/intent-server-lib/intentserverrequest.cpp b/src/intent-server-lib/intentserverrequest.cpp
index 9641ccbb..0aaa1125 100644
--- a/src/intent-server-lib/intentserverrequest.cpp
+++ b/src/intent-server-lib/intentserverrequest.cpp
@@ -20,11 +20,17 @@ IntentServerRequest::IntentServerRequest(const QString &requestingApplicationId,
Q_ASSERT(!potentialIntents.isEmpty());
Q_ASSERT(!broadcast || (potentialIntents.size() == 1));
- for (auto *intent : potentialIntents)
- m_potentialIntents << intent;
+ // Intents may die during handling (app removal), so we create shadow copies for QML
+ m_potentialIntents.reserve(potentialIntents.size());
+ for (auto *intent : potentialIntents) {
+ Q_ASSERT(intent);
+ auto copy = intent->copy();
+ copy->setParent(this); // for automatic deletion and ownership
+ m_potentialIntents << copy;
+ }
if (potentialIntents.size() == 1)
- setSelectedIntent(potentialIntents.constFirst());
+ m_selectedIntent = m_potentialIntents.constFirst();
}
IntentServerRequest::State IntentServerRequest::state() const
@@ -49,17 +55,12 @@ QString IntentServerRequest::requestingApplicationId() const
Intent *IntentServerRequest::selectedIntent() const
{
- return m_selectedIntent.get();
+ return m_selectedIntent;
}
QVector<Intent *> IntentServerRequest::potentialIntents() const
{
- QVector<Intent *> out;
- for (auto &intent : m_potentialIntents) {
- if (intent)
- out << intent.get();
- }
- return out;
+ return m_potentialIntents;
}
QVariantMap IntentServerRequest::parameters() const
@@ -104,7 +105,7 @@ void IntentServerRequest::setState(IntentServerRequest::State newState)
void IntentServerRequest::setSelectedIntent(Intent *intent)
{
- if (m_potentialIntents.contains(intent))
+ if (!intent || m_potentialIntents.contains(intent))
m_selectedIntent = intent;
}