@@ -980,15 +980,17 @@ void QgsVertexTool::keyPressEvent( QKeyEvent *e )
980
980
981
981
QgsGeometry QgsVertexTool::cachedGeometry ( const QgsVectorLayer *layer, QgsFeatureId fid )
982
982
{
983
- if ( !mCache .contains ( layer ) )
983
+ const bool layerWasNotInCache = !mCache .contains ( layer );
984
+ // insert if it was not in cache
985
+ QHash<QgsFeatureId, QgsGeometry>& layerCache = mCache [layer];
986
+ if ( layerWasNotInCache )
984
987
{
985
988
connect ( layer, &QgsVectorLayer::geometryChanged, this , &QgsVertexTool::onCachedGeometryChanged );
986
989
connect ( layer, &QgsVectorLayer::featureDeleted, this , &QgsVertexTool::onCachedGeometryDeleted );
987
990
connect ( layer, &QgsVectorLayer::willBeDeleted, this , &QgsVertexTool::clearGeometryCache );
988
991
connect ( layer, &QgsVectorLayer::dataChanged, this , &QgsVertexTool::clearGeometryCache );
989
992
}
990
993
991
- QHash<QgsFeatureId, QgsGeometry> &layerCache = mCache [layer];
992
994
if ( !layerCache.contains ( fid ) )
993
995
{
994
996
QgsFeature f;
@@ -1008,6 +1010,10 @@ void QgsVertexTool::clearGeometryCache()
1008
1010
{
1009
1011
const QgsVectorLayer *layer = qobject_cast<const QgsVectorLayer *>( sender () );
1010
1012
mCache .remove ( layer );
1013
+ disconnect ( layer, &QgsVectorLayer::geometryChanged, this , &QgsVertexTool::onCachedGeometryChanged );
1014
+ disconnect ( layer, &QgsVectorLayer::featureDeleted, this , &QgsVertexTool::onCachedGeometryDeleted );
1015
+ disconnect ( layer, &QgsVectorLayer::willBeDeleted, this , &QgsVertexTool::clearGeometryCache );
1016
+ disconnect ( layer, &QgsVectorLayer::dataChanged, this , &QgsVertexTool::clearGeometryCache );
1011
1017
}
1012
1018
1013
1019
void QgsVertexTool::onCachedGeometryChanged ( QgsFeatureId fid, const QgsGeometry &geom )
0 commit comments