mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-01 00:46:20 -05:00
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.
This commit is contained in:
parent
930c56f5b8
commit
b45ab5d283
@ -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<QgsVectorLayer *>( 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( );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user