diff --git a/src/blackgui/components/dbownmodelscomponent.cpp b/src/blackgui/components/dbownmodelscomponent.cpp index 3d8ff863f..2124a6c96 100644 --- a/src/blackgui/components/dbownmodelscomponent.cpp +++ b/src/blackgui/components/dbownmodelscomponent.cpp @@ -216,6 +216,7 @@ namespace BlackGui if (m_modelLoader) { m_modelLoader->gracefulShutdown(); + m_loaderConnections.disconnectAll(); } // create loader, also synchronizes the caches @@ -224,14 +225,14 @@ namespace BlackGui { CLogMessage(this).error("Failed to init model loader %1") << simulator.toQString(); m_modelLoader.reset(); + m_loaderConnections.disconnectAll(); return false; } else { - const bool c = connect(m_modelLoader.get(), &IAircraftModelLoader::loadingFinished, - this, &CDbOwnModelsComponent::onOwnModelsLoadingFinished, Qt::QueuedConnection); - Q_ASSERT_X(c, Q_FUNC_INFO, "Failed connect for model loader"); - Q_UNUSED(c); + const QMetaObject::Connection connection = connect(m_modelLoader.get(), &IAircraftModelLoader::loadingFinished, this, &CDbOwnModelsComponent::onOwnModelsLoadingFinished, Qt::QueuedConnection); + Q_ASSERT_X(connection, Q_FUNC_INFO, "Failed connect for model loader"); + m_loaderConnections.append(connection); this->setSaveFileName(simulator); return true; } diff --git a/src/blackgui/components/dbownmodelscomponent.h b/src/blackgui/components/dbownmodelscomponent.h index bd91d6bd3..f13c3a33d 100644 --- a/src/blackgui/components/dbownmodelscomponent.h +++ b/src/blackgui/components/dbownmodelscomponent.h @@ -22,6 +22,7 @@ #include "blackmisc/simulation/data/modelcaches.h" #include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/statusmessage.h" +#include "blackmisc/connectionguard.h" #include #include @@ -127,6 +128,7 @@ namespace BlackGui private: QScopedPointer ui; std::unique_ptr m_modelLoader; //!< read own aircraft models, aka models on disk + BlackMisc::CConnectionGuard m_loaderConnections; BlackMisc::CDataReadOnly m_simulatorSelection { this }; //!< last selection BlackMisc::Simulation::CSimulatorInfo m_simulator; //!< currently init to simulator diff --git a/src/blackgui/components/dbownmodelsetcomponent.cpp b/src/blackgui/components/dbownmodelsetcomponent.cpp index c1058589f..697839bb5 100644 --- a/src/blackgui/components/dbownmodelsetcomponent.cpp +++ b/src/blackgui/components/dbownmodelsetcomponent.cpp @@ -370,6 +370,8 @@ namespace BlackGui void CDbOwnModelSetComponent::changeSimulator(const CSimulatorInfo &simulator) { + if (m_simulator == simulator) { return; } // avoid unnecessary signals + m_simulator = simulator; m_modelSetLoader.setSimulator(simulator); ui->tvp_OwnModelSet->setSimulatorForLoading(simulator); ui->le_Simulator->setText(simulator.toQString(true)); @@ -388,8 +390,6 @@ namespace BlackGui void CDbOwnModelSetComponent::setSimulator(const CSimulatorInfo &simulator) { Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Need single simulator"); - const CSimulatorInfo currentSimulator = m_modelSetLoader.getSimulator(); - if (currentSimulator == simulator) { return; } // avoid unnecessary signals this->changeSimulator(simulator); } diff --git a/src/blackgui/components/dbownmodelsetcomponent.h b/src/blackgui/components/dbownmodelsetcomponent.h index 1ff39e20e..24e308b5e 100644 --- a/src/blackgui/components/dbownmodelsetcomponent.h +++ b/src/blackgui/components/dbownmodelsetcomponent.h @@ -166,6 +166,7 @@ namespace BlackGui QScopedPointer m_modelSetFormDialog; QScopedPointer m_firstModelSet; QScopedPointer m_copyFromAnotherSwift; + BlackMisc::Simulation::CSimulatorInfo m_simulator; //!< currently set simulator BlackMisc::Simulation::CAircraftModelSetLoader m_modelSetLoader { this }; BlackMisc::CSettingReadOnly m_distributorPreferences { this, &CDbOwnModelSetComponent::distributorPreferencesChanged }; //!< distributor preferences BlackMisc::CSettingReadOnly m_modelSettings { this }; //!< settings for models