From 386568200ea6aead58c0e6663d8848e9a3e848b8 Mon Sep 17 00:00:00 2001 From: Jacky Volpes Date: Fri, 4 Aug 2023 14:56:14 +0200 Subject: [PATCH] Also set 'evaluate default values on provider side' property when loading a layer --- src/core/project/qgsproject.cpp | 13 ++++++++++--- tests/src/python/test_qgsproject.py | 9 +++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/core/project/qgsproject.cpp b/src/core/project/qgsproject.cpp index 73989aff4ec2..af982fd020e2 100644 --- a/src/core/project/qgsproject.cpp +++ b/src/core/project/qgsproject.cpp @@ -527,9 +527,8 @@ void QgsProject::setFlags( Qgis::ProjectFlags flags ) for ( auto layerIt = layers.constBegin(); layerIt != layers.constEnd(); ++layerIt ) { if ( QgsVectorLayer *vl = qobject_cast( layerIt.value() ) ) - { - vl->dataProvider()->setProviderProperty( QgsVectorDataProvider::EvaluateDefaultValues, newEvaluateDefaultValues ); - } + if ( vl->dataProvider() ) + vl->dataProvider()->setProviderProperty( QgsVectorDataProvider::EvaluateDefaultValues, newEvaluateDefaultValues ); } } @@ -2670,6 +2669,14 @@ void QgsProject::onMapLayersAdded( const QList &layers ) if ( ! layer->isValid() ) return; + if ( QgsVectorLayer *vlayer = qobject_cast( layer ) ) + { + vlayer->setReadExtentFromXml( mFlags & Qgis::ProjectFlag::TrustStoredLayerStatistics ); + if ( vlayer->dataProvider() ) + vlayer->dataProvider()->setProviderProperty( QgsVectorDataProvider::EvaluateDefaultValues, + ( bool )( mFlags & Qgis::ProjectFlag::EvaluateDefaultValuesOnProviderSide ) ); + } + connect( layer, &QgsMapLayer::configChanged, this, [ = ] { setDirty(); } ); // check if we have to update connections for layers with dependencies diff --git a/tests/src/python/test_qgsproject.py b/tests/src/python/test_qgsproject.py index de279e555b6a..be29700c5517 100644 --- a/tests/src/python/test_qgsproject.py +++ b/tests/src/python/test_qgsproject.py @@ -1585,14 +1585,18 @@ def test_remember_evaluate_default_values(self): project = QgsProject() layer = QgsVectorLayer('Point?crs=epsg:4326&field=int:integer&field=int2:integer', 'test', 'memory') + layer2 = QgsVectorLayer('Point?crs=epsg:4326&field=int:integer&field=int2:integer', 'test', 'memory') project.addMapLayers([layer]) - self.assertEqual(layer.dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), None) + self.assertEqual(layer.dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), False) project.setFlags(project.flags() | Qgis.ProjectFlag.EvaluateDefaultValuesOnProviderSide) self.assertTrue(project.flags() & Qgis.ProjectFlag.EvaluateDefaultValuesOnProviderSide) self.assertEqual(layer.dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True) + project.addMapLayers([layer2]) + self.assertEqual(layer2.dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True) + tmp_dir = QTemporaryDir() tmp_project_file = f"{tmp_dir.path()}/project.qgs" self.assertTrue(project.write(tmp_project_file)) @@ -1601,10 +1605,11 @@ def test_remember_evaluate_default_values(self): self.assertTrue(project2.read(tmp_project_file)) layers = list(project2.mapLayers().values()) - self.assertEqual(len(layers), 1) + self.assertEqual(len(layers), 2) self.assertTrue(project2.flags() & Qgis.ProjectFlag.EvaluateDefaultValuesOnProviderSide) self.assertEqual(layers[0].dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True) + self.assertEqual(layers[1].dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True) if __name__ == '__main__':