@@ -60,9 +60,8 @@ MirSurface::MirSurface(const QString& name,
6060 Mir::Type type,
6161 Mir::State state,
6262 const QUrl& screenshot,
63− const QUrl &qmlFilePath,
64− QObject *parent)
65− : unity::shell::application::MirSurfaceInterface(parent)
63+ const QUrl &qmlFilePath)
64+ : unity::shell::application::MirSurfaceInterface(nullptr)
6665 , m_name(name)
6766 , m_type(type)
6867 , m_state(state)
@@ -95,7 +94,7 @@ MirSurface::~MirSurface()
9594 DEBUG_MSG("");
9695
9796 auto controller = MirFocusController::instance();
98− if (controller->focusedSurface() == this) {
97+ if (controller && controller->focusedSurface() == this) {
9998 controller->clear();
10099 }
101100}
@@ -436,7 +435,12 @@ void MirSurface::requestFocus()
436435void MirSurface::setFocused(bool value)
437436{
438437 DEBUG_MSG(value);
438+
439439 auto controller = MirFocusController::instance();
440+ if (!controller) {
441+ return;
442+ }
443+
440444 if (value) {
441445 controller->setFocusedSurface(this);
442446 } else if (controller->focusedSurface() == this) {
@@ -446,7 +450,9 @@ void MirSurface::setFocused(bool value)
446450
447451bool MirSurface::focused() const
448452{
449− return MirFocusController::instance()->focusedSurface() == this;
453+ auto controller = MirFocusController::instance();
454+
455+ return controller ? controller->focusedSurface() == this : false;
450456}
451457
452458#if MIRSURFACE_DEBUG
@@ -479,12 +485,21 @@ void MirFocusController::setFocusedSurface(MirSurfaceInterface *surface)
479485
480486MirFocusController* MirFocusController::instance()
481487{
482− if (!m_instance) {
483− m_instance = new MirFocusController;
484− }
485488 return m_instance;
486489}
487490
491+MirFocusController::MirFocusController()
492+{
493+ Q_ASSERT(m_instance == nullptr);
494+ m_instance = this;
495+}
496+
497+MirFocusController::~MirFocusController()
498+{
499+ Q_ASSERT(m_instance == this);
500+ m_instance = nullptr;
501+}
502+
488503void MirFocusController::clear()
489504{
490505 m_focusedSurface = m_previouslyFocusedSurface = nullptr;