From b45ab5d283c772a7cc60cae40ea6c837371ceefc Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Tue, 4 Dec 2018 18:33:51 +0100 Subject: [PATCH] Tell the bridge to update when a bad layer was fixed This fixes an unreported issue: when a bad layer is fixed it does not appear in the layer order panel. The reason why it does not appear is that a bad layer has no geometry information, and the layer order model does not list geometryless layers. But after a bad layer has been fixed, it has a geometry and the panel should show it. --- src/app/qgisapp.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index dc5546ee8ae..540426b67d6 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -6976,13 +6976,13 @@ void QgisApp::changeDataSource( QgsMapLayer *layer ) QgsMimeDataUtils::Uri uri( dlg.uri() ); if ( uri.isValid() ) { - bool layerIsValid( layer->isValid() ); + bool layerWasValid( layer->isValid() ); // Store subset string form vlayer if we are fixing a bad layer QgsVectorLayer *vlayer = qobject_cast( layer ); QString subsetString; // Get the subset string directly from the data provider because // layer's method will return a null string from invalid layers - if ( !layerIsValid && vlayer && vlayer->dataProvider() && + if ( !layerWasValid && vlayer && vlayer->dataProvider() && vlayer->dataProvider()->supportsSubsetString() && !vlayer->dataProvider()->subsetString( ).isEmpty() ) { @@ -6990,7 +6990,7 @@ void QgisApp::changeDataSource( QgsMapLayer *layer ) } layer->setDataSource( uri.uri, layer->name(), uri.providerKey, QgsDataProvider::ProviderOptions() ); // Re-apply original style and subset string when fixing bad layers - if ( !( layerIsValid || layer->originalXmlProperties().isEmpty() ) ) + if ( !( layerWasValid || layer->originalXmlProperties().isEmpty() ) ) { if ( ! subsetString.isEmpty() ) { @@ -7030,6 +7030,12 @@ void QgisApp::changeDataSource( QgsMapLayer *layer ) tl->setItemVisibilityChecked( true ); } } + + // Tell the bridge that we have fixed a layer + if ( ! layerWasValid && layer->isValid() ) + { + QgsProject::instance()->layerTreeRoot()->customLayerOrderChanged( ); + } } } }