Skip to content

Commit 7886c91

Browse files
committed
Fix crash when editing graduated symbol in style dock
Fixes #18909 (cherry-picked from 9887508)
1 parent 39f23eb commit 7886c91

File tree

4 files changed

+8
-1
lines changed

4 files changed

+8
-1
lines changed

python/gui/auto_generated/symbology/qgssymbolselectordialog.sip.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Symbol selector widget that can be used to select and build a symbol
2828
%End
2929
public:
3030

31+
3132
QgsSymbolSelectorWidget( QgsSymbol *symbol, QgsStyle *style, QgsVectorLayer *vl, QWidget *parent /TransferThis/ = 0 );
3233
%Docstring
3334
Symbol selector widget that can be used to select and build a symbol

src/gui/symbology/qgscategorizedsymbolrendererwidget.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,8 @@ void QgsCategorizedSymbolRendererWidget::changeCategorizedSymbol()
548548
std::unique_ptr<QgsSymbol> newSymbol( mCategorizedSymbol->clone() );
549549
if ( panel && panel->dockMode() )
550550
{
551+
// bit tricky here - the widget doesn't take ownership of the symbol. So we need it to last for the duration of the
552+
// panel's existence. Accordingly, just kinda give it ownership here, and clean up in cleanUpSymbolSelector
551553
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol.release(), mStyle, mLayer, panel );
552554
dlg->setContext( mContext );
553555
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget );

src/gui/symbology/qgsgraduatedsymbolrendererwidget.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,9 @@ void QgsGraduatedSymbolRendererWidget::changeRangeSymbol( int rangeIdx )
977977
QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
978978
if ( panel && panel->dockMode() )
979979
{
980-
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol.get(), mStyle, mLayer, panel );
980+
// bit tricky here - the widget doesn't take ownership of the symbol. So we need it to last for the duration of the
981+
// panel's existence. Accordingly, just kinda give it ownership here, and clean up in cleanUpSymbolSelector
982+
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol.release(), mStyle, mLayer, panel );
981983
dlg->setContext( mContext );
982984
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget );
983985
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector );

src/gui/symbology/qgssymbolselectordialog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ class GUI_EXPORT QgsSymbolSelectorWidget: public QgsPanelWidget, private Ui::Qgs
9393

9494
public:
9595

96+
// TODO QGIS 4.0 - transfer ownership of symbol to widget!
97+
9698
/**
9799
* Symbol selector widget that can be used to select and build a symbol
98100
* \param symbol The symbol to load into the widget as a start point.

0 commit comments

Comments
 (0)