diff --git a/src/app/qgsgeometryvalidationservice.cpp b/src/app/qgsgeometryvalidationservice.cpp index 0904b8085b2..993710e1368 100644 --- a/src/app/qgsgeometryvalidationservice.cpp +++ b/src/app/qgsgeometryvalidationservice.cpp @@ -145,7 +145,7 @@ void QgsGeometryValidationService::onFeatureDeleted( QgsVectorLayer *layer, QgsF void QgsGeometryValidationService::onBeforeCommitChanges( QgsVectorLayer *layer ) { - if ( !mLayerChecks[layer].topologyChecks.empty() ) // TODO && topologyChecks not fulfilled + if ( !mBypassChecks && !mLayerChecks[layer].topologyChecks.empty() ) { if ( !layer->allowCommit() ) { @@ -461,7 +461,9 @@ void QgsGeometryValidationService::triggerTopologyChecks( QgsVectorLayer *layer } if ( allErrors.empty() && mLayerChecks[layer].singleFeatureCheckErrors.empty() && mLayerChecks[layer].commitPending ) { + mBypassChecks = true; layer->commitChanges(); + mBypassChecks = false; mMessageBar->popWidget( mMessageBarItem ); mMessageBarItem = nullptr; } diff --git a/src/app/qgsgeometryvalidationservice.h b/src/app/qgsgeometryvalidationservice.h index 0f2d397e08a..01991c608a5 100644 --- a/src/app/qgsgeometryvalidationservice.h +++ b/src/app/qgsgeometryvalidationservice.h @@ -122,6 +122,10 @@ class QgsGeometryValidationService : public QObject QgsMessageBar *mMessageBar = nullptr; QgsMessageBarItem *mMessageBarItem = nullptr; + // when checks do complete successfully and changes need to be saved + // this variable is used to indicate that it's safe to bypass the checks + bool mBypassChecks = false; + }; #endif // QGSGEOMETRYVALIDATIONSERVICE_H