summaryrefslogtreecommitdiff
path: root/src/manager-lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/manager-lib')
-rw-r--r--src/manager-lib/applicationmanager.cpp43
-rw-r--r--src/manager-lib/applicationmanager.h16
2 files changed, 37 insertions, 22 deletions
diff --git a/src/manager-lib/applicationmanager.cpp b/src/manager-lib/applicationmanager.cpp
index 71b1ce4b..91c01f62 100644
--- a/src/manager-lib/applicationmanager.cpp
+++ b/src/manager-lib/applicationmanager.cpp
@@ -250,6 +250,15 @@
This signal is emitted when the \a runState of the application identified by \a id changed.
The \a runState can be one of:
+ \list
+ \li ApplicationManager.NotRunning - the application has not been started yet
+ \li ApplicationManager.StartingUp - the application has been started and is initializing
+ \li ApplicationManager.Running - the application is running
+ \li ApplicationManager.ShuttingDown - the application has been stopped and is cleaning up (in
+ multi-process mode this signal is only emitted if the
+ application terminates gracefully)
+ \endlist
+
For example this signal can be used to restart an application in multi-process mode when
it has crashed:
@@ -264,8 +273,6 @@
}
}
\endqml
-
- See also Application::runState
*/
/*!
@@ -333,13 +340,13 @@ enum Roles
QT_BEGIN_NAMESPACE_AM
-static Application::RunState runtimeToApplicationRunState(AbstractRuntime::State rtState)
+static ApplicationManager::RunState runtimeToManagerState(AbstractRuntime::State rtState)
{
switch (rtState) {
- case AbstractRuntime::Startup: return Application::StartingUp;
- case AbstractRuntime::Active: return Application::Running;
- case AbstractRuntime::Shutdown: return Application::ShuttingDown;
- default: return Application::NotRunning;
+ case AbstractRuntime::Startup: return ApplicationManager::StartingUp;
+ case AbstractRuntime::Active: return ApplicationManager::Running;
+ case AbstractRuntime::Shutdown: return ApplicationManager::ShuttingDown;
+ default: return ApplicationManager::NotRunning;
}
}
@@ -414,7 +421,6 @@ ApplicationManager *ApplicationManager::createInstance(ApplicationDatabase *adb,
qmlRegisterUncreatableType<AbstractContainer>("QtApplicationManager", 1, 0, "Container",
qSL("Cannot create objects of type Container"));
qRegisterMetaType<AbstractContainer*>("AbstractContainer*");
- qRegisterMetaType<Application::RunState>("Application::RunState");
return s_instance = am.take();
}
@@ -774,7 +780,7 @@ bool ApplicationManager::startApplication(const Application *app, const QString
return false;
}
- connect(runtime, &AbstractRuntime::stateChanged, this, [this, app](AbstractRuntime::State newRuntimeState) {
+ connect(runtime, &AbstractRuntime::stateChanged, this, [this, app](AbstractRuntime::State newState) {
QVector<const Application *> apps;
//Always emit the actual starting app/alias first
apps.append(app);
@@ -792,12 +798,8 @@ bool ApplicationManager::startApplication(const Application *app, const QString
apps.append(alias);
}
- Application::RunState newRunState = runtimeToApplicationRunState(newRuntimeState);
-
- nonAliasedApp->setRunState(newRunState);
-
for (const Application *app : qAsConst(apps)) {
- emit applicationRunStateChanged(app->id(), newRunState);
+ emit applicationRunStateChanged(app->id(), runtimeToManagerState(newState));
emitDataChanged(app, QVector<int> { IsRunning, IsStartingUp, IsShuttingDown });
}
});
@@ -1339,8 +1341,8 @@ void ApplicationManager::preload()
else
QMetaObject::invokeMethod(qApp, "shutDown", Qt::DirectConnection, Q_ARG(int, 1));
} else if (singleAppMode) {
- connect(this, &ApplicationManager::applicationRunStateChanged, [app](const QString &id, Application::RunState runState) {
- if ((id == app->id()) && (runState == Application::NotRunning)) {
+ connect(this, &ApplicationManager::applicationRunStateChanged, [app](const QString &id, ApplicationManager::RunState runState) {
+ if ((id == app->id()) && (runState == NotRunning)) {
QMetaObject::invokeMethod(qApp, "shutDown", Qt::DirectConnection,
Q_ARG(int, app->lastExitCode()));
}
@@ -1615,14 +1617,17 @@ QVariantMap ApplicationManager::get(const QString &id) const
return map;
}
-Application::RunState ApplicationManager::applicationRunState(const QString &id) const
+ApplicationManager::RunState ApplicationManager::applicationRunState(const QString &id) const
{
int index = indexOfApplication(id);
if (index < 0) {
qCWarning(LogSystem) << "invalid index:" << index;
- return Application::NotRunning;
+ return NotRunning;
}
- return d->apps.at(index)->runState();
+ const Application *app = d->apps.at(index);
+ if (!app->currentRuntime())
+ return NotRunning;
+ return runtimeToManagerState(app->currentRuntime()->state());
}
QT_END_NAMESPACE_AM
diff --git a/src/manager-lib/applicationmanager.h b/src/manager-lib/applicationmanager.h
index e4e76aac..ffb7125d 100644
--- a/src/manager-lib/applicationmanager.h
+++ b/src/manager-lib/applicationmanager.h
@@ -47,7 +47,6 @@
#include <QProcess>
#include <QJSValue>
#include <QtAppManCommon/global.h>
-#include <QtAppManApplication/application.h>
QT_FORWARD_DECLARE_CLASS(QDir)
QT_FORWARD_DECLARE_CLASS(QQmlEngine)
@@ -55,6 +54,7 @@ QT_FORWARD_DECLARE_CLASS(QJSEngine)
QT_BEGIN_NAMESPACE_AM
+class Application;
class ApplicationDatabase;
class ApplicationManagerPrivate;
class AbstractRuntime;
@@ -76,6 +76,14 @@ class ApplicationManager : public QAbstractListModel
Q_PROPERTY(QJSValue containerSelectionFunction READ containerSelectionFunction WRITE setContainerSelectionFunction NOTIFY containerSelectionFunctionChanged)
public:
+ enum RunState {
+ NotRunning,
+ StartingUp,
+ Running,
+ ShuttingDown,
+ };
+ Q_ENUM(RunState)
+
~ApplicationManager();
static ApplicationManager *createInstance(ApplicationDatabase *adb, bool singleProcess, QString *error);
static ApplicationManager *instance();
@@ -134,13 +142,13 @@ public:
Q_SCRIPTABLE bool openUrl(const QString &url);
Q_SCRIPTABLE QStringList capabilities(const QString &id) const;
Q_SCRIPTABLE QString identifyApplication(qint64 pid) const;
- Q_SCRIPTABLE QT_PREPEND_NAMESPACE_AM(Application::RunState) applicationRunState(const QString &id) const;
+ Q_SCRIPTABLE RunState applicationRunState(const QString &id) const;
public slots:
void shutDown();
signals:
- Q_SCRIPTABLE void applicationRunStateChanged(const QString &id, QT_PREPEND_NAMESPACE_AM(Application::RunState) runState);
+ Q_SCRIPTABLE void applicationRunStateChanged(const QString &id, QT_PREPEND_NAMESPACE_AM(ApplicationManager::RunState) runState);
Q_SCRIPTABLE void applicationWasActivated(const QString &id, const QString &aliasId);
Q_SCRIPTABLE void countChanged();
@@ -193,3 +201,5 @@ private:
};
QT_END_NAMESPACE_AM
+
+Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE_AM(ApplicationManager::RunState))