@@ -46,6 +46,7 @@ void QgsLayoutViewToolAddItem::layoutPressEvent( QgsLayoutViewMouseEvent *event
4646 return ;
4747 }
4848
49+ mDrawing = true ;
4950 mMousePressStartPos = event->pos ();
5051 mRubberBand .reset ( QgsApplication::layoutItemRegistry ()->createItemRubberBand ( mItemType , view () ) );
5152 if ( mRubberBand )
@@ -56,25 +57,21 @@ void QgsLayoutViewToolAddItem::layoutPressEvent( QgsLayoutViewMouseEvent *event
5657
5758void QgsLayoutViewToolAddItem::layoutMoveEvent ( QgsLayoutViewMouseEvent *event )
5859{
59- if ( mRubberBand )
60+ if ( mDrawing && mRubberBand )
6061 {
6162 mRubberBand ->update ( event->layoutPoint (), event->modifiers () );
6263 }
6364}
6465
6566void QgsLayoutViewToolAddItem::layoutReleaseEvent ( QgsLayoutViewMouseEvent *event )
6667{
67- if ( event->button () != Qt::LeftButton )
68+ if ( event->button () != Qt::LeftButton || ! mDrawing )
6869 {
6970 return ;
7071 }
72+ mDrawing = false ;
7173
72- QRectF rect = QRectF ( view ()->mapToScene ( mMousePressStartPos ),
73- event->layoutPoint () );
74- if ( mRubberBand )
75- {
76- rect = mRubberBand ->finish ( event->layoutPoint (), event->modifiers () );
77- }
74+ QRectF rect = mRubberBand ->finish ( event->layoutPoint (), event->modifiers () );
7875
7976 // click? or click-and-drag?
8077 QPoint mousePressStopPoint = event->pos ();
@@ -92,6 +89,17 @@ void QgsLayoutViewToolAddItem::layoutReleaseEvent( QgsLayoutViewMouseEvent *even
9289 layout ()->addItem ( item );
9390}
9491
92+ void QgsLayoutViewToolAddItem::deactivate ()
93+ {
94+ if ( mDrawing )
95+ {
96+ // canceled mid operation
97+ mRubberBand ->finish ();
98+ mDrawing = false ;
99+ }
100+ QgsLayoutViewTool::deactivate ();
101+ }
102+
95103int QgsLayoutViewToolAddItem::itemType () const
96104{
97105 return mItemType ;
0 commit comments