diff options
author | Bernd Weimer <bernd.weimer@pelagicore.com> | 2020-08-03 15:04:57 +0200 |
---|---|---|
committer | Bernd Weimer <bernd.weimer@pelagicore.com> | 2020-08-11 13:46:06 +0200 |
commit | d4277ed9597a2277f6a32f3f8480d746cd020a82 (patch) | |
tree | 0eb8564f6b4ceb537267066866b7d9f305cbc8e5 | |
parent | c74ca43fa25801bf063755fa27a8fc53c23ac1a5 (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.cpp | 6 | ||||
-rw-r--r-- | src/manager-lib/abstractruntime.h | 8 | ||||
-rw-r--r-- | src/manager-lib/intentaminterface.cpp | 4 | ||||
-rw-r--r-- | src/manager-lib/nativeruntime.cpp | 3 | ||||
-rw-r--r-- | src/manager-lib/qmlinprocessruntime.cpp | 2 | ||||
-rw-r--r-- | tests/qml/intents/am-config-quick.yaml | 6 | ||||
-rw-r--r-- | tests/qml/intents/intents.pro | 7 |
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) |