@@ -469,6 +469,7 @@ QgsPalLayerSettings& QgsPalLayerSettings::operator=( const QgsPalLayerSettings &
469469 shadowBlendMode = s.shadowBlendMode ;
470470
471471 // data defined
472+ removeAllDataDefinedProperties ();
472473 QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator it = s.dataDefinedProperties .constBegin ();
473474 for ( ; it != s.dataDefinedProperties .constEnd (); ++it )
474475 {
@@ -492,13 +493,7 @@ QgsPalLayerSettings::~QgsPalLayerSettings()
492493 delete extentGeom;
493494
494495 // delete all QgsDataDefined objects (which also deletes their QgsExpression object)
495- QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::iterator it = dataDefinedProperties.begin ();
496- for ( ; it != dataDefinedProperties.constEnd (); ++it )
497- {
498- delete ( it.value () );
499- it.value () = 0 ;
500- }
501- dataDefinedProperties.clear ();
496+ removeAllDataDefinedProperties ();
502497}
503498
504499
@@ -628,6 +623,14 @@ void QgsPalLayerSettings::writeDataDefinedPropertyMap( QgsVectorLayer* layer, QD
628623 propertyValue = QVariant ( values.join ( " ~~" ) );
629624 }
630625 }
626+
627+ if ( parentElem )
628+ {
629+ // writing to XML document (instead of writing to layer)
630+ QDomDocument doc = parentElem->ownerDocument ();
631+ QDomElement e = dd->toXmlElement ( doc, i.value ().first );
632+ parentElem->appendChild ( e );
633+ }
631634 }
632635 }
633636
@@ -651,17 +654,6 @@ void QgsPalLayerSettings::writeDataDefinedPropertyMap( QgsVectorLayer* layer, QD
651654 layer->removeCustomProperty ( QString ( " labeling/dataDefinedProperty" ) + QString::number ( i.value ().second ) );
652655 }
653656 }
654- else if ( parentElem )
655- {
656- // writing to XML document
657- QgsDataDefined* dd = it.value ();
658- if ( dd )
659- {
660- QDomDocument doc = parentElem->ownerDocument ();
661- QDomElement e = dd->toXmlElement ( doc, i.value ().first );
662- parentElem->appendChild ( e );
663- }
664- }
665657 }
666658}
667659
@@ -1541,6 +1533,17 @@ void QgsPalLayerSettings::removeDataDefinedProperty( DataDefinedProperties p )
15411533 }
15421534}
15431535
1536+ void QgsPalLayerSettings::removeAllDataDefinedProperties ()
1537+ {
1538+ QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::iterator it = dataDefinedProperties.begin ();
1539+ for ( ; it != dataDefinedProperties.constEnd (); ++it )
1540+ {
1541+ delete ( it.value () );
1542+ it.value () = 0 ;
1543+ }
1544+ dataDefinedProperties.clear ();
1545+ }
1546+
15441547QString QgsPalLayerSettings::updateDataDefinedString ( const QString& value )
15451548{
15461549 // TODO: update or remove this when project settings for labeling are migrated to better XML layout
0 commit comments