diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index c8562f14316..08b7b936c19 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -13385,7 +13385,11 @@ QgsFeature QgisApp::duplicateFeatureDigitized( QgsMapLayer *mlayer, const QgsFea QgsVectorLayer *layer = qobject_cast<QgsVectorLayer *>( mlayer ); layer->startEditing(); - mMapCanvas->setMapTool( mMapTools.mDigitizeFeature ); + + QgsMapToolDigitizeFeature *digiFeature = nullptr; + digiFeature = new QgsMapToolDigitizeFeature( mMapCanvas, QgsMapToolCapture::CaptureNone ); + + mMapCanvas->setMapTool( digiFeature ); mMapCanvas->window()->raise(); mMapCanvas->activateWindow(); mMapCanvas->setFocus(); @@ -13394,7 +13398,7 @@ QgsFeature QgisApp::duplicateFeatureDigitized( QgsMapLayer *mlayer, const QgsFea messageBar()->pushMessage( msg, QgsMessageBar::INFO, 3 ); QMetaObject::Connection *connDigitizingFinished = new QMetaObject::Connection(); - *connDigitizingFinished = connect( mMapTools.mDigitizeFeature, static_cast<void ( QgsMapToolDigitizeFeature::* )( const QgsFeature & )>( &QgsMapToolDigitizeFeature::digitizingFinished ), this, [this, layer, feature, connDigitizingFinished]( const QgsFeature & digitizedFeature ) + *connDigitizingFinished = connect( digiFeature, static_cast<void ( QgsMapToolDigitizeFeature::* )( const QgsFeature & )>( &QgsMapToolDigitizeFeature::digitizingFinished ), this, [this, layer, feature, connDigitizingFinished, digiFeature]( const QgsFeature & digitizedFeature ) { QString msg = tr( "Duplicate digitized" ); messageBar()->pushMessage( msg, QgsMessageBar::INFO, 1 ); @@ -13412,11 +13416,19 @@ QgsFeature QgisApp::duplicateFeatureDigitized( QgsMapLayer *mlayer, const QgsFea } messageBar()->pushMessage( tr( "Feature on layer %2 duplicated\n%3" ).arg( layer->name() ).arg( childrenInfo ), QgsMessageBar::SUCCESS, 5 ); - mMapCanvas->unsetMapTool( mMapTools.mDigitizeFeature ); - disconnect( *connDigitizingFinished ); + mMapCanvas->unsetMapTool( digiFeature ); + //disconnect( *connDigitizingFinished ); + //delete digiFeature; } ); + QMetaObject::Connection *connDigitizingAborted = new QMetaObject::Connection(); + *connDigitizingAborted = connect( digiFeature, static_cast<void ( QgsMapToolDigitizeFeature::* )()>( &QgsMapToolDigitizeFeature::deactivate ), this, [this, layer, feature, connDigitizingFinished, digiFeature]() + { + delete digiFeature; + } + ); + return QgsFeature(); }