Skip to content

Commit e5b11d4

Browse files
authored
Merge pull request #5085 from boundlessgeo/wfs_mutex_offline
Offline editing: workaround for bug 17087 deadlock
2 parents f99a7a9 + 1e4e45d commit e5b11d4

File tree

1 file changed

+42
-39
lines changed

1 file changed

+42
-39
lines changed

src/core/qgsofflineediting.cpp

+42-39
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ bool QgsOfflineEditing::convertToOfflineProject( const QString &offlineDataPath,
141141
{
142142
QString origLayerId = vl->id();
143143
QgsVectorLayer *newLayer = copyVectorLayer( vl, db, dbPath, onlySelected );
144-
145144
if ( newLayer )
146145
{
147146
layerIdMapping.insert( origLayerId, newLayer );
@@ -582,45 +581,7 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
582581
layer->name() + " (offline)", QStringLiteral( "spatialite" ) );
583582
if ( newLayer->isValid() )
584583
{
585-
// mark as offline layer
586-
newLayer->setCustomProperty( CUSTOM_PROPERTY_IS_OFFLINE_EDITABLE, true );
587-
588-
// store original layer source
589-
newLayer->setCustomProperty( CUSTOM_PROPERTY_REMOTE_SOURCE, layer->source() );
590-
newLayer->setCustomProperty( CUSTOM_PROPERTY_REMOTE_PROVIDER, layer->providerType() );
591-
592-
// register this layer with the central layers registry
593-
QgsProject::instance()->addMapLayers(
594-
QList<QgsMapLayer *>() << newLayer );
595584

596-
// copy style
597-
copySymbology( layer, newLayer );
598-
599-
QgsLayerTreeGroup *layerTreeRoot = QgsProject::instance()->layerTreeRoot();
600-
// Find the parent group of the original layer
601-
QgsLayerTreeLayer *layerTreeLayer = layerTreeRoot->findLayer( layer->id() );
602-
if ( layerTreeLayer )
603-
{
604-
QgsLayerTreeGroup *parentTreeGroup = qobject_cast<QgsLayerTreeGroup *>( layerTreeLayer->parent() );
605-
if ( parentTreeGroup )
606-
{
607-
int index = parentTreeGroup->children().indexOf( layerTreeLayer );
608-
// Move the new layer from the root group to the new group
609-
QgsLayerTreeLayer *newLayerTreeLayer = layerTreeRoot->findLayer( newLayer->id() );
610-
if ( newLayerTreeLayer )
611-
{
612-
QgsLayerTreeNode *newLayerTreeLayerClone = newLayerTreeLayer->clone();
613-
QgsLayerTreeGroup *grp = qobject_cast<QgsLayerTreeGroup *>( newLayerTreeLayer->parent() );
614-
parentTreeGroup->insertChildNode( index, newLayerTreeLayerClone );
615-
if ( grp )
616-
grp->removeChildNode( newLayerTreeLayer );
617-
}
618-
}
619-
}
620-
621-
updateRelations( layer, newLayer );
622-
updateMapThemes( layer, newLayer );
623-
updateLayerOrder( layer, newLayer );
624585
// copy features
625586
newLayer->startEditing();
626587
QgsFeature f;
@@ -704,6 +665,48 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
704665
{
705666
showWarning( newLayer->commitErrors().join( QStringLiteral( "\n" ) ) );
706667
}
668+
669+
// mark as offline layer
670+
newLayer->setCustomProperty( CUSTOM_PROPERTY_IS_OFFLINE_EDITABLE, true );
671+
672+
// store original layer source
673+
newLayer->setCustomProperty( CUSTOM_PROPERTY_REMOTE_SOURCE, layer->source() );
674+
newLayer->setCustomProperty( CUSTOM_PROPERTY_REMOTE_PROVIDER, layer->providerType() );
675+
676+
// register this layer with the central layers registry
677+
QgsProject::instance()->addMapLayers(
678+
QList<QgsMapLayer *>() << newLayer );
679+
680+
// copy style
681+
copySymbology( layer, newLayer );
682+
683+
QgsLayerTreeGroup *layerTreeRoot = QgsProject::instance()->layerTreeRoot();
684+
// Find the parent group of the original layer
685+
QgsLayerTreeLayer *layerTreeLayer = layerTreeRoot->findLayer( layer->id() );
686+
if ( layerTreeLayer )
687+
{
688+
QgsLayerTreeGroup *parentTreeGroup = qobject_cast<QgsLayerTreeGroup *>( layerTreeLayer->parent() );
689+
if ( parentTreeGroup )
690+
{
691+
int index = parentTreeGroup->children().indexOf( layerTreeLayer );
692+
// Move the new layer from the root group to the new group
693+
QgsLayerTreeLayer *newLayerTreeLayer = layerTreeRoot->findLayer( newLayer->id() );
694+
if ( newLayerTreeLayer )
695+
{
696+
QgsLayerTreeNode *newLayerTreeLayerClone = newLayerTreeLayer->clone();
697+
QgsLayerTreeGroup *grp = qobject_cast<QgsLayerTreeGroup *>( newLayerTreeLayer->parent() );
698+
parentTreeGroup->insertChildNode( index, newLayerTreeLayerClone );
699+
if ( grp )
700+
grp->removeChildNode( newLayerTreeLayer );
701+
}
702+
}
703+
}
704+
705+
updateRelations( layer, newLayer );
706+
updateMapThemes( layer, newLayer );
707+
updateLayerOrder( layer, newLayer );
708+
709+
707710
}
708711
return newLayer;
709712
}

0 commit comments

Comments
 (0)