Skip to content

Commit 39d3765

Browse files
committedFeb 18, 2015
defer readMapLayer signal for layers with joins to let editor widgets pickup joined fields
1 parent 342a0cb commit 39d3765

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed
 

‎src/core/qgsproject.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,18 @@ QPair< bool, QList<QDomNode> > QgsProject::_getMapLayers( QDomDocument const &do
680680
vIt->first->updateFields();
681681
}
682682

683+
QSet<QgsVectorLayer *> notified;
684+
for ( vIt = vLayerList.begin(); vIt != vLayerList.end(); ++vIt )
685+
{
686+
if ( notified.contains( vIt->first ) )
687+
continue;
688+
689+
notified << vIt->first;
690+
emit readMapLayer( vIt->first, vIt->second );
691+
}
692+
693+
694+
683695
return qMakePair( returnStatus, brokenNodes );
684696
} // _getMapLayers
685697

@@ -715,16 +727,17 @@ bool QgsProject::addLayer( const QDomElement &layerElem, QList<QDomNode> &broken
715727
// have the layer restore state that is stored in Dom node
716728
if ( mapLayer->readLayerXML( layerElem ) && mapLayer->isValid() )
717729
{
718-
emit readMapLayer( mapLayer, layerElem );
730+
// postpone readMapLayer signal for vector layers with joins
731+
QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer*>( mapLayer );
732+
if ( !vLayer || vLayer->vectorJoins().size() == 0 )
733+
emit readMapLayer( mapLayer, layerElem );
734+
else
735+
vectorLayerList.push_back( qMakePair( vLayer, layerElem ) );
719736

720737
QList<QgsMapLayer *> myLayers;
721738
myLayers << mapLayer;
722739
QgsMapLayerRegistry::instance()->addMapLayers( myLayers );
723-
QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer*>( mapLayer );
724-
if ( vLayer && vLayer->vectorJoins().size() > 0 )
725-
{
726-
vectorLayerList.push_back( qMakePair( vLayer, layerElem ) );
727-
}
740+
728741
return true;
729742
}
730743
else

0 commit comments

Comments
 (0)
Please sign in to comment.