From 2efdd1b046975b970486708e0c7e0f83e7219b59 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Thu, 16 May 2024 23:04:53 -0500 Subject: [PATCH] Only create a new position source once when multiple settings change --- .../scwx/qt/manager/position_manager.cpp | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/scwx-qt/source/scwx/qt/manager/position_manager.cpp b/scwx-qt/source/scwx/qt/manager/position_manager.cpp index f806bfe2..cebf9924 100644 --- a/scwx-qt/source/scwx/qt/manager/position_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/position_manager.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -36,13 +37,27 @@ public: positioningPluginCallbackUuid_ = generalSettings.positioning_plugin().RegisterValueChangedCallback( - [this](const std::string&) { CreatePositionSource(); }); + [this](const std::string&) + { createPositionSourcePending_ = true; }); nmeaBaudRateCallbackUuid_ = generalSettings.nmea_baud_rate().RegisterValueChangedCallback( - [this](const std::int64_t&) { CreatePositionSource(); }); + [this](const std::int64_t&) + { createPositionSourcePending_ = true; }); nmeaSourceCallbackUuid_ = generalSettings.nmea_source().RegisterValueChangedCallback( - [this](const std::string&) { CreatePositionSource(); }); + [this](const std::string&) + { createPositionSourcePending_ = true; }); + + connect(&SettingsManager::Instance(), + &SettingsManager::SettingsSaved, + self_, + [this]() + { + if (createPositionSourcePending_) + { + CreatePositionSource(); + } + }); } ~Impl() { @@ -78,6 +93,8 @@ public: boost::uuids::uuid positioningPluginCallbackUuid_ {}; boost::uuids::uuid nmeaBaudRateCallbackUuid_ {}; boost::uuids::uuid nmeaSourceCallbackUuid_ {}; + + bool createPositionSourcePending_ {false}; }; PositionManager::PositionManager() : p(std::make_unique(this)) {} @@ -97,6 +114,8 @@ void PositionManager::Impl::CreatePositionSource() { auto& generalSettings = settings::GeneralSettings::Instance(); + createPositionSourcePending_ = false; + types::PositioningPlugin positioningPlugin = types::GetPositioningPlugin( generalSettings.positioning_plugin().GetValue()); std::int64_t nmeaBaudRate = generalSettings.nmea_baud_rate().GetValue();