From 8223ddb71047ef9c3802134617701e1f9b618448 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 28 Mar 2019 18:57:12 +0100 Subject: [PATCH] Checks to avoid crash during shutdown --- src/blackgui/components/logincomponent.cpp | 1 + src/blackgui/infoarea.cpp | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/blackgui/components/logincomponent.cpp b/src/blackgui/components/logincomponent.cpp index 4ab729819..80899f5a3 100644 --- a/src/blackgui/components/logincomponent.cpp +++ b/src/blackgui/components/logincomponent.cpp @@ -671,6 +671,7 @@ namespace BlackGui void CLoginComponent::lookupOwnAircraftModel() { + if (!this->hasValidContexts()) { return; } if (!sGui->getIContextSimulator()->isSimulatorAvailable()) { return; } const CAircraftModel model(sGui->getIContextOwnAircraft()->getOwnAircraft().getModel()); this->onSimulatorModelChanged(model); diff --git a/src/blackgui/infoarea.cpp b/src/blackgui/infoarea.cpp index 8a8279141..70cd22b1b 100644 --- a/src/blackgui/infoarea.cpp +++ b/src/blackgui/infoarea.cpp @@ -541,7 +541,7 @@ namespace BlackGui } } - emit changedWholeInfoAreaFloating(floating); + emit this->changedWholeInfoAreaFloating(floating); } void CInfoArea::tabifyAllWidgets() @@ -601,9 +601,9 @@ namespace BlackGui // South does not have any effect m_tabBar->setShape(QTabBar::TriangularSouth); - // signals - connect(m_tabBar, &QTabBar::tabBarDoubleClicked, this, &CInfoArea::onTabBarDoubleClicked); - connect(m_tabBar, &QTabBar::currentChanged, this, &CInfoArea::onTabBarIndexChanged); + // signals, use Qt::QueuedConnection to avoid issues during shutdown + connect(m_tabBar, &QTabBar::tabBarDoubleClicked, this, &CInfoArea::onTabBarDoubleClicked, Qt::QueuedConnection); + connect(m_tabBar, &QTabBar::currentChanged, this, &CInfoArea::onTabBarIndexChanged, Qt::QueuedConnection); } else { @@ -657,15 +657,16 @@ namespace BlackGui void CInfoArea::emitInfoAreaStatus() { + if (!sGui || sGui->isShuttingDown()) { return; } // avoid access to deleted components const int sia = this->getSelectedDockInfoAreaIndex(); const QList floating = this->getAreaIndexesDockedOrFloating(true); const QList docked = this->getAreaIndexesDockedOrFloating(false); - emit changedInfoAreaStatus(sia, docked, floating); + emit this->changedInfoAreaStatus(sia, docked, floating); } void CInfoArea::onTabBarIndexChanged(int tabBarIndex) { - emit changedInfoAreaTabBarIndex(tabBarIndex); + emit this->changedInfoAreaTabBarIndex(tabBarIndex); emitInfoAreaStatus(); } @@ -804,6 +805,7 @@ namespace BlackGui { if (m_tabBar) { + if (!sGui || sGui->isShuttingDown()) { return; } const QString qss = sGui->getStyleSheetUtility().style(CStyleSheetUtility::fileNameDockWidgetTab()); m_tabBar->setStyleSheet(qss); }