From 6cc797ca3a4952967fed4681ec56c8c8d2cafc82 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Mon, 8 Jan 2024 22:13:21 -0600 Subject: [PATCH] Change connection type for MouseCoordinateChanged slot to queued to avoid recursive paint --- scwx-qt/source/scwx/qt/main/main_window.cpp | 28 +++++++++++---------- scwx-qt/source/scwx/qt/map/map_widget.hpp | 10 ++++++++ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index c8614b8f..718c3ac3 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -745,20 +745,22 @@ void MainWindowImpl::ConnectMapSignals() } }); - connect(mapWidget, - &map::MapWidget::MouseCoordinateChanged, - this, - [this](common::Coordinate coordinate) - { - const QString latitude = QString::fromStdString( - common::GetLatitudeString(coordinate.latitude_)); - const QString longitude = QString::fromStdString( - common::GetLongitudeString(coordinate.longitude_)); + connect( + mapWidget, + &map::MapWidget::MouseCoordinateChanged, + this, + [this](common::Coordinate coordinate) + { + const QString latitude = QString::fromStdString( + common::GetLatitudeString(coordinate.latitude_)); + const QString longitude = QString::fromStdString( + common::GetLongitudeString(coordinate.longitude_)); - coordinateLabel_->setText( - QString("%1, %2").arg(latitude).arg(longitude)); - coordinateLabel_->setVisible(true); - }); + coordinateLabel_->setText( + QString("%1, %2").arg(latitude).arg(longitude)); + coordinateLabel_->setVisible(true); + }, + Qt::QueuedConnection); connect( mapWidget, diff --git a/scwx-qt/source/scwx/qt/map/map_widget.hpp b/scwx-qt/source/scwx/qt/map/map_widget.hpp index 7ab02bf1..bb9f4e42 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.hpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.hpp @@ -148,7 +148,17 @@ signals: double bearing, double pitch); void MapStyleChanged(const std::string& styleName); + + /** + * This signal is emitted when the mouse moves to a different geographic + * coordinate within the map widget. This signal is emitted during paintGL(), + * and must be connected using a connection type of queued if the slot + * triggers a repaint. + * + * @param [in] coordinate Geographic coordinate of the mouse + */ void MouseCoordinateChanged(common::Coordinate coordinate); + void RadarSiteRequested(const std::string& id); void RadarSiteUpdated(std::shared_ptr radarSite); void RadarSweepUpdated();