summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/application-lib/application.cpp47
-rw-r--r--src/application-lib/application.h16
-rw-r--r--src/application-lib/yamlapplicationscanner.cpp2
-rw-r--r--src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp2
-rw-r--r--src/manager-lib/applicationmanager.cpp43
-rw-r--r--src/manager-lib/applicationmanager.h16
-rw-r--r--src/monitor-lib/processmonitor_p.cpp4
-rw-r--r--src/monitor-lib/processmonitor_p.h2
8 files changed, 43 insertions, 89 deletions
diff --git a/src/application-lib/application.cpp b/src/application-lib/application.cpp
index 08e1bb15..4bb5522e 100644
--- a/src/application-lib/application.cpp
+++ b/src/application-lib/application.cpp
@@ -244,21 +244,6 @@
\endlist
*/
/*!
- \qmlproperty enumeration Application::runState
- \readonly
-
- This property holds the current run state of the application. It can be one of:
-
- \list
- \li Application.NotRunning - the application has not been started yet
- \li Application.StartingUp - the application has been started and is initializing
- \li Application.Running - the application is running
- \li Application.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
-*/
-/*!
\qmlsignal Application::activated()
This signal is emitted when the application is started or when it's already running but has
@@ -654,9 +639,6 @@ void Application::setCurrentRuntime(AbstractRuntime *rt) const
else
m_runtime = rt;
emit runtimeChanged();
-
- if (!rt)
- setRunState(Application::NotRunning);
}
bool Application::isBlocked() const
@@ -679,38 +661,11 @@ Application::State Application::state() const
return m_nonAliased ? m_nonAliased->m_state : m_state;
}
-Application::RunState Application::runState() const
-{
- return m_nonAliased ? m_nonAliased->m_runState : m_runState;
-}
-
-void Application::setRunState(Application::RunState runState) const
-{
- if (m_nonAliased)
- m_nonAliased->setRunState(runState);
- else
- if (runState != m_runState) {
- m_runState = runState;
- emit runStateChanged(m_runState);
- }
-}
-
qreal Application::progress() const
{
return m_nonAliased ? m_nonAliased->m_progress : m_progress;
}
-void Application::setNonAliased(const Application *otherApp)
-{
- if (m_nonAliased)
- disconnect(m_nonAliased, 0, this, 0);
-
- m_nonAliased = otherApp;
-
- if (m_nonAliased)
- connect(m_nonAliased, &Application::runStateChanged, this, &Application::runStateChanged);
-}
-
Application *Application::readFromDataStream(QDataStream &ds, const QVector<const Application *> &applicationDatabase) Q_DECL_NOEXCEPT_EXPR(false)
{
QScopedPointer<Application> app(new Application);
@@ -769,7 +724,7 @@ Application *Application::readFromDataStream(QDataStream &ds, const QVector<cons
bool found = false;
for (const Application *otherApp : applicationDatabase) {
if (otherApp->id() == baseId) {
- app->setNonAliased(otherApp);
+ app->m_nonAliased = otherApp;
found = true;
break;
}
diff --git a/src/application-lib/application.h b/src/application-lib/application.h
index 34839484..1bd6fed8 100644
--- a/src/application-lib/application.h
+++ b/src/application-lib/application.h
@@ -86,20 +86,11 @@ class Application : public QObject
Q_PROPERTY(bool supportsApplicationInterface READ supportsApplicationInterface NOTIFY bulkChange)
Q_PROPERTY(QString codeDir READ codeDir NOTIFY bulkChange)
Q_PROPERTY(State state READ state NOTIFY stateChanged)
- Q_PROPERTY(RunState runState READ runState NOTIFY runStateChanged)
public:
enum ExitStatus { NormalExit, CrashExit, ForcedExit };
Q_ENUM(ExitStatus)
- enum RunState {
- NotRunning,
- StartingUp,
- Running,
- ShuttingDown,
- };
- Q_ENUM(RunState)
-
QString id() const;
int uniqueNumber() const;
QString absoluteCodeFilePath() const;
@@ -170,8 +161,6 @@ public:
Q_ENUM(State)
qreal progress() const;
- RunState runState() const;
-
void setSupportsApplicationInterface(bool supportsAppInterface);
void setCodeDir(const QString &path);
void setManifestDir(const QString &path);
@@ -189,12 +178,9 @@ signals:
void lastExitStatusChanged() const;
void activated() const;
void stateChanged(State state) const;
- void runStateChanged(RunState state) const;
private:
Application();
- void setRunState(Application::RunState) const;
- void setNonAliased(const Application *);
// static part from info.json
QString m_id;
@@ -238,7 +224,6 @@ private:
mutable QAtomicInt m_mounted;
mutable State m_state = Installed;
- mutable RunState m_runState = NotRunning;
mutable qreal m_progress = 0;
mutable int m_lastExitCode = 0;
@@ -258,6 +243,5 @@ private:
QT_END_NAMESPACE_AM
Q_DECLARE_METATYPE(const QT_PREPEND_NAMESPACE_AM(Application *))
-Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE_AM(Application::RunState))
QDebug operator<<(QDebug debug, const QT_PREPEND_NAMESPACE_AM(Application) *app);
diff --git a/src/application-lib/yamlapplicationscanner.cpp b/src/application-lib/yamlapplicationscanner.cpp
index 80d4b919..139b58f8 100644
--- a/src/application-lib/yamlapplicationscanner.cpp
+++ b/src/application-lib/yamlapplicationscanner.cpp
@@ -128,7 +128,7 @@ Application *YamlApplicationScanner::scanInternal(const QString &filePath, bool
throw Exception(Error::Parse, "aliasId '%1' does not match base application id '%2'")
.arg(app->m_id, application->id());
}
- app->setNonAliased(application);
+ app->m_nonAliased = application;
}
} else if (field == "icon") {
app->m_icon = v.toString();
diff --git a/src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp b/src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp
index 98c257d9..2b7c58fe 100644
--- a/src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp
+++ b/src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp
@@ -85,7 +85,7 @@ ApplicationManagerAdaptor::ApplicationManagerAdaptor(QObject *parent)
// connect this signal via a lambda, since it needs a type conversion
connect(am, &ApplicationManager::applicationRunStateChanged,
- this, [this](const QString &id, Application::RunState runState) {
+ this, [this](const QString &id, ApplicationManager::RunState runState) {
emit applicationRunStateChanged(id, runState);
});
}
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))
diff --git a/src/monitor-lib/processmonitor_p.cpp b/src/monitor-lib/processmonitor_p.cpp
index 0535da54..3ce11809 100644
--- a/src/monitor-lib/processmonitor_p.cpp
+++ b/src/monitor-lib/processmonitor_p.cpp
@@ -425,9 +425,9 @@ ProcessMonitorPrivate::~ProcessMonitorPrivate()
thread.wait();
}
-void ProcessMonitorPrivate::appRuntimeChanged(const QString &id, Application::RunState state)
+void ProcessMonitorPrivate::appRuntimeChanged(const QString &id, ApplicationManager::RunState state)
{
- if (id == appId && (state == Application::Running || state == Application::NotRunning))
+ if (id == appId && (state == ApplicationManager::Running || state == ApplicationManager::NotRunning))
determinePid();
}
diff --git a/src/monitor-lib/processmonitor_p.h b/src/monitor-lib/processmonitor_p.h
index f2d012c8..3d7fb9a7 100644
--- a/src/monitor-lib/processmonitor_p.h
+++ b/src/monitor-lib/processmonitor_p.h
@@ -224,7 +224,7 @@ signals:
public slots:
void readingUpdate();
- void appRuntimeChanged(const QString &id, Application::RunState state);
+ void appRuntimeChanged(const QString &id, ApplicationManager::RunState state);
#if defined(AM_MULTI_PROCESS) && !defined(AM_HEADLESS)
void applicationWindowClosing(int index, QQuickItem *window);
#endif