Skip to content

Commit

Permalink
Avoid recursion in crs validation
Browse files Browse the repository at this point in the history
If some proj helper files are missing (likely proj.db), showing the
projection selection dialog is shown recursively. Avoid this.

Excerpt from a sample trace:

```
QgsMapLayer::setCrs :
QgsVectorLayer::setCoordinateSystem :
QgsVectorLayer::setDataSource :
QgsVectorLayer::QgsVectorLayer :
QgsCoordinateBoundsPreviewMapWidget::QgsCoordinateBoundsPreviewMapWidget :
QgsProjectionSelectionTreeWidget::setShowNoProjection :
QgsProjectionSelectionTreeWidget::QgsProjectionSelectionTreeWidget :
QgsProjectionSelectionDialog::setShowNoProjection :
QgsProjectionSelectionDialog::QgsProjectionSelectionDialog :
QgisApp::validateCrs :
QObject::qt_static_metacall :
QgisApp::customCrsValidation :
QgisApp::customProjection :
QgsMapLayer::setCrs :
QgsVectorLayer::setCoordinateSystem :
QgsVectorLayer::setDataSource :
QgsVectorLayer::QgsVectorLayer :
QgsCoordinateBoundsPreviewMapWidget::QgsCoordinateBoundsPreviewMapWidget :
QgsProjectionSelectionTreeWidget::setShowNoProjection :
QgsProjectionSelectionTreeWidget::QgsProjectionSelectionTreeWidget :
QgsProjectionSelectionDialog::setShowNoProjection :
QgsProjectionSelectionDialog::QgsProjectionSelectionDialog :
QgisApp::validateCrs :
QObject::qt_static_metacall :
QgisApp::customCrsValidation :
QgisApp::customProjection :
QgsMapLayer::setCrs :
QgsVectorLayer::setCoordinateSystem :
QgsVectorLayer::setDataSource :
QgsVectorLayer::QgsVectorLayer :
QgsCoordinateBoundsPreviewMapWidget::QgsCoordinateBoundsPreviewMapWidget :
QgsProjectionSelectionTreeWidget::setShowNoProjection :
QgsProjectionSelectionTreeWidget::QgsProjectionSelectionTreeWidget :
QgsProjectionSelectionDialog::setShowNoProjection :
QgsProjectionSelectionDialog::QgsProjectionSelectionDialog :
QgisApp::validateCrs :
QObject::qt_static_metacall :
QgisApp::customCrsValidation :
QgisApp::customProjection :
QgsMapLayer::setCrs :
QgsVectorLayer::setCoordinateSystem :
QgsVectorLayer::setDataSource :
QgsVectorLayer::QgsVectorLayer :
QgsCoordinateBoundsPreviewMapWidget::QgsCoordinateBoundsPreviewMapWidget :
QgsProjectionSelectionTreeWidget::setShowNoProjection :
QgsProjectionSelectionTreeWidget::QgsProjectionSelectionTreeWidget :
QgsProjectionSelectionDialog::setShowNoProjection :
QgsProjectionSelectionDialog::QgsProjectionSelectionDialog :
QgisApp::validateCrs :
QObject::qt_static_metacall :
QgisApp::customCrsValidation :
```
  • Loading branch information
m-kuhn committed Jul 23, 2021
1 parent dd9eb90 commit 23521d2
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/app/qgisapp.cpp
Expand Up @@ -777,6 +777,11 @@ void QgisApp::validateCrs( QgsCoordinateReferenceSystem &srs )
// \note this class is not a descendent of QWidget so we can't pass
// it in the ctor of the layer projection selector

static bool opening = false;
if ( opening )
break;
opening = true;

QgsProjectionSelectionDialog *mySelector = new QgsProjectionSelectionDialog();
const QString validationHint = srs.validationHint();
if ( !validationHint.isEmpty() )
Expand All @@ -803,6 +808,7 @@ void QgisApp::validateCrs( QgsCoordinateReferenceSystem &srs )
}

delete mySelector;
opening = false;
break;
}

Expand Down

0 comments on commit 23521d2

Please sign in to comment.