summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGerry Boland <gerry.boland@canonical.com>2015-05-18 12:28:22 -0500
committerGerry Boland <gerry.boland@canonical.com>2015-05-18 12:28:22 -0500
commit12f0061f828610e827a4f0549535517483c13e3f (patch)
tree8446e3c0d9b1fc46e967ea60c3ca6045ee3917a7 /src
parentf45557ea565a9501d399914360bb478d7b778f02 (diff)
Trying to fix shutdown, incomplete
Diffstat (limited to 'src')
-rw-r--r--src/platforms/mirserver/mirserverintegration.cpp6
-rw-r--r--src/platforms/mirserver/qmirserver.cpp11
-rw-r--r--src/platforms/mirserver/qmirserver.h6
-rw-r--r--src/platforms/mirserver/qmirserver_p.cpp5
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();
}