diff options
author | Gerry Boland <gerry.boland@canonical.com> | 2015-05-18 12:28:22 -0500 |
---|---|---|
committer | Gerry Boland <gerry.boland@canonical.com> | 2015-05-18 12:28:22 -0500 |
commit | 12f0061f828610e827a4f0549535517483c13e3f (patch) | |
tree | 8446e3c0d9b1fc46e967ea60c3ca6045ee3917a7 /src | |
parent | f45557ea565a9501d399914360bb478d7b778f02 (diff) |
Trying to fix shutdown, incomplete
Diffstat (limited to 'src')
-rw-r--r-- | src/platforms/mirserver/mirserverintegration.cpp | 6 | ||||
-rw-r--r-- | src/platforms/mirserver/qmirserver.cpp | 11 | ||||
-rw-r--r-- | src/platforms/mirserver/qmirserver.h | 6 | ||||
-rw-r--r-- | src/platforms/mirserver/qmirserver_p.cpp | 5 |
4 files changed, 19 insertions, 9 deletions
diff --git a/src/platforms/mirserver/mirserverintegration.cpp b/src/platforms/mirserver/mirserverintegration.cpp index 586e0c6..3c9a7a8 100644 --- a/src/platforms/mirserver/mirserverintegration.cpp +++ b/src/platforms/mirserver/mirserverintegration.cpp @@ -77,6 +77,10 @@ MirServerIntegration::MirServerIntegration() } } + // If Mir shuts down, quit. + QObject::connect(m_mirServer.data(), &QMirServer::stopped, + QCoreApplication::instance(), &QCoreApplication::quit); + #if QT_VERSION < QT_VERSION_CHECK(5, 2, 0) QGuiApplicationPrivate::instance()->setEventDispatcher(eventDispatcher_); initialize(); @@ -152,7 +156,7 @@ QAbstractEventDispatcher *MirServerIntegration::createEventDispatcher() const void MirServerIntegration::initialize() { // Creates instance of and start the Mir server in a separate thread - m_mirServer->run(); + m_mirServer->start(); m_display = new Display(m_mirServer->mirServer()); m_nativeInterface = new NativeInterface(m_mirServer->mirServer()); diff --git a/src/platforms/mirserver/qmirserver.cpp b/src/platforms/mirserver/qmirserver.cpp index ba97af0..acf3bb9 100644 --- a/src/platforms/mirserver/qmirserver.cpp +++ b/src/platforms/mirserver/qmirserver.cpp @@ -46,8 +46,8 @@ QMirServer::QMirServer(const QStringList &arguments, QObject *parent) d->serverWorker = new MirServerWorker(d->server); d->serverWorker->moveToThread(&d->serverThread); - connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, - d->serverWorker, &MirServerWorker::stop, Qt::DirectConnection); // see FIXME in MirServerWorker +/* connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, + d->serverWorker, &MirServerWorker::stop, Qt::DirectConnection);*/ // see FIXME in MirServerWorker connect(d->serverWorker, &MirServerWorker::stopped, this, &QMirServer::serverStopped, Qt::DirectConnection); } @@ -56,7 +56,7 @@ QMirServer::~QMirServer() stop(); } -bool QMirServer::run() +bool QMirServer::start() { Q_D(QMirServer); @@ -66,10 +66,10 @@ bool QMirServer::run() if (!d->serverWorker->waitForMirStartup()) { qCritical() << "ERROR: QMirServer - Mir failed to start"; - QCoreApplication::quit(); return false; } + Q_EMIT started(); return true; } @@ -78,7 +78,8 @@ bool QMirServer::stop() Q_D(QMirServer); if (d->serverThread.isRunning()) { - QMetaObject::invokeMethod(d->serverWorker, "stop"); + d->serverWorker->stop(); + //QMetaObject::invokeMethod(d->serverWorker, "stop"); if (!d->serverThread.wait(10000)) { // do something to indicate fail during shutdown qCritical() << "ERROR: QMirServer - Mir failed to shut down correctly, terminating it"; diff --git a/src/platforms/mirserver/qmirserver.h b/src/platforms/mirserver/qmirserver.h index bbbd031..e3f5f22 100644 --- a/src/platforms/mirserver/qmirserver.h +++ b/src/platforms/mirserver/qmirserver.h @@ -32,12 +32,16 @@ public: QMirServer(const QStringList &arguments, QObject* parent=0); virtual ~QMirServer(); - bool run(); + bool start(); Q_SLOT bool stop(); bool isRunning() const; QWeakPointer<MirServer> mirServer() const; +Q_SIGNALS: + void started(); + void stopped(); + protected: QMirServerPrivate * const d_ptr; diff --git a/src/platforms/mirserver/qmirserver_p.cpp b/src/platforms/mirserver/qmirserver_p.cpp index 3e1b3df..29f24cc 100644 --- a/src/platforms/mirserver/qmirserver_p.cpp +++ b/src/platforms/mirserver/qmirserver_p.cpp @@ -19,7 +19,7 @@ // local #include "qmirserver_p.h" - +#include <QDebug> /* FIXME: QThread by default starts an event loop, which is required for correct signal/slot * messaging between threads. However below you'll see that the mir server run() method @@ -43,11 +43,12 @@ void MirServerWorker::run() }); server->run(); // blocks until Mir server stopped + qDebug() << "stopped"; Q_EMIT stopped(); } void MirServerWorker::stop() -{ +{qDebug() << "stop"; server->stop(); } |