Skip to content

Commit

Permalink
Fix crash when deleting layout items
Browse files Browse the repository at this point in the history
Fixes #17876, #17770
  • Loading branch information
nyalldawson committed Jan 19, 2018
1 parent 0516136 commit fe13c0e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
22 changes: 20 additions & 2 deletions src/gui/layout/qgslayoutitemwidget.cpp
Expand Up @@ -190,6 +190,9 @@ QgsLayoutAtlas *QgsLayoutItemBaseWidget::layoutAtlas() const

void QgsLayoutItemPropertiesWidget::updateVariables()
{
if ( !mItem )
return;

QgsExpressionContext context = mItem->createExpressionContext();
mVariableEditor->setContext( &context );
int editableIndex = context.indexOfScope( tr( "Layout Item" ) );
Expand Down Expand Up @@ -295,8 +298,11 @@ void QgsLayoutItemPropertiesWidget::setItem( QgsLayoutItem *item )
disconnect( mItem, &QgsLayoutObject::changed, this, &QgsLayoutItemPropertiesWidget::setValuesForGuiNonPositionElements );
}
mItem = item;
connect( mItem, &QgsLayoutItem::sizePositionChanged, this, &QgsLayoutItemPropertiesWidget::setValuesForGuiPositionElements );
connect( mItem, &QgsLayoutObject::changed, this, &QgsLayoutItemPropertiesWidget::setValuesForGuiNonPositionElements );
if ( mItem )
{
connect( mItem, &QgsLayoutItem::sizePositionChanged, this, &QgsLayoutItemPropertiesWidget::setValuesForGuiPositionElements );
connect( mItem, &QgsLayoutObject::changed, this, &QgsLayoutItemPropertiesWidget::setValuesForGuiNonPositionElements );
}

setValuesForGuiElements();
}
Expand Down Expand Up @@ -329,6 +335,9 @@ void QgsLayoutItemPropertiesWidget::mBackgroundColorButton_colorChanged( const Q

void QgsLayoutItemPropertiesWidget::changeItemPosition()
{
if ( !mItem )
return;

mItem->layout()->undoStack()->beginCommand( mItem, tr( "Move Item" ), QgsLayoutItem::UndoIncrementalMove );

QgsLayoutPoint point( mXPosSpin->value(), mYPosSpin->value(), mPosUnitsComboBox->unit() );
Expand All @@ -339,13 +348,19 @@ void QgsLayoutItemPropertiesWidget::changeItemPosition()

void QgsLayoutItemPropertiesWidget::changeItemReference( QgsLayoutItem::ReferencePoint point )
{
if ( !mItem )
return;

mItem->layout()->undoStack()->beginCommand( mItem, tr( "Change Item Reference" ) );
mItem->setReferencePoint( point );
mItem->layout()->undoStack()->endCommand();
}

void QgsLayoutItemPropertiesWidget::changeItemSize()
{
if ( !mItem )
return;

mItem->layout()->undoStack()->beginCommand( mItem, tr( "Resize Item" ), QgsLayoutItem::UndoIncrementalResize );

QgsLayoutSize size( mWidthSpin->value(), mHeightSpin->value(), mSizeUnitsComboBox->unit() );
Expand All @@ -356,6 +371,9 @@ void QgsLayoutItemPropertiesWidget::changeItemSize()

void QgsLayoutItemPropertiesWidget::variablesChanged()
{
if ( !mItem )
return;

QgsExpressionContextUtils::setLayoutItemVariables( mItem, mVariableEditor->variablesInActiveScope() );
}

Expand Down
2 changes: 1 addition & 1 deletion src/gui/layout/qgslayoutitemwidget.h
Expand Up @@ -265,7 +265,7 @@ class GUI_EXPORT QgsLayoutItemPropertiesWidget: public QWidget, private Ui::QgsL

private:

QgsLayoutItem *mItem = nullptr;
QPointer< QgsLayoutItem > mItem;
QgsLayoutConfigObject *mConfigObject = nullptr;

bool mFreezeXPosSpin = false;
Expand Down

0 comments on commit fe13c0e

Please sign in to comment.