Fix AlertLayer circular reference

This commit is contained in:
AdenKoperczak 2025-03-12 13:00:56 -04:00
parent 5e368aaced
commit a8568d24f6

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));
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)
{ {
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: