diff --git a/src/app/nodetool/qgsmaptoolnodetool.cpp b/src/app/nodetool/qgsmaptoolnodetool.cpp index e8c6b91ab9a7..89180f0f4f64 100644 --- a/src/app/nodetool/qgsmaptoolnodetool.cpp +++ b/src/app/nodetool/qgsmaptoolnodetool.cpp @@ -23,6 +23,8 @@ #include "qgsrubberband.h" #include "qgsvectorlayer.h" #include "qgslogger.h" +#include "qgisapp.h" +#include "qgslegend.h" #include #include @@ -369,6 +371,7 @@ void QgsMapToolNodeTool::canvasPressEvent( QMouseEvent * e ) } mSelectedFeature = new QgsSelectedFeature( snapResults[0].snappedAtGeometry, vlayer, mCanvas ); + connect( QgisApp::instance()->legend(), SIGNAL( currentLayerChanged( QgsMapLayer* ) ), this, SLOT( currentLayerChanged( QgsMapLayer* ) ) ); connect( mSelectedFeature, SIGNAL( destroyed() ), this, SLOT( selectedFeatureDestroyed() ) ); mIsPoint = vlayer->geometryType() == QGis::Point; } @@ -489,6 +492,17 @@ void QgsMapToolNodeTool::selectedFeatureDestroyed() mSelectedFeature = 0; } +void QgsMapToolNodeTool::currentLayerChanged( QgsMapLayer *layer ) +{ + if ( mSelectedFeature && layer != mSelectedFeature->vlayer() ) + { + delete mSelectedFeature; + mSelectedFeature = 0; + + removeRubberBands(); + } +} + void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e ) { if ( !mSelectedFeature ) diff --git a/src/app/nodetool/qgsmaptoolnodetool.h b/src/app/nodetool/qgsmaptoolnodetool.h index 142b0cc1baa3..a857bce8039c 100644 --- a/src/app/nodetool/qgsmaptoolnodetool.h +++ b/src/app/nodetool/qgsmaptoolnodetool.h @@ -55,6 +55,11 @@ class QgsMapToolNodeTool: public QgsMapToolVertexEdit public slots: void selectedFeatureDestroyed(); + /* + * the current layer changed + */ + void currentLayerChanged( QgsMapLayer *layer ); + private: /** * Deletes the rubber band pointers and clears mRubberBands