From 6f59965ae1e4992a0e8333b066cff53f4df4006c Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Sat, 21 Oct 2017 10:25:39 +1000 Subject: [PATCH] Fix double ownership issue causing crash when deleting layouts --- src/gui/layout/qgslayoutmousehandles.cpp | 16 ++++++++-------- src/gui/layout/qgslayoutmousehandles.h | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/gui/layout/qgslayoutmousehandles.cpp b/src/gui/layout/qgslayoutmousehandles.cpp index 2e20324765b3..4f22cb9be778 100644 --- a/src/gui/layout/qgslayoutmousehandles.cpp +++ b/src/gui/layout/qgslayoutmousehandles.cpp @@ -44,12 +44,12 @@ QgsLayoutMouseHandles::QgsLayoutMouseHandles( QgsLayout *layout, QgsLayoutView * //accept hover events, required for changing cursor to resize cursors setAcceptHoverEvents( true ); - mHorizontalSnapLine.reset( mView->createSnapLine() ); + mHorizontalSnapLine = mView->createSnapLine(); mHorizontalSnapLine->hide(); - layout->addItem( mHorizontalSnapLine.get() ); - mVerticalSnapLine.reset( mView->createSnapLine() ); + layout->addItem( mHorizontalSnapLine ); + mVerticalSnapLine = mView->createSnapLine(); mVerticalSnapLine->hide(); - layout->addItem( mVerticalSnapLine.get() ); + layout->addItem( mVerticalSnapLine ); } void QgsLayoutMouseHandles::paint( QPainter *painter, const QStyleOptionGraphicsItem *itemStyle, QWidget *pWidget ) @@ -722,12 +722,12 @@ QPointF QgsLayoutMouseHandles::snapPoint( QPointF originalPoint, QgsLayoutMouseH switch ( mode ) { case Item: - snappedPoint = mLayout->snapper().snapRect( rect().translated( originalPoint ), mView->transform().m11(), snapped, snapHorizontal ? mHorizontalSnapLine.get() : nullptr, - snapVertical ? mVerticalSnapLine.get() : nullptr, &itemsToExclude ).topLeft(); + snappedPoint = mLayout->snapper().snapRect( rect().translated( originalPoint ), mView->transform().m11(), snapped, snapHorizontal ? mHorizontalSnapLine : nullptr, + snapVertical ? mVerticalSnapLine : nullptr, &itemsToExclude ).topLeft(); break; case Point: - snappedPoint = mLayout->snapper().snapPoint( originalPoint, mView->transform().m11(), snapped, snapHorizontal ? mHorizontalSnapLine.get() : nullptr, - snapVertical ? mVerticalSnapLine.get() : nullptr, &itemsToExclude ); + snappedPoint = mLayout->snapper().snapPoint( originalPoint, mView->transform().m11(), snapped, snapHorizontal ? mHorizontalSnapLine : nullptr, + snapVertical ? mVerticalSnapLine : nullptr, &itemsToExclude ); break; } diff --git a/src/gui/layout/qgslayoutmousehandles.h b/src/gui/layout/qgslayoutmousehandles.h index dc3bd3dacb64..af2ace4721ed 100644 --- a/src/gui/layout/qgslayoutmousehandles.h +++ b/src/gui/layout/qgslayoutmousehandles.h @@ -159,8 +159,8 @@ class GUI_EXPORT QgsLayoutMouseHandles: public QObject, public QGraphicsRectItem bool mIsResizing = false; //! Align snap lines - std::unique_ptr< QGraphicsLineItem > mHorizontalSnapLine; - std::unique_ptr< QGraphicsLineItem > mVerticalSnapLine; + QGraphicsLineItem *mHorizontalSnapLine = nullptr; + QGraphicsLineItem *mVerticalSnapLine = nullptr; QSizeF mCursorOffset;