summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernd Weimer <bernd.weimer@pelagicore.com>2020-08-03 15:04:57 +0200
committerBernd Weimer <bernd.weimer@pelagicore.com>2020-08-11 13:46:06 +0200
commitd4277ed9597a2277f6a32f3f8480d746cd020a82 (patch)
tree0eb8564f6b4ceb537267066866b7d9f305cbc8e5
parentc74ca43fa25801bf063755fa27a8fc53c23ac1a5 (diff)
Fix intents for quick-launched runtimesv5.15.0_QtAS
Quick-launched runtimes emit the newRuntimeCreated signal too late and hence the IntentServer didn't connect to the peer DBus signals. Change-Id: I15847e9c43a74b23494846870184c6955fa15cb1 Reviewed-by: Robert Griebl <robert.griebl@qt.io>
-rw-r--r--src/manager-lib/abstractruntime.cpp6
-rw-r--r--src/manager-lib/abstractruntime.h8
-rw-r--r--src/manager-lib/intentaminterface.cpp4
-rw-r--r--src/manager-lib/nativeruntime.cpp3
-rw-r--r--src/manager-lib/qmlinprocessruntime.cpp2
-rw-r--r--tests/qml/intents/am-config-quick.yaml6
-rw-r--r--tests/qml/intents/intents.pro7
7 files changed, 34 insertions, 2 deletions
diff --git a/src/manager-lib/abstractruntime.cpp b/src/manager-lib/abstractruntime.cpp
index 7bb270aa..6b8fe54c 100644
--- a/src/manager-lib/abstractruntime.cpp
+++ b/src/manager-lib/abstractruntime.cpp
@@ -95,6 +95,12 @@ QVariantMap AbstractRuntime::systemProperties() const
return QVariantMap();
}
+RuntimeSignaler *AbstractRuntime::signaler()
+{
+ static RuntimeSignaler rs;
+ return &rs;
+}
+
QByteArray AbstractRuntime::securityToken() const
{
return m_securityToken;
diff --git a/src/manager-lib/abstractruntime.h b/src/manager-lib/abstractruntime.h
index ef70120b..1d23fffd 100644
--- a/src/manager-lib/abstractruntime.h
+++ b/src/manager-lib/abstractruntime.h
@@ -101,6 +101,12 @@ private:
QStringList m_iconThemeSearchPaths;
};
+class RuntimeSignaler : public QObject
+{
+ Q_OBJECT
+signals:
+ void aboutToStart(QT_PREPEND_NAMESPACE_AM(AbstractRuntime) *runtime);
+};
class AbstractRuntime : public QObject
{
@@ -139,6 +145,8 @@ public:
virtual bool start() = 0;
virtual void stop(bool forceKill = false) = 0;
+ static RuntimeSignaler* signaler();
+
signals:
void stateChanged(QT_PREPEND_NAMESPACE_AM(Am::RunState) newState);
void finished(int exitCode, Am::ExitStatus status);
diff --git a/src/manager-lib/intentaminterface.cpp b/src/manager-lib/intentaminterface.cpp
index afa3dfaa..66b97546 100644
--- a/src/manager-lib/intentaminterface.cpp
+++ b/src/manager-lib/intentaminterface.cpp
@@ -183,7 +183,7 @@ void IntentServerAMImplementation::initialize(IntentServer *server)
// The IntentServer itself doesn't know about the p2p D-Bus or the AM itself, so we need to
// wire it up to both interfaces from the outside
- connect(&ApplicationManager::instance()->internalSignals, &ApplicationManagerInternalSignals::newRuntimeCreated,
+ connect(AbstractRuntime::signaler(), &RuntimeSignaler::aboutToStart,
intentServer(), [this](AbstractRuntime *runtime) {
#if defined(AM_MULTI_PROCESS)
if (NativeRuntime *nativeRuntime = qobject_cast<NativeRuntime *>(runtime)) {
@@ -519,7 +519,7 @@ QString IntentServerDBusIpcConnection::requestToSystem(const QString &intentId,
sendErrorReply(QDBusError::NotSupported, qL1S("No matching intent handler registered."));
return QString();
} else {
- return irs->requestId().toString();
+ return irs->requestId().toString();
}
}
diff --git a/src/manager-lib/nativeruntime.cpp b/src/manager-lib/nativeruntime.cpp
index 7edb5c49..2e232989 100644
--- a/src/manager-lib/nativeruntime.cpp
+++ b/src/manager-lib/nativeruntime.cpp
@@ -176,6 +176,7 @@ bool NativeRuntime::attachApplicationToQuickLauncher(Application *app)
} else {
QDBusConnection connection(m_dbusConnectionName);
ApplicationIPCManager::instance()->registerInterfaces(this, connection, app);
+ emit applicationReadyOnPeerDBus(connection, app);
ret = startApplicationViaLauncher();
}
@@ -359,6 +360,8 @@ bool NativeRuntime::start()
args << QString::fromLocal8Bit(ProcessTitle::placeholderArgument); // must be last argument
}
+ emit signaler()->aboutToStart(this);
+
m_process = m_container->start(args, env, config);
if (!m_process)
diff --git a/src/manager-lib/qmlinprocessruntime.cpp b/src/manager-lib/qmlinprocessruntime.cpp
index 010e37c6..1138b8cb 100644
--- a/src/manager-lib/qmlinprocessruntime.cpp
+++ b/src/manager-lib/qmlinprocessruntime.cpp
@@ -154,6 +154,8 @@ bool QmlInProcessRuntime::start()
return false;
}
+ emit signaler()->aboutToStart(this);
+
// We are running each application in it's own, separate Qml context.
// This way, we can export an unique ApplicationInterface object for each app
QQmlContext *appContext = new QQmlContext(m_inProcessQmlEngine->rootContext(), this);
diff --git a/tests/qml/intents/am-config-quick.yaml b/tests/qml/intents/am-config-quick.yaml
new file mode 100644
index 00000000..96b3098c
--- /dev/null
+++ b/tests/qml/intents/am-config-quick.yaml
@@ -0,0 +1,6 @@
+formatVersion: 1
+formatType: am-configuration
+---
+quicklaunch:
+ runtimesPerContainer: 1
+ idleLoad: 1.0
diff --git a/tests/qml/intents/intents.pro b/tests/qml/intents/intents.pro
index 797f96e8..a05a7b72 100644
--- a/tests/qml/intents/intents.pro
+++ b/tests/qml/intents/intents.pro
@@ -1,5 +1,12 @@
+load(am-config)
+
AM_CONFIG = am-config.yaml
TEST_FILES = tst_intents.qml
TEST_APPS = intents1 intents2 cannot-start
+TEST_CONFIGURATIONS = "--force-single-process"
+multi-process {
+ TEST_CONFIGURATIONS += "--force-multi-process" \
+ "--force-multi-process -c $$_PRO_FILE_PWD_/am-config-quick.yaml"
+}
load(am-qml-testcase)