diff --git a/python/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in b/python/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in index 1476edf44b1..97441774395 100644 --- a/python/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in +++ b/python/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in @@ -221,9 +221,9 @@ Returns the symbol used by the legend node. .. versionadded:: 2.14 %End - void setSymbol( QgsSymbol *symbol ); + void setSymbol( QgsSymbol *symbol /Transfer/ ); %Docstring -Sets the symbol to be used by the legend node. The symbol change is also propagated +Sets the ``symbol`` to be used by the legend node. The symbol change is also propagated to the associated vector layer's renderer. :param symbol: new symbol for node. Ownership is transferred. diff --git a/python/core/auto_generated/symbology/qgslegendsymbolitem.sip.in b/python/core/auto_generated/symbology/qgslegendsymbolitem.sip.in index 89017e3a6e9..59702b8b9d7 100644 --- a/python/core/auto_generated/symbology/qgslegendsymbolitem.sip.in +++ b/python/core/auto_generated/symbology/qgslegendsymbolitem.sip.in @@ -94,9 +94,13 @@ Key of the parent legend node. For legends with tree hierarchy Parameter parentRuleKey added in QGIS 2.8 %End - void setSymbol( QgsSymbol *s /Transfer/ ); + void setSymbol( QgsSymbol *s ); %Docstring -Sets symbol of the item. Takes ownership of symbol. +Sets the symbol of the item. + +Does not take ownership of symbol -- an internal clone is made of the symbol. + +.. seealso:: :py:func:`symbol` %End void setDataDefinedSizeLegendSettings( QgsDataDefinedSizeLegend *settings /Transfer/ ); diff --git a/src/core/layertree/qgslayertreemodellegendnode.h b/src/core/layertree/qgslayertreemodellegendnode.h index f59638e4e00..5c39f7ba868 100644 --- a/src/core/layertree/qgslayertreemodellegendnode.h +++ b/src/core/layertree/qgslayertreemodellegendnode.h @@ -214,13 +214,13 @@ class CORE_EXPORT QgsSymbolLegendNode : public QgsLayerTreeModelLegendNode const QgsSymbol *symbol() const; /** - * Sets the symbol to be used by the legend node. The symbol change is also propagated + * Sets the \a symbol to be used by the legend node. The symbol change is also propagated * to the associated vector layer's renderer. * \param symbol new symbol for node. Ownership is transferred. * \see symbol() * \since QGIS 2.14 */ - void setSymbol( QgsSymbol *symbol ); + void setSymbol( QgsSymbol *symbol SIP_TRANSFER ); /** * Returns label of text to be shown on top of the symbol. diff --git a/src/core/symbology/qgslegendsymbolitem.cpp b/src/core/symbology/qgslegendsymbolitem.cpp index ca643da0c39..85cbed619f3 100644 --- a/src/core/symbology/qgslegendsymbolitem.cpp +++ b/src/core/symbology/qgslegendsymbolitem.cpp @@ -72,7 +72,7 @@ bool QgsLegendSymbolItem::isScaleOK( double scale ) const void QgsLegendSymbolItem::setSymbol( QgsSymbol *s ) { - mSymbol.reset( s ); + mSymbol.reset( s ? s->clone() : nullptr ); mOriginalSymbolPointer = s; } diff --git a/src/core/symbology/qgslegendsymbolitem.h b/src/core/symbology/qgslegendsymbolitem.h index 9777d2e5cce..5a1d004b952 100644 --- a/src/core/symbology/qgslegendsymbolitem.h +++ b/src/core/symbology/qgslegendsymbolitem.h @@ -88,8 +88,14 @@ class CORE_EXPORT QgsLegendSymbolItem */ QString parentRuleKey() const { return mParentKey; } - //! Sets symbol of the item. Takes ownership of symbol. - void setSymbol( QgsSymbol *s SIP_TRANSFER ); + /** + * Sets the symbol of the item. + * + * Does not take ownership of symbol -- an internal clone is made of the symbol. + * + * \see symbol() + */ + void setSymbol( QgsSymbol *s ); /** * Sets extra information about data-defined size. If set, this item should be converted to QgsDataDefinedSizeLegendNode