diff --git a/src/gui/qgsmapcanvas.cpp b/src/gui/qgsmapcanvas.cpp index 713a9de771f..849776f15d1 100755 --- a/src/gui/qgsmapcanvas.cpp +++ b/src/gui/qgsmapcanvas.cpp @@ -89,6 +89,7 @@ QgsMapCanvasRendererSync::QgsMapCanvasRendererSync( QgsMapCanvas* canvas, QgsMap : QObject( canvas ) , mCanvas( canvas ) , mRenderer( renderer ) + , mSyncingExtent( false ) { connect( mCanvas, SIGNAL( extentsChanged() ), this, SLOT( onExtentC2R() ) ); connect( mRenderer, SIGNAL( extentsChanged() ), this, SLOT( onExtentR2C() ) ); @@ -109,12 +110,24 @@ QgsMapCanvasRendererSync::QgsMapCanvasRendererSync( QgsMapCanvas* canvas, QgsMap void QgsMapCanvasRendererSync::onExtentC2R() { + // protection against possible bounce back + if ( mSyncingExtent ) + return; + + mSyncingExtent = true; mRenderer->setExtent( mCanvas->mapSettings().extent() ); + mSyncingExtent = false; } void QgsMapCanvasRendererSync::onExtentR2C() { + // protection against possible bounce back + if ( mSyncingExtent ) + return; + + mSyncingExtent = true; mCanvas->setExtent( mRenderer->extent() ); + mSyncingExtent = false; } void QgsMapCanvasRendererSync::onMapUnitsC2R() diff --git a/src/gui/qgsmapcanvas.h b/src/gui/qgsmapcanvas.h index fdb943affe4..243135109db 100755 --- a/src/gui/qgsmapcanvas.h +++ b/src/gui/qgsmapcanvas.h @@ -662,6 +662,8 @@ class QgsMapCanvasRendererSync : public QObject protected: QgsMapCanvas* mCanvas; QgsMapRenderer* mRenderer; + + bool mSyncingExtent; };