Merge pull request #392 from AdenKoperczak/fix_AlertLayer_circular_reference

Fix alert layer circular reference
This commit is contained in:
Dan Paulat 2025-03-12 23:10:06 -05:00 committed by GitHub
commit 9e5890d95e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -157,8 +157,8 @@ public:
const std::shared_ptr<AlertLayerHandler::SegmentRecord>& segmentRecord); const std::shared_ptr<AlertLayerHandler::SegmentRecord>& segmentRecord);
void ConnectAlertHandlerSignals(); void ConnectAlertHandlerSignals();
void ConnectSignals(); void ConnectSignals();
void HandleGeoLinesEvent(std::shared_ptr<gl::draw::GeoLineDrawItem>& di, void HandleGeoLinesEvent(std::weak_ptr<gl::draw::GeoLineDrawItem>& di,
QEvent* ev); QEvent* ev);
void HandleGeoLinesHover(std::shared_ptr<gl::draw::GeoLineDrawItem>& di, void HandleGeoLinesHover(std::shared_ptr<gl::draw::GeoLineDrawItem>& di,
const QPointF& mouseGlobalPos); const QPointF& mouseGlobalPos);
void ScheduleRefresh(); void ScheduleRefresh();
@ -633,11 +633,12 @@ void AlertLayer::Impl::AddLine(std::shared_ptr<gl::draw::GeoLines>& geoLines,
std::placeholders::_1, std::placeholders::_1,
std::placeholders::_2)); std::placeholders::_2));
const std::weak_ptr<gl::draw::GeoLineDrawItem> diWeak = di;
gl::draw::GeoLines::RegisterEventHandler( gl::draw::GeoLines::RegisterEventHandler(
di, di,
std::bind(&AlertLayer::Impl::HandleGeoLinesEvent, std::bind(&AlertLayer::Impl::HandleGeoLinesEvent,
this, this,
di, diWeak,
std::placeholders::_1)); std::placeholders::_1));
} }
} }
@ -691,8 +692,14 @@ void AlertLayer::Impl::UpdateLines()
} }
void AlertLayer::Impl::HandleGeoLinesEvent( void AlertLayer::Impl::HandleGeoLinesEvent(
std::shared_ptr<gl::draw::GeoLineDrawItem>& di, QEvent* ev) std::weak_ptr<gl::draw::GeoLineDrawItem>& diWeak, QEvent* ev)
{ {
const std::shared_ptr<gl::draw::GeoLineDrawItem> di = diWeak.lock();
if (di == nullptr)
{
return;
}
switch (ev->type()) switch (ev->type())
{ {
case QEvent::Type::MouseButtonPress: case QEvent::Type::MouseButtonPress: